1. 程式人生 > >Elam的caffe筆記之配置篇(五):Centos6.5配置opencv3.1.0

Elam的caffe筆記之配置篇(五):Centos6.5配置opencv3.1.0

Elam的caffe筆記之配置篇(五):Centos6.5配置opencv3.1.0


配置要求:

系統: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/tiger99111/article/details/22196957
ffmpeg的編譯可以參考http://www.cnblogs.com/cheng5x/p/5646920.html
反正我是沒安裝成功,需要裝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