我需要处理大量的图像,大约80GB。我需要对图像进行预处理,以使其具有合适的尺寸,以适合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()
答案 0 :(得分:0)
您可以将数据导出为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"]
答案 1 :(得分:0)
如果您有足够的RAM,则最容易使用的格式是.npy文件,它只是一个numpy数组。将您的列表转换为numpy数组,然后执行
np.save(file, array)
然后您可以使用以下简单命令加载该文件:
np.load(file)
如果您没有足够的RAM,则可以使用h5格式,尽管这种格式使用起来有点困难,但它是针对此类用例设计的。它在加密数据内部模拟了文件系统,因此将大大减少文件大小,并使顺序访问变得容易。此处显示了如何在python中开始使用:(http://docs.h5py.org/en/stable/)。
另一种常见方法是仅将文件存储为图像,然后使用tf.data
快速加载图像。仅在您的数据太大而无法加载到内存中时才需要这样做。然后,您可以像使用我的海报一样使用.json将标签链接到图像。