1介绍
本文利用flownet2生成一个有意思的短视频,介绍了本人从下载到使用遇到的一些坑,第一篇博客,没啥经验,逻辑不清楚还请见谅!
由于手头的科研任务需要生成光流图作为输入,因此开始想办法得到光流图,刚开始了解的是利用denseflow来生成,后来在配置denseflow环境的时候总是遇到奇怪的错误,本小白没能解决,于是随即转用flownet2了,听组内的小伙伴说 flownet2效果比较好。
flownet2生成的光流视频
原视频是来自douyin的短视频,上面是根据flownet2生成的视频。这样一对比感觉就很有趣了 (^ _ ^)
2.下载及运行
代码下载地址:github code,也可以直接利用下面的命令来下载。
在安装install.sh之前,参考1.链接中所说的那样,需要将c++11改为14
git clone https://github.com/NVIDIA/flownet2-pytorch.git
然后,
cd flownet2-pytorch
接着,
bash install.sh
这样,我们便成功的安装了flownet2.
由于我只需要利用flownet2来生成我所需要的光流图,于是便没有从头开始训练模型,我直接用预训练好的模型来进行生成的(链接)。
生成的代码是
python main.py --inference --model FlowNet2 \
--save_flow --inference_dataset ImagesFromFolder \
--resume /home/wenshijie/flownet2-pytorch/checkpoints/FlowNet2_checkpoint.pth.tar \
--save /home/wenshijie/flownet2-pytorch/douyin/output/ \
--inference_dataset_root /home/wenshijie/flownet2-pytorch/douyin/frames/ \
--number_gpus 1
将number_gpus设置为1是为了生成和原图像帧数-1的光流图数,也就是假如inference_dataset_root目录下有50帧图片,那么可以生成49帧光流图,如果这里不设置为1而是默认为4的话,只能生成12帧光流图。
由于生成的光流图是.flo文件不能直接可视化,于是通过下面两种方法来生成png格式的图片:
import os
path = './run.epoch-0-flow-field/'
png_path = './png/'
length = len(os.listdir(path))
num = 0
while (num < length):
ml = '/home/wenshijie/flownet2-pytorch/flow-code/color_flow\t' + path + str(num).rjust(6,'0') + '.flo\t' + png_path + str(num).rjust(6,'0') + '.png'
os.system(ml)
num += 1
注意在这里,要注意修改你自己的文件路径确保正常运行。还有,str(num).rjust(6,‘0’)为什么后面加了rjust(6,‘0’),是因为在flownet2代码中生成的是000001.flo这样的文件名,如果不加则会出现如下错误
经过以上步骤就可以生成png图像了
- 第二种方法就是通过flowiz 链接来转化,这种转化比较小众一点,但是更有意思,文首的视频便是通过这种方法来生成的。关于flowiz的下载和安装比较容易,直接一步执行即可
pip install flowiz -U
普通的单个文件的转化可以直接参照官网即可,下面我们介绍一种批量转化的方法
python -m flowiz \
# 待转化的.flo文件地址,
/home/wenshijie/flownet2-pytorch/douyin/output/inference/run.epoch-0-flow-field/*.flo \
# 输出的png文件地址
-o /home/wenshijie/flownet2-pytorch/douyin/output/color_coding \
# 输出的视频文件地址
-v /home/wenshijie/flownet2-pytorch/douyin/output/color_coding/video \
-r 30
这第二种方法不仅可以生成png文件,还可以直接生成MP4文件。需要指明的是,如果想根据你的视频生成你的光流视频,得有这么几个步骤:
-
首先你得把你的视频生成图片序列,这个步骤可以通过ffmpeg来实现
-
然后将图片通过flownet2生成.flo文件,
-
最后用flowiz将.flo文件生成视频和png图片序列。
还有,最后生成的视频是.flo.png格式的,windows自带的视频播放器是不支持这种格式的直接播放的,你可以将视频发送到微信,在微信中就可以直接播放,当然,通过别的播放器也能播放,除了自带的,,,
3.总结
至此,我们就可以将一个普通的视频序列生成一个光流视频序列。