Сохранить обработанное изображение - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужно работать с огромным количеством изображений, около 80 ГБ.Мне нужно предварительно обработать изображение так, чтобы оно имело правильный размер, чтобы его можно было распознать в NN.Тем не менее, я не знаю, как лучше сохранить обработанное изображение.В настоящее время я просто сохранил его в список.Какой тип файла я могу экспортировать с этим списком?И как я могу это сделать ???

from PIL import Image
from zipfile import ZipFile
import numpy as np
import tensorflow as tf
import random

def main():

    # import data
    labels = []  #list of file names without suffix
    img = []

    with ZipFile('train_8.zip','r') as archive:
        for item in archive.namelist():
          #  labels.append(os.path.splitext(entry.filename)[0])
            if (".jpg" in item or ".JPG" in item):
                with archive.open(item) as file:
                    ima = Image.open(file)
                    ima = ima.resize((928,928))
                    randnum = random.randint(227,701)
                    box = (randnum-113,randnum-113,randnum+114,randnum+114)
                    region = ima.crop(box)
                    img.append(np.asarray(ima.crop(box)))

if __name__ == '__main__':
    main()

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Самый простой формат для вас - это файл .npy, если у вас достаточно ОЗУ, а это просто массив с пустым фрагментом.Преобразуйте ваш список в массив numpy, а затем просто выполните

 np.save(file, array)

. Затем вы можете загрузить его с помощью простой команды:

np.load(file)

Если у вас недостаточно ОЗУ, вы можете использоватьФормат h5, который разработан для таких случаев использования, хотя и немного сложнее в использовании.Он имитирует файловую систему внутри зашифрованных данных и, следовательно, значительно уменьшит размер вашего файла и упростит последовательный доступ.Как начать работу с этим в python, показано здесь: (http://docs.h5py.org/en/stable/).

Другой распространенный подход - просто сохранять файлы как изображения и использовать tf.data для загрузки изображений на лету. Это только необходимоесли ваши данные слишком велики для загрузки в память, тогда вы можете использовать .json, как мой препостер, чтобы связать ярлыки с изображениями.

0 голосов
/ 29 ноября 2018

Вы можете экспортировать данные в виде файла json

from PIL import Image
from zipfile import ZipFile
import numpy as np
import tensorflow as tf
import random
import json

def main():

    # import data
    labels = []  #list of file names without suffix
    img = []

    with ZipFile('train_8.zip','r') as archive:
        for item in archive.namelist():
            # labels.append(os.path.splitext(entry.filename)[0])
            if (".jpg" in item or ".JPG" in item):
                with archive.open(item) as file:
                    ima = Image.open(file)
                    ima = ima.resize((928,928))
                    randnum = random.randint(227,701)
                    box = (randnum-113,randnum-113,randnum+114,randnum+114)
                    region = ima.crop(box)
                    img.append(np.asarray(ima.crop(box)))

    # save using json
    f=open('file.json','w')
    f.write(json.dumps({"labels":labels,"img":img}))
    f.close()

if __name__ == '__main__':
    main()

Чтобы прочитать их, используйте:

import json

# read file
f=open('file.json','r')
d=json.loads(f.read())
f.close()

# save to seperate varibles
labels=d["labels"]
img=d["img"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...