系统:centos6.5
目标:基于CUDA8.0+Opencv3.1+Cudnnv5.1+python3.6接口的caffe框架
本人是直接搜索文件名, 在csdn上下载的。亲测可用。
不得不说在linux上配置opencv3.1.0对我们这种刚刚接触linux的新手实在有点不友好。
不过只要耐心,按照步骤一步一步来还是能够成功配置的。
编译安装依赖包
yum install gcc gcc-c++ gtk+-devel
yum install libjpeg-devel libpng-devel libtiff-devel libavc1394-devel libraw1394-devel jasper-devel libpng-devel jasper-devel gimp-devel gimp-devel-tools gimp-help-browser zlib-devel jasper-utils swig python libtool nasm cmake
yum install git gtk2-devel pkgconfig numpy python-pip python-devel gstreamer-devel gstreamer-base gstreamer-video gstreamer-app gstreamer-riff gstreamer-plugins-base-devel libv4l ffmpeg-devel mplayer mencoder flvtool2
yum install libgphoto2-2.4.7 gvfs-gphoto2 libdc1394* ant
yum install gtk*
首先说明上面的是最全的依赖包选项,如果你有能力把上面的都装了,这说明你可以使用opencv
的全部功能。
其中第一行的依赖包建议先yum info
一下看看是否已经安装。当然,centos
的yum
哪怕你包含各大镜像库,仍然不能全部一键下载。
如果你装了anaconda
下的python
,那么上面的python*
以及numpy
都是不需要下载的。
这是我当时一顿install
之后的结果
剩下的依赖包都需要去网上自己下载源码然后解压缩使用编译三部曲(./configure, make, makeinstall
)进行安装.
其中gstreamer
剩下的4个可以试试看yum install gstreamer
,不行的话直接去网上下载包
参考http://blog.csdn.net/tiger99111/article/details/22196957
ffmpeg
的编译可以参考http://www.cnblogs.com/cheng5x/p/5646920.html
反正我是没安装成功,需要装yasm
,然后还有一大堆关于视频的依赖包,因为这是一个视频处理的插件,至少在使用caffe
的时候是用不着的,因此虽然没有安装成功,我们可以在接下来opencv
的配置过程当中直接把ffmpeg
给屏蔽了,以后需要使用的时候在重新编译。
其他的包都是按部就班的就安装成功了
选好路径之后
tar -zxvf opencv-3.1.0.tar.gz
cd opencv-3.1.0
mkdir build
然后利用cmake-gui
进行配置,没有安装的话可以直接利用yum install cmake-gui
进行安装,前提是你的cmake
也是yum
安装的或者更新的,要是是自己编译安装的高版本的cmake
可以去网上搜一下怎么配置对应版本的camke-gui
安装完成后直接在终端输入:
cmake-gui
把opencv
的解压目录和build
目录输进去之后点击Configure
会出现
把with
中的WITH-FFMPEG
的钩去掉,再把python2
和python3
中*_INCLUDE_DIR
和*_LIBRARY
改成你自己的python
的include
和lib
的对应路径
然后再Generate
两次!
确保全部变白(我记得是变白)
然后退出,进入build
文件夹
cd build
make -j4
然后
make install j4
三个字 茫茫多
①
nvcc warning : The ‘compute_20’, ‘sm_20’, and ‘sm_21’ architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
出现这个问题的原因是因为新版本的CUDA已经把compute_20和21弃用了,但是并没有在makefile中删除,因此会产生这个warning
解决方法:
1:无视;
2:在cmake-gui中configure后找到CUDA-NVCC-FLAGS,并在后面加上–Wno-deprecated-gpu-targets,OK
②
Scanning dependencies of target opencv_imgcodecs
[ 17%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/loadsave.cpp.o
[ 17%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/utils.cpp.o
[ 17%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_base.cpp.o
[ 17%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_bmp.cpp.o
[ 17%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_exr.cpp.o
[ 18%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_gdal.cpp.o
[ 18%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_hdr.cpp.o
[ 18%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpeg.cpp.o
[ 18%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpeg2000.cpp.o
In file included from /usr/include/jasper/jasper.h:77:0,
from /home/HY/opencv-3/opencv-3.1.0/modules/imgcodecs/src/grfmt_jpeg2000.cpp:59:
/usr/include/jasper/jas_math.h: 在函数‘bool jas_safe_size_mul(size_t, size_t, size_t*)’中:
/usr/include/jasper/jas_math.h:143:15: 错误:‘SIZE_MAX’在此作用域中尚未声明
if (x && y > SIZE_MAX / x) {
^
/usr/include/jasper/jas_math.h: 在函数‘bool jas_safe_size_add(size_t, size_t, size_t*)’中:
/usr/include/jasper/jas_math.h:170:10: 错误:‘SIZE_MAX’在此作用域中尚未声明
if (y > SIZE_MAX - x) {
^
在全局域:
cc1plus: 警告:无法识别的命令行选项“-Wno-unnamed-type-template-args” [默认启用]
make[2]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpeg2000.cpp.o] 错误 1
make[1]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all] 错误 2
make: *** [all] 错误 2
这个错误出现的原因是centos
更新了jaspe-devel
包为jasper-devel.x86_64 0:1.900.1-30.el7_3
(旧版本为jasper-devel-1.900.1-29.el7.x86_64
)
解决方法:
vi /usr/include/jasper/jas_math.h
在#include
后添加
if ! defined SIZE_MAX
define SIZE_MAX (4294967295U)
endif
③
关于python
的接口问题,已经在上面指出在cmake-gui
中指明python
的include
和lib
路径
④
Error:’NppiGraphcutState’has not been declared
typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppState, Npp8u* pDeviceMem);
解决方法:让他支持cuda8.0
进入opencv-3.1.0/modules/cudalegacy/src
此目录下打开终端
vi graphcuts.cpp
将#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
⑤
Warning”NPY_INTERNAL_BUILD”is not defind
无视,不重要
⑥ ippicv_linux_20151201.tgz
这个问题我好像没出现,如果出现去网上下载这个压缩包然后去opencv
目录下
替换掉/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz
OK