【发布时间】:2015-08-18 14:54:00
【问题描述】:
我正在尝试创建与 cPickle 兼容的图像数据库。最初列表是空的。目录中每个图像的数据作为新行添加到列表中。图像为 224x224。图像大小平均为 8KB。加载大约 10000 张图像后,我的电脑挂了。没有鼠标移动。什么都没发生。需要重启。下面是执行此操作的代码 sn-p..
cr=csv.reader(open(csv_file,"rb"))
for row in cr:
print row[0], row[1]
try:
image=Image.open(row[0]+'.jpg').convert('LA')
pixels=[]
pixels=[f[0] for f in list(image.getdata())]
#pix=np.array(image)
dataset.append(pixels)
#dataset.append(pix)
labels.append(row[1])
del image
except:
print("image not found")
我尝试将图像尺寸减小到 28X28,它可以工作。但我不想减小图像的大小。我正在使用 python 64 位可执行文件。内存为 4GB。 Ubuntu 14.04。我怀疑这是由于堆栈空间有限而发生的,并且列表占用的堆栈空间超过了可用的堆栈空间。如果是这样,我如何创建这个巨大的列表?这个问题有什么解决方法吗?我的最终目标是创建一个以像素数据为行的 numpy 数组。目前我正在将列表转换为 numpy 数组。这个问题有解决方案吗??
【问题讨论】:
-
您能否创建一个生成器,为每个图像生成标签和像素的元组。这样您就不必一次真正在内存中创建所有数据?
-
我无法复制您的问题,因为我没有安装 PIL。但我认为问题在于 JPG 是一种压缩格式,而您正在尝试存储未压缩的格式,这将比每张图像 8K 大得多。
-
我不喜欢像我这样的答案,但总的来说,您应该避免将所有内容都保存在内存中。循环使用生成器/打开和关闭文件,而不是一次全部使用
-
您总是可以放弃构建自己的数据库格式并使用标准库中的搁置...docs.python.org/2/library/shelve.html
-
@maxymoo 你是说使用其他格式不会导致这个问题吗?我尝试只加载这些图像,而不将数据附加到列表中。它没有崩溃。我怀疑这是列表的问题
标签: python arrays list numpy crash