1. 程式人生 > >caffe配置之opencv2.4.9和配置Makefile.config

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所有的配置項都完成了,接下來就可以愉快地使用這個強大的深度學習框架了。