Я написал сценарий, который создает анимацию (фильм) из файлов подгонки. Один файл имеет размер 2,8 МБ и номер. файлов составляет 9000. Вот кодпрочитал много файлов и создал анимацию-питон
import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import os
import pyfits
import glob
import re
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800)
global numbers
numbers=re.compile(r'(\d+)')
def numericalSort(value):
parts = numbers.split(value)
parts[1::2] = map(int, parts[1::2])
return parts
image_list=glob.glob('/kalib/*.fits')
image_list= sorted(image_list,key=numericalSort)
print image_list
fig = plt.figure("movie")
img = []
for i in range(0,len(image_list)):
hdulist = pyfits.open(image_list[i])
im = hdulist[0].data
img.append([plt.imshow(im,cmap=plt.cm.Greys_r)])
ani = animation.ArtistAnimation(fig,img, interval=20, blit=True,repeat_delay=0)
ani.save('movie.mp4', writer=writer)
Я думаю, что моя проблема в том, когда я создаю массив IMG [] ... У меня есть 8 ГБ оперативной памяти и когда оперативная память полна моя операционная система прекращает питон скрипт.
Мой вопрос: Как я могу читать 9000 файлов и создавать анимацию? Возможно ли создать некоторый буфер или некоторую параллельную обработку?
Любое предложение?
Спасибо за ответ ... но я думаю, что это не моя проблема ... У меня есть проблемы с чтением массива данных из файлов IMG [] массив ... Анимация создается, когда я прочитанные array img [] –
Правильно, но проблема в том, что вы не принимаете правильный подход в первую очередь. Вы не должны создавать * список * изображений с imshow, потому что каждый из них занимает память. FuncAnimation позволяет вам отображать один кадр за раз по мере необходимости, без одновременного рендеринга всех изображений. Возможно, вы можете быть более ясными о том, чего вы надеетесь достичь, но сделать большой список художников-иллюстраторов не так. – Iguananaut
В качестве продолжения причина того, что вы делаете, например, сюжет линии или что-то в этом роде, состоит в том, что линии и многоугольники и т. Д. Тривиальны для представления в памяти и анимации. Целые изображения - это разные истории, и когда вы вызываете imshow, вы используете память для каждого пикселя каждого кадра. Наивный подход не сработает. – Iguananaut