配置要求:

系统:centos6.5
目标:基于CUDA8.0+Opencv3.1+Cudnnv5.1+python3.6接口的caffe框架


1.下载opencv-3.1.0.tar.gz

本人是直接搜索文件名, 在csdn上下载的。亲测可用。
不得不说在linux上配置opencv3.1.0对我们这种刚刚接触linux的新手实在有点不友好。
不过只要耐心,按照步骤一步一步来还是能够成功配置的。

2.安装前准备

编译安装依赖包

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一下看看是否已经安装。当然,centosyum哪怕你包含各大镜像库,仍然不能全部一键下载。
如果你装了anaconda下的python,那么上面的python*以及numpy都是不需要下载的。
图片描述

这是我当时一顿install之后的结果
剩下的依赖包都需要去网上自己下载源码然后解压缩使用编译三部曲(./configure, make, makeinstall)进行安装.
其中gstreamer剩下的4个可以试试看yum install gstreamer,不行的话直接去网上下载包
参考http://blog.csdn.net/tiger991...
ffmpeg的编译可以参考http://www.cnblogs.com/cheng5...
反正我是没安装成功,需要装yasm,然后还有一大堆关于视频的依赖包,因为这是一个视频处理的插件,至少在使用caffe的时候是用不着的,因此虽然没有安装成功,我们可以在接下来opencv的配置过程当中直接把ffmpeg给屏蔽了,以后需要使用的时候在重新编译。
其他的包都是按部就班的就安装成功了

3.编译opencv3.1.0

选好路径之后

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的钩去掉,再把python2python3*_INCLUDE_DIR*_LIBRARY改成你自己的pythonincludelib的对应路径
图片描述
然后再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 <stdint.h>后添加

if ! defined SIZE_MAX
define SIZE_MAX (4294967295U)
endif


关于python的接口问题,已经在上面指出在cmake-gui中指明pythonincludelib路径

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


郑付强
55 声望8 粉丝