如果编译不好的,可以直接在此处下载。
更新!!!
在安装opencv时,cmake -D后面不要有空格,不然后报找不到源文件错误。而且cmake后面加两个…不然会说找不到Cmakelist.txt
cd opencv3.1.0
mkdir build && cd build
cmake ../
-DCMAKE_INSTALL_PREFIX=/app/opencv
-DOPENCV_EXTRA_MODULES=../opencv3.1.0/opencv_contrib-3.1.0/modules
-DWITH_CUDA=ON .. \开启GPU加速功能
-DWITH_TBB=ON ..
-DCUDA_ARCH_BIN="7.0" \这个需要根据显卡的算力进行设置,可在https://developer.nvidia.com/cuda-gpus查看
make -j64
make install
CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: CUDA_nppi_LIBRARY (ADVANCED)
编译选项加上-DCMAKE_BUILD_TYPE=Release -DCUDA_nppi_LIBRARY=true即可
最近毕设在所基于two-stream的人体行为识别,需要用到光流提取工具dense_flow,由于之前没接触过Linux,捣鼓了三四天才把它装好。下面记录一下在安装dense_flow中出现的一些问题以及解决的方案。
dense_flow工具:https://github.com/yjxiong/dense_flow
1、新建python环境(已有环境可以跳过)
在服务器上跑项目,因此我直接在我的目录下新建了一个python环境来进行环境配置。
1、服务器联网状态下输入conda create -n workspace python=3.5(python版本可自己更改,workspace环境名称)。
2、安装好后输入source activate workspace激活环境。
3、安装conda,可以使用国内镜像源
4、配置pip
参考博客:https://blog.csdn.net/qq_37254336/article/details/81988872
2、cmake3.3.2安装
由于我没有管理员权限,因此在安装包时不能使用apt-get安装,只能通过编译安装,因此需要先安装cmake。
1、下载cmake包
wget https://cmake.org/files/v3.3/cmake-3.3.2.tar.gz
2、安装
tar -zxvf cmake-3.3.2.tar.gz
cd make3.3.2
./bootstrap
./configure --prefix=/app/cmake3.3(自定义安装路径,最好是绝对路径)
make
make install
3、安装完后需要将cmake安装路径写进系统变量
vim ~/.bashrc
export PATH=/app/cmake3.3/bin/:$PATH
source ~/.bashrc
这样cmake就安装好了
4、输入cmake -version检查是否安装成功
现在就可以用cmake命令来进行opencv的安装啦。
3、opencv3.1.0&opencv_contrib3.1.0
安装在安装opencv时,需要注意一点,opencv和opencv_contrib版本要一致,不然在后面编译时可能会有各种错误,我的版本都是3.1.0。且如果要做视频处理的话,需要有ffmpeg的支持,如果没有的需要去下载编译安装。(一定要先装ffmpeg再装opencv,不然后面opencv会无法读取视频,血的教训)
3.1 ffmpeg安装
1、 手动下载地址:https://git.ffmpeg.org/ffmpeg.git
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd source_directory
./configure --prefix=/app/ffmpeg --enable-nonfree --enable-pic --enable-shared
make
make install
–prefix自己的安装路径,后面三个必须要有,使用-fPIC为后面opencv动态链接库做准备。
2、环境变量
vim ~/.bashrc
export PATH=/app/ffmpeg/bin/:$PATH
export LD_LIBRARY_PATH=/app/ffmpeg/lib/:$LD_LIBRARY_PATH
source ~/.bashrc
3、检查安装是否成功
$ ffmpeg --version
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-28)
configuration: --prefix=/SISDC_GPFS/Home_SE/kongj-jnu/wangsq-jnu/lsw/app/ffmpeg --enable-pic --enable-shared --enable-nonfree --disable-x86asm --enable-gpl --enable-swscale
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
注意:有时候无法安装ffplay等程序,需要找到opencv下的config.mak文件,去掉CONFIG_FFPLAY=yes前面的注释符号“!”后,再编译。
3.2 opencv+opencv_contrib
1、下载
opencv库:https://opencv.org/releases.html
opencv_contrib库:https://github.com/opencv/opencv_contrib/tree/3.1.0
解压会将opencv_contrib解压到opencv目录中
cd opencv3.1.0
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/app/opencv
-DOPENCV_EXTRA_MODULES=../opencv3.1.0/opencv_contrib-3.1.0/modules
-DWITH_CUDA=ON .. \开启GPU加速功能
-DWITH_TBB=ON ..
-DCUDA_ARCH_BIN="7.0" \这个需要根据显卡的算力进行设置,可在https://developer.nvidia.com/cuda-gpus查看
make -j64
make install
OPENCV_EXTRA_MODULES是opencv_contrib下的modules路径,CMAKE_INSTALL_PREFIX自定义的opencv安装路径。
注意:如果要用GPU提取光流的话,在编译opencv时需要将WITH_CUDA设置为ON,同时CUDA_ARCH_BIN要根据显卡的算力进行设置,否则后面提取的时候会出现GPU、CUDA等错误!
安装过程出现以下错误:ippicv_linux_20151201无法安装
由于墙的原因,无法下载ippicv_linux_20151201.tgz,因此自己去下载把它放在linux-**目录下,我的路径如下。
/opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
然后重新编译,出现Build files have been written to…即编译成功。
Make时,由于动态链接出错
relocation R_X86_64_32 against `.rodata’ can not be used when making a shared object;
在安装ffmpeg时就说过,需要加上编译选项-fPCI,同理opencv安装也需要加上-fPCI选项,在opencv-3.1.0下的CmakeLists.txt中加一行add_compile_options(-fPIC),重新编译,安装,成功。
参考:https://blog.csdn.net/qq_35781447/article/details/103277509
4、libzip安装
在dense_flow的ReadMe中说了,需要依赖包libzip,因此我去https://libzip.org/download/下载了libzip-1.6.1,接下来就是对libzip的安装
mkdir build && cd build
cmake --prefix=/app/libzip1.6(自定义安装路径)
make
make install
这时在/app/libzip1.6下会有以下四个文件夹
但是到这一步还没结束,虽然已经安装好了,但是系统并不知道你装在哪儿,因此需要将安装路径写进系统变量PATH中。
vim ~/.bashrc
export PATH=/app/libzip1.6/lib64/pkgconfig/:$PATH
source ~/.bashrc
到此libzip就安装好了。
5、dense_flow
在安装dense_flow时,按照给出的安装步骤
cd dense_flow
mkdir build && cd build
cmake ..
make -j
boost python3依赖安装
参考链接:https://www.cnblogs.com/freeweb/p/9209362.html
1、cmake出现未找到boost Libraries,这才想起来未安装boost,去官网下载结果都是forbidden,忘记我是在哪儿找到的了,下载了一个1.66.0版本。
2、安装成功后,满心欢喜准备去安装dense_flow时,结果又失败了,这次是未找到boost_python库。
我去找了boost/lib下找到了libboostpython3,百度了半天不得其解,后来去看了dense_flow下的CMakeLists文件,发现它的findPackage(Boost python),也就是说它要找的是libboostpython库,但是我安装的是python3,所以说将python改成python3即可。
findPackage(Boost python)
改为:findPackage(Boost python3)
5、测试
./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`
6、总结
Linux下无权限安装各种包,首先需要下载相应源码,然后需要设置–prefix自定义的安装路径,编译安装完成之后需要将run路径和库lib路径加入到环境变量中,像opencv等动态链接库时还需要将相应的.pc文件加入LD_LIBRARY_PATH中。
安装这个dense_flow,每次以为快要结束了结果又有新的问题出现。主要是各种包之间的依赖关系以及环境变量的配置,都会导致安装失败。当错误出现了,首先去看看哪里错了,很多信息都可以在配置文件中看到。当然还有一些问题是因为版本不匹配造成的问题,这种问题百度上有很多,基本上都可以解决。
希望这篇文章能帮到大家,欢迎大家来交流。
`