我正在尝试使用 Shady 显示一系列帧,但我遇到了困难。我正在查看 25 帧,覆盖 1080x1080 像素区域。刺激是灰度的,我是离线做亮度线性化的,所以我只需要为每个像素保存一个 uint8 值。因此,完整序列约为 29Mb。我将刺激定义为 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 个 numpy 数组的列表,用作Stimulus 类中的pages参数:
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),如果这是我可以升级它的问题,但如果这不能解决它,我不想经历麻烦。