dense_flow复现

最近做动作识别,得对视频提取光流,如果需要提取warp optical flow的话也可以,这个可以让视频减少视频背景对动作光流的影响,专注于前景运动,dense_flow源码地址https://github.com/yjxiong/dense_flow/tree/opencv-3.1

环境

1、Ubuntu16.04
2、CUDA9.0
3、CUDNN7.6.5
4、OpenCV3.4.10
(opencv安装参考链接:https://blog.csdn.net/weixin_38257276/article/details/110428107)

LibZip

如果需要对提取的rgb图像和光流图像进行压缩打包的话,需要安装libzip-dev,ubuntu16.04安装libzip:

sudo apt-get install libzip-dev

推荐使用源码编译安装,下载地址:https://libzip.org/download/

下载加压后,直接cmake编译安装即可,这部分可参考链接https://www.jianshu.com/p/3229b4e23b0d

下载项目

必须带参数–recursive,否则easylogging++ 和clue的头文件部分不能被正确下载

git clone --recursive http://github.com/yjxiong/dense_flow
mkdir build && cd build
cmake .. && make -j

遇到的错误

1、编译的时候如果出现:
CUDA error: no kernel image is available for execution on the device,说明你在安装的CUDA的算力不匹配,我是选择重新编译opencv,然后通过了

-D CUDA_GENERATION=Kepler  #这个地方根据自己的CUDA以及显卡架构确定,我直接去掉这个选项

2、make -j4的时候出现了错误error: ‘DualTVL1OpticalFlow’ is not a member of ‘cv::optflow’
解决办法:好像opencv4.0以上才是cv::optflow::DualTVL1OpticalFlow,4.0以下不是这样用的,应该是cv::DualTVL1OpticalFlow
解决办法:找到dense_flow.cpp,按照下图修改
在这里插入图片描述
继续编译通过了,可以看到生成的三个目标文件
dense_flow复现_第1张图片

测试

./extract_gpu -f=test.avi -x=tmp/flow_x -y=tmp/flow_y -i=tmp/image -b=20 -t=1 -d=0 -s=1 -o=dir
#test.avi: 你要处理的视频
#tmp: 输出的文件夹
#dir: 选择dir是直接输出到上面的路径,原图,要生成压缩包,改成zip

注意,我在测试extract_warp_gpu的时候按照原作者给的方式不行,原作者是:

./extract_warp_gpu -f test.avi -x tmp/flow_x -y tmp/flow_y -i tmp/image -b 20 -t 1 -d 0 -s 1 -o dir

下面是我的实际终端输入命令,就是得跟上一条命令一样加等号:
在这里插入图片描述

结果

dense_flow复现_第2张图片

你可能感兴趣的:(opencv,计算机视觉)