Я пытаюсь создать базу данных изображений, совместимую с cPickle. Первоначально список пуст. Данные каждого изображения в каталоге добавляются как новая строка в список. Изображения 224x224. Размер изображений составляет в среднем 8 КБ. После загрузки около 10000 изображений мой компьютер зависает. Движения мыши отсутствуют. Ничего не произошло. требуется перезагрузка. Ниже фрагмент кода, который делает это ..Создание действительно больших списков Python
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-битный исполняемый файл. ОЗУ составляет 4 ГБ. Ubuntu 14.04. Я подозреваю, что это происходит из-за ограниченного пространства стека, и список занимает больше, чем доступное пространство стека. Если да, то как мне создать этот огромный список? есть ли какие-либо способы решения этой проблемы? Моя конечная цель - создать массив numpy с пиксельными данными в качестве его строк. В настоящее время я конвертирую список в массив numpy. Есть ли решение для этой проблемы?
Не могли бы вы создать генератор, который дает кортеж метки и пикселей для каждого изображения. Чтобы вам никогда не приходилось создавать все данные в памяти сразу? –
Я не могу воспроизвести вашу проблему, потому что у меня нет PIL. Но я думаю, что проблема в том, что JPG является сжатым форматом, и вы пытаетесь сохранить несжатый формат, который будет намного больше, чем 8K на изображение. – maxymoo
Мне не нравятся такие ответы, как мои, но в целом вы должны избегать хранить все в памяти. Использовать генератор/открывать и закрывать файлы в цикле, не все сразу –