gpt4 book ai didi

python - 根据视频帧而不是时间控制 Shady 中的动态属性

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:57 25 4
gpt4 key购买 nike

我正在尝试使用 Shady 来呈现一系列图像帧。我正在控制来自另一台机器的流程,因此我首先指示运行 Shady 的机器呈现第一帧,然后再运行其余帧。我创建了一个 World 实例,并为其附加了一个动画回调函数。在这个回调中,我监听来自另一台机器的通信(使用 UDP)。首先,我收到一个加载给定序列的命令(存储为 numpy 数组),然后我执行

def loadSequence(self, fname):
yy = np.load(fname)
pages = []
sz = yy.shape[0]
for j in range(yy.shape[1]/yy.shape[0]):
pages.append(yy[:, j*sz:(j+1)*sz])
deltax, deltay = (self.screen_px[0] - sz) / 2, (self.screen_px[1] - sz) / 2
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)

当我收到显示第一帧的命令时,我会执行以下操作:

def showFirstFrame(self, pars):
self.sequence.page = 0 if (pars[0] == 0) else (len(self.sequence.pages) - 1)
self.sequence.visible = True

但是我现在该怎么做才能显示其他帧?在我看到的示例中,s.page 设置为时间的函数,但我需要显示所有帧,而不考虑时间。所以我想按照这些思路做一些事情:

def showOtherFrames(self, pars, ackClient):
direction, ack = pars[0], pars[2]
self.sequence.page = range(1, len(self.sequence.pages)) if (direction == 0) else range(len(self.sequence.pages)-2, -1, -1)

但这行不通。或者,我想定义一个以 t 作为参数的函数,但忽略它并使用保存在全局变量中的计数器代替,但我想了解执行此操作的正确方法是什么。

最佳答案

当你使 s.page 成为一个动态属性时,分配给它的函数必须有一个参数(t),但是你仍然可以在定义该函数时只使用空间中的任何变量,甚至不使用时间参数全部。

因此,例如,您可以做一些简单的事情:

w = Shady.World(...)
s = w.Stimulus(...)
s.page = lambda t: w.framesCompleted

这会将 page 属性设置为当前帧数。听起来它可能对您的问题有用。

关于python - 根据视频帧而不是时间控制 Shady 中的动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com