ubuntu18.04 opencv4.1.0 + dense_flow安装与使用

安装与测试

1 配置环境

  • Nvidia 驱动
  • cuda
  • NVIDIA VIDEO CODEC SDK
  • ffmpeg
  • opencv和opencv_contrib

1.0 安装Nvidia驱动

 

1.1 安装cuda

安装cuda 

 

1.2 安装NVIDIA VIDEO CODEC SDK

注意cuda9.0与cuda10.0的区别

CUDA 10.0 中 Decode 模块已经被废弃:https://docs.nvidia.com/cuda/video-decoder/index.html

该模块和 Encode 模块将作为 NVIDIA VIDEO CODEC SDK 模块独立发行:https://developer.nvidia.com/nvidia-video-codec-sdk

 

解决方案1:

 (For CUDA 10.0 or later) CUDA 9.x should have no problem.   cuda10的同志们这里注意了!!!
Video decoder is deprecated in CUDA 10.0. To handle this, download NVIDIA VIDEO CODEC SDK and copy the header files to your cuda path (/usr/local/cuda-10.0/include/ for example). Note that you may have to do as root.

unzip Video_Codec_SDK_9.0.20.zip
cp Video_Codec_SDK_9.0.20/include/nvcuvid.h /usr/local/cuda-10.0/include/
cp Video_Codec_SDK_9.0.20/include/cuviddec.h /usr/local/cuda-10.0/include/

 

如上所示,从Nvidia官网下载与cuda版本相对应版本的 VIDEO CODEC SDK,并按照上述步骤将其解压,复制nvcuvid.h和cuviddec.h到相应的位置。

这里给出两个VIDEO CODEC SDK 对应的 cuda 版本,其余的可从官网找到:https://developer.nvidia.com/nvidia-video-codec-sdk

Video_Codec_SDK_9.0.20   <------>   cuda-10.0

Video_Codec_SDK_10.0.26  <------>  cuda-10.1 或 cuda-10.2

否者,使用如下配置编译opencv时,将会报错:Cuda 10.0 fatal error: nvcuvid.h: No such file or directory

cmake -D BUILD_opencv_cudacodec=ON 

解决方案2:

既然 nvcuvid.h 和 cuviddec.h 两个头文件不在搜索路径下,那么将其添加到编译时的搜索路径下就可以解决 fatal error: nvcuvid.h: No such file or directory 错误了,操作如下:

从Nvidia官网下载与cuda版本相对应版本的 VIDEO CODEC SDK,并将其解压。

# unzip 
unzip Video_Codec_SDK_10.0.26.zip

# 在 .bashrc 文件中添加 C_INCLUDE_PATH 和 CPLUS_INCLUDE_PATH 两个变量
vi ~/.bashrc
export C_INCLUDE_PATH=/home/jyguan/software/Video_Codec_SDK_10.0.26/Interface:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/jyguan/software/Video_Codec_SDK_10.0.26/Interface:$CPLUS_INCLUDE_PATH

# 更新.bashrc 文件,使添加的两个变量生效
source ~/.bashrc

其中,/home/jyguan/software/Video_Codec_SDK_10.0.26/Interface 路径包含了 nvcuvid.h 和 cuviddec.h 两个文件。

 

1.3 安装ffmpeg

安装opencv前,安装好相应版本的ffmpeg,具体参考Video Codec SDK要求的ffmpeg版本(下载的Video Codec SDK文件夹中有相应的说明)。使用源码编译安装,(或者使用包管理器安装【待定】),都可以。

各版本ffmpeg下载链接:http://www.ffmpeg.org/download.html#releases

 

 

安装后好ffmpeg后,假设ffmpeg的安装目录是 /home/jyguan/.local ,在 .bashrc 文件里添加如下环境变量(目的是让opencv能够找到ffmpeg)

export PKG_CONFIG_PATH=/home/jyguan/.local/lib/pkgconfig:$PKG_CONFIG_PATH

使用 source 命令更新 .bashrc 文件, 使变量生效

 

1.4 安装opencv和opencv_contrib

注意:在1.3中安装了ffmpeg,如何使opencv找到上面安装的ffmpeg呢?参考此链接:https://blog.csdn.net/qq_43685315/article/details/86646642

前些日子手动编译opencv模块的时候,一直提示找不到ffmpeg libs (例如 libswscale , libavformat 等库)。 奇怪,明明我源码安装了 ffmpeg,但为什么还是找不到呢。

通过cmake的 的脚本,阅读了下cmake的一些脚本,终于找到了原因并解决。opencv的cmake脚本使用了 CHECK_MODULE 宏, 而这个宏又调用了 pkg_check_module 宏。(此宏的定义在 /usr/share/cmake/FindPkgConfig.cmake)。 pkg_check_module中需要通过 pkg-config 命令来查找是否有对应的package 模块。 所以我们也需要安装 pkg-config 软件包。 那么pkg-config 又是如何来知道我们的系统是否安装了某个模块呢? pkg-config是通过 *.pc 的文件来判断。 例如 如果pkg-config找到了 libswscale2.11.pc 则就说明我们有 libswscale 2.11 库。

而 libswscale2.11.pc 里则定义了 header和lib的目录位置。

所以问题来了,我明明通过源码的方式安装了,但是还是提示找不到呢。 原来是 pkg-config 寻找 pc文件目录的问题。

默认pkg-config(笔者的安装版本) 只会寻找 /usr/share/pkgconfig/*.pc 和 /usr/lib/pkgconfig/*.pc , /usr/lib64/pkgconfig/*.pc 。 而我通过源码方式安装的时候, 对应的库的pc文件 默认安装到了 /usr/local/lib/pkgconfig/。 所以pkg-config找不到,也就认为没有安装了。 经过笔者测试,如果通过 yum 安装的方式,则pc文件会放到 /usr/lib 或者 /usr/lib64/ 里,所以就没有这个问题。

解决方法:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig;$PKG_CONFIG_PATH

这样export下,就没有问题了。

linux下编译opencv需要cmake,有两种方式,cmake与cmake-gui,这个网上教程很多,但是opencv4版本之后,默认配置是不生成opencv.pc,就导致我们使用起来很困难,所以我们cmake的时候可以先配置一下。 参考此链接:https://blog.csdn.net/s15810751918/article/details/107705387

 -D OPENCV_GENERATE_PKGCONFIG=ON 这个配置一定要加上,Linux下我们使用opencv,需要使用pkg-config来进行环境变量的管理,这个软件需要.pc类型的文件作为软件配置信息,如果我们不配置,会出现opencv安装成功但是c编程无法使用的情况,Python好像可以直接使用。。,网上有部分教程说可以手写,但是其实很困难,因为库之间是有依赖关系的,所以如果顺序放错也会找不到,最好还是自动生成。

注意opencv3与opencv4

下载、编译、安装opencv4.1.0

# Download and unpack sources
wget -O OpenCV-4.1.0.zip https://github.com/opencv/opencv/archive/4.1.0.zip 
unzip OpenCV-4.1.0.zip
wget -O OpenCV_contrib-4.1.0.zip https://github.com/opencv/opencv_contrib/archive/4.1.0.zip
unzip OpenCV_contrib-4.1.0.zip


# Create build directory and switch into it
mkdir -p build $$ cd build

# Configure
 cmake \
-D CMAKE_INSTALL_PREFIX=$HOME/.local \
-D CMAKE_BUILD_TYPE=Release \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D WITH_CUDA=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.1.0/modules/ \
-D WITH_TBB=ON \
-D BUILD_opencv_cnn_3dobj=OFF \
-D BUILD_opencv_dnn=OFF \
-D BUILD_opencv_dnn_modern=OFF \
-D BUILD_opencv_dnns_easily_fooled=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_FFMPEG=ON \
-D CUDA_GENERATION=Turing \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=OFF \
-D PYTHON3_EXECUTABLE=/home/jyguan/software/anaconda3/envs/project_compress/bin/python3.7m \
-D PYTHON3_INCLUDE_DIR=/home/jyguan/software/anaconda3/envs/project_compress/include/python3.7m  \
-D PYTHON3_LIBRARY=/home/jyguan/software/anaconda3/envs/project_compress/lib/libpython3.7m.so  \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/jyguan/software/anaconda3/envs/project_compress/lib/python3.7/site-packages/numpy/core/include  \
-D PYTHON3_PACKAGES_PATH=/home/jyguan/software/anaconda3/envs/project_compress/lib/python3.7/site-packages  \
-D PYTHON_DEFAULT_EXECUTABLE=/home/jyguan/software/anaconda3/envs/project_compress/bin/python3.7m  ../opencv-4.1.0

# Compile
make -j4

# Install
make install

注意:

(1)根据自己的显卡架构设置参数:-D CUDA_GENERATION=Turing,比如:2080Ti是Turing架构,MX250是Pascal架构

(2)使用 -D CMAKE_INSTALL_PREFIX=$HOME/.local  参数修改安装目录

(3)假设opencv安装目录是 /home/jyguan/.local, 则在/home/jyguan/.local/lib/pkgconfig目录下有一个 opencv4.pc 文件,opencv4.pc 文件记录了opencv相应的头文件和动态库的路径 ,在 .bashrc 文件里添加如下环境变量,使得编译 dense_flow 时可以找到安装的opencv。

export PKG_CONFIG_PATH=/home/jyguan/.local/lib/pkgconfig:$PKG_CONFIG_PATH

使用 source 命令更新 .bashrc 文件,使变量生效

(4)安装好opencv后,在 .bashrc 文件里添加如下变量

export PATH=/home/jyguan/.local/bin:$PATH
export LD_LIBRARY_PATH=/home/jyguan/.local/lib:$LD_LIBRARY_PATH

使用 source 命令更新 .bashrc 文件,使变量生效,在命令行输入如下命令,查看opencv安装版本。

jyguan@user-NF5468M5:~$ opencv_version
4.1.0

(5) linux下编译安装OpenCV + python3  参考链接:【1】https://www.dazhuanlan.com/2020/01/20/5e250fb0bd6b1/  【2】https://www.jianshu.com/p/8fd19e45e01b  【3】https://blog.csdn.net/qq_36275734/article/details/81158966  编译opencv时指定如下参数:

# 进入opencv源码目录
cd /
mkdir build
cd build
# 运行cmake
cmake 
-DCMAKE_BUILD_TYPE=Release 
-DPYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 
-DBUILD_opencv_python3=ON 
-DBUILD_opencv_python2=OFF 
-DPYTHON3_EXECUTABLE=/usr/bin/python3 
-DPYTHON_INCLUDE_DIR=/usr/include/python3.5 
-DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python3.5m 
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so 
-DPYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include 
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules 
-DCMAKE_INSTALL_PREFIX=/usr/local 
-DBUILD_EXAMPLES=OFF 
..
# 编译和安装
sudo make install -j4

 

 

下载、编译、安装最新版本的opencv【忽略这个最新版的opencv安装】

# Download and unpack sources
wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip
unzip opencv.zip
unzip opencv_contrib.zip
# Create build directory and switch into it
mkdir -p build && cd build

# Configure
cmake -D CMAKE_BUILD_TYPE=Release -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_opencv_cnn_3dobj=OFF -D BUILD_opencv_dnn=OFF -D BUILD_opencv_dnn_modern=OFF -D BUILD_opencv_dnns_easily_fooled=OFF -D OPENCV_ENABLE_NONFREE=ON -D CUDA_GENERATION=Turing -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../opencv-master

#Compile
make -j4

#Install
sudo make install

 

 

2 安装dense_flow

下载dense_flow, dense_flow 应该与 opencv-4.1.0文件夹同级,

ubuntu18.04 opencv4.1.0 + dense_flow安装与使用_第1张图片

 

# download dense_flow
git clone --recursive http://github.com/yjxiong/dense_flow
cd dense_flow/
mkdir build && cd build

OpenCV_DIR=../../build/  

# configure
cmake ..

# compile
make -j4

 

3.测试

在build目录下不要退出,在build目录下按照如下文件夹结构新建文件夹

build
    |--tmp
    |    |--flow_x
    |    |--flow_y
    |    |--image

放一个视频test.avi,然后执行:

./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: 输出RGB文件和光流文件
  • dir: 输出到文件夹。将dir换为zip,会输出到zip文件

基于GPU成功提取到的dense_flow:

ubuntu18.04 opencv4.1.0 + dense_flow安装与使用_第2张图片

 

 

参考链接

https://blog.csdn.net/qq_35209694/article/details/106953949

https://github.com/yjxiong/dense_flow

https://zhuanlan.zhihu.com/p/73630815

 

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