欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

dense_flow复现

程序员文章站 2024-01-28 09:39:40
...

最近做动作识别,得对视频提取光流,如果需要提取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复现
继续编译通过了,可以看到生成的三个目标文件
dense_flow复现

测试

./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复现

结果

dense_flow复现