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