天天看點

caffe配置之opencv2.4.9和配置Makefile.config

7、安裝opencv2.4.9

    這個地方坑也不少,用Python寫代碼用于圖像處理時,常常要和opencv結合起來,是以需要安裝opencv,我這裡用的版本是2.4.9,Python版本是2.7。

    (1) 下載下傳 opencv 源碼。

    (2) 解壓到任意目錄

    unzip opencv-2.4.9.zip

    (3) 進入源碼目錄,建立release目錄(或者 build 目錄都行)

    cd opencv-2.4.9

    mkdir release

    (4) 可以看到在OpenCV目錄下,有個CMakeLists.txt檔案,這是用于編譯opencv源碼的,編譯之前需要需要事先安裝一些軟體

    sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev

    (5) 進入release目錄,安裝OpenCV是所有的檔案都會被放到這個release目錄下

    cd release

    (6) 用cmake編譯OpenCV源碼,安裝所有的lib檔案都會被安裝到/usr/local目錄下

    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

    make -j4  (-j4表示使用4個線程編譯,可以大大加快編譯速度)

    sudo make install

    這個地方,可能會遇到一些問題,如果啥事沒發生,那真是太幸運了。

    a、第一個錯誤:

    CMake Error at cuda_compile_generated_matrix_operations.cu.o.cmake:206 (message):

    Error generating

    /home/yy/opencv-2.4.9/build/modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o

    make[2]: *** [modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o] 錯誤 1

    make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 錯誤 2

    make: *** [all] 錯誤 2

    解決辦法:

    輸入:“cmake -D CMAKE_BUILD_TYPE=bulid -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..”,即可解決!

    b、第二個錯誤

    因為我的電腦安裝了GPU卡,是以OpenCV會自動編譯CUDA相關的代碼,可以直接關掉( 在cmake時加上-D WITH_CUDA=OFF ),

    但我需要編譯。是以預設是打開的,是以在make時遇到以下錯誤:a storage class is not allowed in an explicit specialization。

    解決辦法:

    打開錯誤的檔案:

    vim /root/opencv-2.4.9/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp,

    将其中template聲明中的所有static全部删除。可以使用vim的全局替換,或者其他編輯工具全局替換即可(template<> static inline 替換為template<> inline ):

    在指令行下輸入:%s/template<> static inline/template<> inline/g。

    最後重新執行以上指令。

    (7) 環境變量修改

    在/etc/ld.so.conf 檔案中添加 /usr/local/lib , 然後執行:

    sudo ldconfig -v

    為程式指定openvc的頭檔案位置, 使用pkg-config指令來完成。首先在 /etc/profile 中添加:

    export  PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

    然後source生效:

    source /etc/profile

    再執行以下指令可以列印opencv的配置資訊:

    pkg-config --libs opencv

    (8) 把Python與opencv建立連接配接

    編譯安裝好後的cv2.so,也就是python調用openc所需要的庫,放在/usr/local/lib/python2.7/site-packages

    這個目錄下,我們可以将這個目錄添加到環境變量

    export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages

    這樣便可以在python中 import cv2。

    (9) 測試

    在解壓的opencv目錄下找到 samples/c/build_all.sh,運作該檔案:

    cd /root/opencv-2.4.8/samples/c/

    chmod a+x build_all.sh

    ./build_all.sh

    在這裡又遇到一個問題:

    /usr/bin/ld: cannot find -lcufft

    /usr/bin/ld: cannot find -lnpps

    /usr/bin/ld: cannot find -lnppi

    /usr/bin/ld: cannot find -lnppc

    /usr/bin/ld: cannot find -lcudart

    去網上找了許多解決/usr/bin/ld: cannot find -lxxx問題的資料,但是都沒有解決。

    不過看到一些材料中說libcufft,libnpps,libnppi,libnppc,libcudart是cuda的庫(cuda和opencv是有仇吧...),搜尋/usr/local/cuda-7.0/lib64,

    果然發現了libcufft.so.7.0,libnpps.so.7.0,libnppi.so.7.0,libnppc.so.7.0,libcudarts.so.7.0,

    既然報錯說是/usr/bin/ld: cannot find -lcufft,那是不是因為/usr/local/lib下面沒有libcufft.so.7.0,libnpps.so.7.0,libnppi.so.7.0,

    libnppc.so.7.0,libcudarts.so.7.0的軟連接配接?

    于是分别對上面幾個檔案建立軟連接配接 sudo ln -s /usr/local/cuda-7.0/lib64/libcufft.so.7.0 /usr/local/lib/libcufft.so  

    再次進入opencv目錄/samples/c/ 運作./build_all.sh 問題解決,不會再報錯,然後運作./find_obj 會出現無比nice的測試結果。

    {

        參考:

        http://www.yanjiankang.cn/linux-install-opencv-on-ubuntu-or-redhat/

        http://blog.csdn.net/gongxs7/article/details/49131201

        http://blog.csdn.net/dyx810601/article/details/51579273

        http://blog.csdn.net/llp1992/article/details/50066983

    }

8、配置Makefile.config(參考:http://blog.csdn.net/autocyz/article/details/51783857)

    折騰到這一步,離成功就不遠了,接下來就是配置之前擱置的Makefile.config,進入caffe根目錄,使用vim編輯器打開Makefile.config。

    在打開的Makefile.config修改如下内容(我自己的配置):

    USE_OPENCV := 1

    USE_LEVELDB := 1

    USE_LMDB := 1

    CUSTOM_CXX := g++

    CUDA_DIR := /usr/local/cuda-7.5

    CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \

        -gencode arch=compute_20,code=sm_21 \

        -gencode arch=compute_30,code=sm_30 \

        -gencode arch=compute_35,code=sm_35 \

        -gencode arch=compute_50,code=sm_50 \

        -gencode arch=compute_50,code=compute_50

    BLAS := atlas

    MATLAB_DIR := /home/eric/MATLAB2014/R2014a

    PYTHON_INCLUDE := /usr/include/python2.7 \

        /usr/lib/python2.7/dist-packages/numpy/core/include

    PYTHON_LIB := /usr/local/lib

    WITH_PYTHON_LAYER := 1

    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

    BUILD_DIR := build

    DISTRIBUTE_DIR := distribute

9、make所有檔案

    進入caffe根目錄,輸入如下指令:

    sudo make clean

    sudo make all -j4

    sudo make test -j4

    sudo make runtest -j4

    sudo make pycaffe -j4

    sudo make matcaffe -j4

    在指令行下輸入Python,會出現Python的一些資訊,然後輸入import caffe,沒有報錯說明配置成功。在指令行下輸入matlab,會打開MATLAB軟體。

    如果前面所有的配置過程都沒有問題的話,最後一步應該是不會出錯的。至此,caffe所有的配置項都完成了,接下來就可以愉快地使用這個強大的深度學習架構了。