caffe安裝系列——安裝OpenCV

xuezhisdc發表於2015-09-24

部落格新址: http://blog.xuezhisd.top
郵箱:xuezhisd@126.com


地平線機器人——嵌入式人工智慧領導者 長期招聘計算機視覺/深度學習等方向的工程師或實習生。感興趣的話,請傳送郵件,可以內推


說明

  • 網上關於caffe的安裝教程非常多,但是關於每一步是否操作成功,出現了什麼樣的錯誤又該如何處理沒有給出說明。因為大家的作業系統的環境千差萬別,按照部落格中的教程一步步的安裝,最後可能失敗——這是很常見的哦。有的教程甚至省略了一些細節部分,讓小白更不知道如何判斷每一步是否操作成功,如何處理出現的錯誤。
  • 作者花費了很長時間才成功地將caffe裝完,期間遇到好多錯誤,多次重灌作業系統。現在將經驗寫下來,一方面為了和大家分享,討論;另一方面是為了記錄一下下~~~

環境

作業系統: Ubuntu 14.04(64bit)
GCC/G++:4.7.x
OpenCV: 2.4.11和3.0.0
Matlab :R2014b(a)
Python: 2.7
顯示卡:Telsa K40m & Telsa K20xm

安裝步驟

安裝OpenCV

  • 安裝前,請下載我的安裝指令碼,如下圖所示。下載地址一下載地址二
    這裡寫圖片描述
  • 這個指令碼是我根據GitHub上大神寫的安裝OpenCV的指令碼改造的,這個指令碼有一些問題,有些包安裝不上,比如mmfpeg,有些包前後安裝相互衝突,後面的會把前面的解除安裝等等。
  • 使用這個指令碼的方法就是,先給5個指令碼執行許可權chmod +x *.sh,然後依照順序執行這些指令碼。
  • 執行1dependeccies.sh的方法是sudo sh 1dependencies.sh。這個指令碼主要是安裝OpenCV的一些依賴庫。
#!/bin/bash
#edited by xuezhi zhang.
echo "--- Removing any pre-installed ffmpeg and x264"
sudo apt-get -qq remove ffmpeg x264 libx264-dev
#function install_dependency {
#    echo "--- Installing dependency: $1"
#    sudo apt-get -y install $1
#}
echo "Installing dependency"
sudo apt-get -y install libopencv-dev
sudo apt-get -y install build-essential
# conflict
#sudo apt-get -y install checkinstall
sudo apt-get -y install cmake
sudo apt-get -y install pkg-config
sudo apt-get -y install yasm
sudo apt-get -y install libjasper-dev
sudo apt-get -y install libavcodec-dev
sudo apt-get -y install libavformat-dev
sudo apt-get -y install libswscale-dev
sudo apt-get -y install libdc1394-22-dev
sudo apt-get -y install libxine-dev
#echo "===================================================="
# conflict with libxine-dev
#sudo apt-get -y install libxine2-dev
sudo apt-get -y install libgstreamer0.10-dev
sudo apt-get -y install libgstreamer-plugins-base0.10-dev
sudo apt-get -y install libv4l-dev
sudo apt-get -y install python-dev
sudo apt-get -y install python-numpy
sudo apt-get -y install python-scipy
sudo apt-get -y install  python-sphinx
sudo apt-get -y install libtbb-dev
sudo apt-get -y install libqt4-dev
sudo apt-get -y install libgtk2.0-dev
sudo apt-get -y install libfaac-dev
sudo apt-get -y install libmp3lame-dev
sudo apt-get -y install libopencore-amrnb-dev
sudo apt-get -y install libopencore-amrwb-dev
sudo apt-get -y install libtheora-dev
sudo apt-get -y install libvorbis-dev
sudo apt-get -y install libxvidcore-dev
sudo apt-get -y install x264
sudo apt-get -y install v4l-utils
sudo apt-get -y install unzip
sudo apt-get -y install libgtk2.0-0
sudo apt-get -y install libjpeg-dev
sudo apt-get -y install libjpeg62 
# conflict
#sudo apt-get -y install libjpeg62-dev
sudo apt-get -y install libtiff4-dev
sudo apt-get -y install libtiff5-dev
sudo apt-get -y install qt5-default
echo "===================================================="
echo "^^^^^^^^^^^^^^^^^^^^^^Over^^^^^^^^^^^^^^^^^^^^^^^^^^"
echo "===================================================="

#install_dependency ffmpeg
#install fail, run file of ffmpeg_install to install it
  • 執行2download.sh的方法是sudo sh 2download.sh。這個指令碼主要是下載一個安裝包,為後面編譯安裝做準備。
  • 執行2download.sh前,修改一下指令碼,選擇opencv-2.4.11和opencv-3.0.0,註釋(#)另外一個就OK。
echo "===================================================="
echo "--- Dowloading v4l-utils"
echo "===================================================="
wget http://www.linuxtv.org/downloads/v4l-utils/v4l-utils-0.8.5.tar.bz2

echo "===================================================="
echo "--- Dowloading mmfpeg-2.8"
echo "===================================================="
wget http://ffmpeg.org/releases/ffmpeg-2.8.tar.bz2
echo "===================================================="
echo "Downloading OpenCV"
echo "===================================================="
# opencv-2.4.11和opencv-3.0.0根據自己的需要,選擇下載一個就OK了。
# 下載 opencv-2.4.11.zip
wget -O opencv-2.4.11.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.11/opencv-2.4.11.zip/download
# 下載 opencv-3.0.0
#wget -O opencv-3.0.0.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/3.0.0/opencv-3.0.0.zip/download
  • 執行3mmfpeg_install.sh的方法是sudo sh 3mmfpeg_install.sh。這個指令碼主要是安裝mmfpeg。為後面安裝OpenCV做準備。
  • 因為mmfpeg不能使用apt-get安裝,因此需要自己編譯安裝。
echo "===================================================="
echo "Installing dependency"
echo "===================================================="
sudo apt-get install -y libx264-dev libxext-dev libxfixes-dev

echo "===================================================="
echo "--- Configure mmfpeg-2.8"
echo "===================================================="
tar -xf ffmpeg-2.8.tar.bz2
cd ffmpeg-2.8
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis

echo "===================================================="
echo "--- Making mmfpeg-2.8"
echo "===================================================="
make -j

echo "===================================================="
echo "--- Installing mmfpeg-2.8"
echo "===================================================="
make install
cd ..
  • 執行4v4l_install.sh,安裝v4l。
echo "===================================================="
echo "---Installing v4l---"
echo "===================================================="
#wget http://www.linuxtv.org/downloads/v4l-utils/v4l-utils-0.8.5.tar.bz2
tar -xvf v4l-utils-0.8.5.tar.bz2
cd v4l-utils-0.8.5
make -j
sudo make install
cd ..
  • 安裝OpenCV有兩個選擇,OpenCV2.4.11和OpenCV3.0.0,分別對應於5opencv2411.sh和5opencv300.sh,根據自己的需要選擇執行哪個指令碼。【注意:和前面2download.sh中下載的版本保持一致】
  • 注意根據自己的顯示卡,修改 CUDA_GENERATION。如果是Fermi架構,就需要將Kepler修改成Fermi
  • 安裝opencv2.4.11之前,根據最下面的錯誤分析中的錯誤1,修改opencvpath/cmake/OpenCVDetectCUDA.cmake檔案之後,再執行指令碼,否則可能出錯。
# added by xuezhi zhang.
# 
# OpenCV 2.4.11
# http://vinayhacks.blogspot.com.es/2011/11/installing-opencv-231-with-ffmpeg-on-64.html
echo "===================================================="
echo "Installing OpenCV"
echo "===================================================="

sudo unzip opencv-2.4.11.zip
cd opencv-2.4.11
sudo mkdir build
cd build
# 注意根據自己的顯示卡,修改 CUDA_GENERATION。如果是Fermi架構,就需要將Kepler修改成Fermi
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON CUDA_GENERATION=Kepler ..
#make -j 32
sudo make -j
sudo make install
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
echo "OpenCV ready to be used"

判定OpenCV是否安裝成功

  • 安裝過程中如果沒有返回錯誤,說明安裝沒有問題,如果有任何錯誤提示,請自行Google解決。
  • 安裝成功之後,如下所示。
    這裡寫圖片描述

OpenCV安裝過程中的錯誤

  • 因為OpenCV有很多依賴包,因此安裝過程非常的複雜。如果依賴的包沒有安裝,或者作業系統的編譯環境有問題的話,很造成容易編譯失敗。
  • 錯誤1: cannot build OpenCV 2.4.11 with CUDA 7.0
  • 這個問題已經解決,參考網址
  • 這是一個和cuda的架構1.1(cuda7.0不再支援架構1.x)有關的錯誤,通過修改opencvpath/cmake/OpenCVDetectCUDA.cmake檔案解決。如下圖所示。
    這裡寫圖片描述
  • 錯誤2:error: a storage class is not allowed in an explicit specialization
  • 這是cuda和opencv版本不適應的錯誤。
  • 這個問題也已經解決,參考網址
  • 因此,最好的組合方式【cuda7.0 + opencv3.0.】和【cuda6.5+opencv2.4.11】。這兩種組合方法,我都已經在Ubuntu14.04作業系統(64位版本)上成功地安裝了。
  • 網上安裝OpenCV的教程很多都是通過Install-OpenCV指令碼來安裝的,但我在使用過程中發現會出現問題,而網路教程有沒有說明遇到問題如何解決,因此很坑。最終,藉助Google,解決的所有問題,成功安裝了所有依賴和OpenCV3.0。因此,如果大家遇到什麼編譯錯誤,不要害怕,google一下,一般別人已經遇到這個問題,併成功地解決了。

參考

《Caffe + Ubuntu 15.04 + CUDA 7.0 新手安裝配置指南》——歐新宇
opencv 專案
我的opencv安裝指令碼
GitHub上的opencv安裝指令碼

相關文章