将TensorBoard图像序列转换为Video / GIF

问题描述 投票:0回答:1

我有一个脚本,该脚本生成一系列matplotlib图形,并使用TensorBoard SummaryWriter()将它们写入磁盘。 TensorBoard提供了移动一个小滑块以在图像序列中前进和后退的功能,但是我想将图像序列转换为视频或动画。有办法吗?

编辑1:这是我当前代码的简化示例。我想将.add_figure写入日志文件的图像转换为gif。

import matplotlib.pyplot as plt
import numpy as np
from torch.utils.tensorboard import SummaryWriter

n = 200
nframes = 25
x = np.linspace(-np.pi*4, np.pi*4, n)
tensorboard_writer = SummaryWriter()

for i, t in enumerate(np.linspace(0, np.pi, nframes)):
    plt.plot(x, np.cos(x + t))
    plt.plot(x, np.sin(2*x - t))
    plt.plot(x, np.cos(x + t) + np.sin(2*x - t))
    plt.ylim(-2.5,2.5)
    fig = plt.gcf()
    tensorboard_writer.add_figure(
        tag='temp',
        figure=fig,
        global_step=i,
        close=True)

image matplotlib animation video tensorboard
1个回答
0
投票

您可以使用imageio或matplotlib的FuncAnimation从代表帧的一组文件中创建动画。例如,我根据

创建了一组文件
import matplotlib.pyplot as plt
import numpy as np

n = 200
nframes = 25
x = np.linspace(-np.pi*4, np.pi*4, n)

for i, t in enumerate(np.linspace(0, np.pi, nframes)):
    plt.plot(x, np.cos(x + t))
    plt.plot(x, np.sin(2*x - t))
    plt.plot(x, np.cos(x + t) + np.sin(2*x - t))
    plt.ylim(-2.5,2.5)
    plt.savefig('frame.'+str(i)+'.png', bbox_inches='tight', dpi=300)
    plt.clf()

这会创建一系列nframes(示例为25)文件,其命名约定为'frame.n.png',其中n是帧号。在一个半周期内绘制了两个正弦波传播波和所产生的波。

然后使用FuncAnimation方法执行>

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig = plt.figure(figsize=(10, 6), dpi=300)
nframes = 25

def animate(i):
    im = plt.imread('frame.'+str(i)+'.png')
    plt.imshow(im)
    plt.axis('off')

anim = FuncAnimation(fig, animate, frames=nframes, interval=(2000.0/nframes))
anim.save('output.gif', writer='imagemagick')

使用图像处理方法,您只需完成

import imageio

nframes = 25
files = ['frame.'+str(i)+'.png' for i in range(nframes)]

frames = [imageio.imread(f) for f in files]
imageio.mimsave('output.gif', frames, fps=(nframes / 2.0))

任何一种方法都可以制作此动画:

enter image description here

但是,与FuncAnimation方法相比,imageio方法要快[[很多]:

> $ time python3 imageio.py real 0m9.483s user 0m9.484s sys 0m1.156s > $ time python3 FuncAnimation.py real 15m36.151s user 3m28.375s sys 12m3.578s
但是,也值得注意的是,FuncAnimation方法生成的文件比imageio方法创建的文件小[]。

2.5M Jan 23 18:36 FuncAnimation.gif 13M Jan 23 18:08 imageio.gif

如果您偏爱编程方法,那么您当然也可以使用ffmpeg执行此操作。
© www.soinside.com 2019 - 2024. All rights reserved.