在jupyter-lab中显示数组视频的快速方法

时间:2019-07-16 15:10:51

标签: python matplotlib jupyter-notebook jupyter-lab

我正在尝试在jupyter-lab的笔记本中显示来自某些阵列的视频。数组在运行时生成。哪种显示图像的方法可以提供(相对)较高的帧率?使用matplotlib和imshow有点慢。这些图片约为1.8兆像素。 以上是一个非常小的示例,以可视化我想要实现的目标。

while(True): #should run at least 30 times per second 
    array=get_image() #returns RGBA numpy array  
    show_frame(array) #function I search for

1 个答案:

答案 0 :(得分:0)

最快的方法(例如,用于调试目的)是使用matplotlib inline和matplotlib animation软件包。这样的事情对我有用

%matplotlib inline
from matplotlib import pyplot as plt
from matplotlib import animation
from IPython.display import HTML

# np array with shape (frames, height, width, channels)
video = np.array([...]) 

fig = plt.figure()
im = plt.imshow(video[0,:,:,:])

plt.close() # this is required to not display the generated image

def init():
    im.set_data(video[0,:,:,:])

def animate(i):
    im.set_data(video[i,:,:,:])
    return im

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=video.shape[0],
                               interval=50)
HTML(anim.to_html5_video())

视频将以指定的帧率循环播放(在上面的代码中,我将间隔设置为50毫秒,即20 fps)。

注意,这是一个快速的解决方法,并且IPython.display拥有一个Video软件包(您可以找到文档here),该软件包可用于复制来自文件或URL(例如,来自YouTube)的视频。 因此,您还可以考虑将数据存储在本地,并利用内置的Jupyter视频播放器。