Я пытаюсь отобразить последовательность кадров, используя Shady, но у меня возникают трудности.Я смотрю на 25 кадров, охватывающих область 1080x1080 пикселей.Стимул - в оттенках серого, и я делаю линеаризацию яркости в автономном режиме, поэтому мне нужно только сохранить значение uint8 для каждого пикселя.Полная последовательность составляет около 29 МБ.Я определяю стимул как массив 3-D numpy [1080x1080x25] и сохраняю его на диск с помощью np.save ().Затем я загружаю его с помощью np.load ().
try:
yy = np.load(fname)
except:
print fname + ' does not exist'
return
Этот шаг занимает около 20 мс.Насколько я понимаю, Shady имеет дело не со значениями яркости uint8, а с числами с плавающей точкой от 0 до 1. Таким образом, я преобразовываю его в массив с плавающей точкой и делю на 255.
yy = yy.astype(np.float)/255.0
Этот второй шаг занимает примерно260 мс, что уже не здорово (в идеале мне нужно загрузить стимул и подготовить его к презентации за 400 мс).Теперь я создаю список из 25 пустых массивов для использования в качестве параметра pages в классе Stimulus:
pages = []
for j in range(yy.shape[2]):
pages.append(np.squeeze(yy[:, :, j]))
Это практически мгновенно.Но на следующем шаге я столкнулся с серьезными проблемами синхронизации.
if (self.sequence is None):
self.sequence = self.wind.Stimulus(pages, 'sequence', multipage=True, anchor=Shady.LOCATION.UPPER_LEFT, position=[deltax, deltay], visible=False)
else:
self.sequence.LoadPages(pages, visible=False)
Здесь я либо создаю объект Stimulus, либо обновляю его атрибут pages , если это не первая загружаемая последовательность.В любом случае, этот шаг занимает около 10 секунд, что примерно в 100 раз больше, чем я могу допустить в своем приложении.
Есть ли способ значительно ускорить это?Что я делаю неправильно?У меня довольно посредственная видеокарта на этой машине (Radeon Pro WX 4100), и если в этом проблема, я мог бы ее обновить, но я не хочу переживать, если это не поможет.