|
本文主要參考了一個外國人寫的博客:http://www./2016/04/18/install-guide-raspberry-pi-3-raspbian-jessie-opencv-3/ 其他系統(tǒng)或平臺可以根據下面這個地址對號入座:http://www./opencv-tutorials-resources-guides/ 感覺外國人寫的東西還是比較清楚的,step by step。這篇文章還把每一步所需要的時間也拿出來了,非常貼心。避免在一些要很長時間的步驟傻等在那的尷尬。本文根據第一個網址在裝有Raspbian Jessie 的樹莓派3上編譯openCV。但是還是遇到了一些問題或者與作者描述不同的現象,現在把它記錄下來,針對一些時間超過五分鐘的步驟,筆者也把它標記一下。下面的內容已經默認已經有了一個裝有Raspbian Jessie的樹莓派3,且可以通過SSH或者其他方式可以訪問到樹莓派。 一 查看樹莓派版本 如果不確定樹莓派的系統(tǒng)版本,可以使用 lsb_release -a 命令。 注意,有的網友說使用 uname -a 命令。但是得到的卻不是這里需要的信息。 二 擴張文件系統(tǒng) 使用下面命令打開配置項: sudo raspi-config 并沒有找到原文作者寫的“Expand File System”這一項,并且使用 df -h 命令查看了一下可用空間,由于作者用的8GSD卡,筆者用的是16G的,故大膽猜測,跳過這一步,應該不會有太大問題。 至于原文作者提到為了節(jié)省空間,刪除wolfram-engine,可以節(jié)省600多兆的空間。wolfram-engine用于支持wolfram語言,被捆綁在樹莓派的操作系統(tǒng)中。百度了一把wolfram感覺不明覺厲。 三 安裝依賴文件 1. 更新數據源 sudo apt-get update sudo apt-get upgrade 這一步實際上才是正式開始的第一步,但是筆者一上來更新數據源就出師不利,第二個命令就出錯了,非常影響心情。 具體的報錯 當時忘了記錄下來,但反正就是更新數據源失敗之類的錯誤,主要問題還是在樹莓派更新景象地址上。樹莓派的鏡像地址存放在 /etc/apt/sources.list 文件中(里面總共三行內容,后兩行被注釋掉)。當然換個國內的源應該沒有問題,但筆者是按照當時網上的一種做法:將該文件第一、二行注釋掉,第三行放出來,如下圖: 這個做法是可以解決上面的報錯問題的。 筆者后面也搜到了一些源,不過擔心安全問題,就沒有用??赡苁枪P者多慮了! 2. 安裝依賴文件 這一步和原文的描述出入最大,很多庫文件都安裝不了,可能還是和上一步的數據源有關。這里僅僅羅列了需要 sudo apt-get 來安裝的庫,沒有或者報"can't locate module XXX"的庫,則直接忽略: build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk2.0-dev libatlas-base-dev fortran python2.7-dev python3-dev 四 下載openCV源碼 wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip 這一步下載了opencv 和 opencv_contrib的源文件。opencv_contrib中存放了一些opencv中不太穩(wěn)定的內容。但最好保證opencv_contrib和opencv的版本要保持一致。 五 安裝python及虛擬環(huán)境 在Mac上默認安裝了python2.7和python3.6。這里就涉及一個問題:到底是選擇python2 還是python3。由于樹莓派默認是已經安裝了python2.7,當時就想用python2.但是python2 會有一個坑,就是不支持中文編碼,而python3已經支持了中文編碼,所以這里建議還是安裝python3,也可 以都裝一遍。但是如果在一臺機器上,同時安裝了python2 和python3 很容易搞混,所以這里建議使用virtualenv。有點虛擬機的意思,就是提供了一套獨立的python環(huán)境。比如有兩個項目分別要用到不同的環(huán)境,而我們可以根據各自項目需求來配置不同環(huán)境,不用都全局安裝。 1. 安裝pip wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 如果已經安裝了就可跳過這一步,筆者這里就直接跳過了。 2.安裝virtualenv和virtualenvwrapper sudo pip install virtualenv virtualenvwrapper sudo rm -rf ~/.cache/pip 第二個命令不知道為什么要執(zhí)行,但筆者并沒有找到這個路徑,反正也是要刪除,略過。 3. 配置virtualenv環(huán)境 # virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 在~/.profile文件的末尾添加上面的內容,此時重新打開終端,就可以執(zhí)行virtualenv相關的命令。如果想在當前終端中生效,也可以執(zhí)行 source ~/.profile 命令。 4. 創(chuàng)建virtualenv工作環(huán)境 mkvirtualenv cv -p python2 mkvirtualenv ovforp3 -p python3 上面分別創(chuàng)建了使用python2 和 python3 的環(huán)境,實際使用時 根據需求選擇其中一個命令執(zhí) 行即可。筆者這里選擇了第二條命令執(zhí)行。 執(zhí)行完后,如果在前面可以看到類似上圖紅框中的字段,則證明當前處于創(chuàng)建的virtualenv工作環(huán)境中。上面的創(chuàng)建命令只用使用一次,即創(chuàng)建該工作環(huán)境時。之后,如果需要重新進入該虛擬 環(huán)境,可以使用下面的workon命令: workon ovforp3 這時就可以得到類似上圖的現象。 5. 安裝Numpy pip install numpy 這里沒什么可講,記錄一下,之前在python2環(huán)境中編譯時,這里一直安裝失??;換成python3環(huán)境后,就沒有問題。 六. 編譯 安裝 OpenCV 1. 配置編譯項 編譯前確定當前是處于虛擬工作環(huán)境中,然后執(zhí)行下面的命令: cd ~/opencv-3.1.0/ $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D BUILD_EXAMPLES=ON .. 這里首先創(chuàng)建了一個build的目錄,進入該目錄,并執(zhí)行后面的cmake命令。這個build不知道有什么用,反正從頭到最后 也沒看到里面有什么內容。但是如果不在這里執(zhí)行cmake命令,又會報錯。姑且這么干吧! 可以看見Cmake命令后面跟了長串參數。大家可以根據名字猜測用處。其中OPENCV_EXTRA_MODULES_PATH的值可以根據實際的路徑進行修改。其他的保持不變。 其次 BUILD_EXAMPLES的值后面 有一個“..”(表示上一級),不要忘了。忘了也會出錯。 按照原文多說法,這里會得到類似下面的結果: 筆者也確實得到了,但其中的Interpreter一欄并沒有指向像上圖中的虛擬環(huán)境中的地址,而是直接指向了本機的實際地址。這種現象,原文的解釋是當前的工作環(huán)境沒有切到對應的虛擬環(huán)境中,所以使用workon命令做一下切換就可以了。但筆者試了好幾次,仍然不行。這讓人很納悶,只能先忽略這個問題。 2. 執(zhí)行編譯 先退回到opencv源代碼的根目錄,然后執(zhí)行 make 命令即可。正如原文作者所說,使用 make -j4 執(zhí)行一段時間后 由于爭搶內核場景的原因會報錯。那么老老實實用make命令吧。 執(zhí)行這個編譯命令非常耗時。筆者編過三次,每次的時間至少都在一個小時以上,所以,大家可以干點其他事,再來看結果。 上面也說了,筆者編了三次,肯定不會沒事閑的慌,編三次。說明上面的命令有問題。真是坑呀。編了一個小時多,然后就編不過了??纯闯鲥e信息: stitching_detailed.cpp:(.text+0x188c): undefined reference to `cv::detail::SurfFeaturesFinderGpu::SurfFeaturesFinderGpu(double, int, int, int, int)' 這就讓人蒙了,突然來一個找不到函數。搜了好久,發(fā)現了一個帖子,很有啟發(fā): https://devtalk./default/topic/766474/opencv4tegra-sourcecode-anyone-/ 總結一下,就是這里在編譯 example目錄時,由于缺少了opencv4tegra類庫。兩種方法:要么安裝缺少的類庫,要么在編譯選項時不編譯這部分內容。 考慮到上面的帖子的描述并不是針對樹莓派環(huán)境,且這部分內容只是example,不影響openCV核心功能,所以決定使用第二種方法。這里需要退到上一步重新執(zhí)行cmake命令,修改后的cmake命令如下: cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D BUILD_EXAMPLES=OFF .. 再次執(zhí)行make問題,就不會報錯了。 3. 安裝 sudo make install sudo ldconfig 4.驗證 在/usr/local/lib/python3.4/site-packages/或者/usr/local/lib/python3.4/dist-packages路徑下(二選一)中可以找到cv2.cpython-34m.so文件(在python2中是cv2.so文件)。將它的名字改回cv2.so,并在當前的虛擬工作環(huán)境中建立軟連接。 sudo mv cv2.cpython-34m.so cv2.so cd ~/.virtualenvs/cv/lib/python3.4/site-packages/ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so 此時,在終端輸入python,進入python交互式命令行,看能否打印出cv2的版本號,如下圖: 大功告成。
|
|
|