【环境搭建】在ubuntu16.04上编译安装ffmpeg和opencv
在Ubuntu16.04上安装ffmpeg
sudo apt-get install yasm
sudo apt-get install build-essential
# -y的意思是当询问是否安装时,默认选Yes
sudo apt-get install -y libass-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libsdl2-dev
sudo apt-get install libtheora-dev
sudo apt-get install libva-dev
sudo apt-get install libvdpau-dev
sudo apt-get install libvorbis-dev
sudo apt-get install libxcb1-dev
sudo apt-get install libxcb-shm0-dev
sudo apt-get install libxcb-xfixes0-dev
sudo apt-get install texinfo
sudo apt-get install zlib1g-dev
【环境搭建】glog和gflags的安装中通过apt方式安装的包这里也需要。
- 编译安装NASM
http://www.linuxfromscratch.org/blfs/view/svn/general/nasm.html
在该网页下载NASM源码压缩包
./configure --prefix=/安装路径
make
make install
- 编译安装x264
源码网页:https://www.videolan.org/developers/x264.html
git clone https://code.videolan.org/videolan/x264.git
./configure --enable-shared --enable-static --prefix=/安装路径
make
make install
- 搜索ffmpeg
- 下载ffmpeg源码
# 将下载的源码包移动到自己的源码包存放目录下
mv ffmpeg-4.1.tar.bz2 /thirdparty-source
tar -jxvf ffmpeg-4.1.tar.bz2
tar解压缩:
- j:带bz2属性的
- z:带gz属性的
- x:解压
- v:显示解压过程
- f:使用文档名字
# "--prefix"后面的目录是指定的安装目录
# --enable-shared等命令的规范和用处出自configure文件,见下图
# 类似的,还可以在./configure后按照相同格式添加命令,让ffmpeg拥有各类功能
./configure --prefix=/thirdparty/ffmpeg-4.1 --enable-shared --enable-gpl --enable-libx264
# 因为这次安装ffmpeg我用的电脑是双核CPU,所以最大使用make -j4(四线程),-j后面的数太大会使电脑死机
make -j4
# 在sudo下 make install 的第三方软件更改必须在sudo下进行
# 直接 make install 的第三方软件可以在普通用户权限下进行更改
sudo make install
在【环境搭建】glog和gflags的安装中的环境变量文件中添加ffmpeg的环境路径,如下。
# ffmpeg
export C_INCLUDE_PATH="/thirdparty/ffmpeg-4.1/include":$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH="/thirdparty/ffmpeg-4.1/include":$CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH="/thirdparty/ffmpeg-4.1/lib":$LD_LIBRARY_PATH
export LIBRARY_PATH="/thirdparty/ffmpeg-4.1/lib":$LIBRARY_PATH
export PKG_CONFIG_PATH="/thirdparty/ffmpeg-4.1/lib/pkgconfig":$PKG_CONFIG_PATH
# PATH 很重要,忘记了会报ffmpeg未安装
export PATH="/thirdparty/ffmpeg-4.1/bin":$PATH
保存退出vim后执行下面的命令使环境变量临时生效。
source .bash_profile
# 查看ffmpeg版本
ffmpeg -version
在Ubuntu16.04上安装OpenCV
安装过程是接着上面的ffmpeg的,重复的依赖包下面不再给出。
- 搜索OpenCV
- 下载OpenCV3.4.5源码
sudo apt-get install libgtk2.0-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavformat-dev
sudo apt-get install libswscale-dev
# 这个包不是Python,这个包是通过编译安装Python的第三方库所必须的包
sudo apt-get install python-dev
sudo apt-get install python-numpy
sudo apt-get install libtbb2
sudo apt-get install libtbb-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libpng-dev
sudo apt-get install libtiff-dev
sudo apt-get install libjasper-dev
sudo apt-get install libdc1394-22-dev
sudo apt-get install libv4l-dev
sudo apt-get install liblapacke-dev
sudo apt-get install libxvidcore-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install gfortran
sudo apt-get install ccache
sudo apt-get install libgstreamer-plugins-base1.0-dev
# 解压源码文件
unzip opencv-3.4.5.zip
cd opencv-3.4.5
# 新建一个名为build的文件夹,在这个空文件夹中编译,编译生成的文件都存放在这个文件夹中
mkdir build
cd build
cmake ../ -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 -DPYTHON_LIBRARY=/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/thirdparty/opencv
make -j4
sudo make install
同样,这里需要在环境变量文件中添加OpenCV相关的路径。
# opencv
export C_INCLUDE_PATH="/thirdparty/opencv/include":$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH="/thirdparty/opencv/include":$CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH="/thirdparty/opencv/lib":$LD_LIBRARY_PATH
export LIBRARY_PATH="/thirdparty/opencv/lib":$LIBRARY_PATH
export CMAKE_PREFIX_PATH="/thirdparty/opencv":$CMAKE_PREFIX_PATH
# cv2.so文件所在路径
export PYTHONPATH="/thirdparty/opencv/lib/python2.7/dist-packages/cv2/python-2.7":$PYTHONPATH
安装opencv_contrib
在https://github.com/opencv/opencv_contrib下载和opencv版本对应的opencv_contrib源码包。
opencv和opencv_contrib版本应不大于3.4.2,否则使用某些模块时会因为专利问题报错。
安装过程和上面的介绍只有一处不同,如下:
cmake ../ -DPYTHON_INCLUDE_DIR=/usr/include/python3.5 -DPYTHON_LIBRARY=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu/libpython3.5.so -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/thirdparty/opencv-3.4.2 -DOPENCV_EXTRA_MODULES_PATH=/thirdparty-source/opencv_contrib-3.4.2/modules /thirdparty-source/opencv-3.4.2
安装Cuda加速(OpenCV GPU版)
cmake ../ -DPYTHON_INCLUDE_DIR=/usr/include/python3.5 -DPYTHON_LIBRARY=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu/libpython3.5.so -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/thirdparty/opencv -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_CUDA=ON -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -DWITH_CUBLAS=1 -DOPENCV_EXTRA_MODULES_PATH=/thirdparty-source/opencv_contrib-3.4.2/modules /thirdparty-source/opencv-3.4.2
如果make时遇到报错如下:
fatal error: dynlink_nvcuvid.h: 没有那个文件或目录
解决方案如下:
在https://developer.nvidia.com/nvidia-video-codec-sdk下载NVIDIA VIDEO CODEC SDK
下载后将解压得到的include中的cuviddec.h 和 nvcuvid.h文件拷贝到/usr/local/cuda/include路径下
将opencv源码包中的modules/cudacodec/src路径下的:
- cuvid_video_source.hpp
- frame_queue.hpp
- precomp.hpp
- video_decoder.hpp
- video_parser.hpp
中的:
#if CUDA_VERSION >= 9000
#include <dynlink_nvcuvid.h>
#else
#include <nvcuvid.h>
改为:
#if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000
#include <dynlink_nvcuvid.h>
#else
#include <nvcuvid.h>
编译安装成功后测试:
#include <opencv2/opencv.hpp> #include <opencv2/core/cuda.hpp>
using namespace std;
using namespace cv;
nt main()
{
int num_devices = cuda::getCudaEnabledDeviceCount();
cout<<num_devices<<endl;
}
编译执行后,如果输出是机器的GPU数量,则安装成功。如果输出是0,则安装存在问题
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
如果我的文章对您有帮助,转载请注明出处