基於ARM架構開發板——樹莓派4B上源碼編譯安裝OpenCV和OpenCV contrib


本文主要記錄筆者在樹莓派4B安裝opencv的過程,算是對這段時間的一個學習總結,也方便其他新手入門,如有侵權,請及時聯系我刪除。
在此特別感謝OpenCV團隊、樹莓派實驗室和我的兩位學長,我的這次安裝也是根據他們寫的博文和建議完成的,他們在這次安裝給我提供了重要的幫助,我從中我學習了很多新知識。
參考資料:
https://www.cnblogs.com/tanshengjiang/p/13861494.html
https://mp.weixin.qq.com/s/dWrDBMqHqAl4iBVAS50_uA (opencv中國團隊官方文檔)
https://docs.opencv.org/master/d0/d76/tutorial_arm_crosscompile_with_cmake.html (opencv官方文檔,有一定英語水平可以看這個)
https://blog.csdn.net/simonforfuture/article/details/101716181
https://www.deciphertechnic.com/install-opencv-python-on-raspberry-pi/

好了,正文開始:
環境:樹莓派4B python 3.7 基於Debian的樹莓派官方系統(Raspbian Buster系統),可以到官網(https://www.raspberrypi.org/downloads/raspberry-pi-os/)下載。

1.安裝之前先更新一下環境

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update

2.安裝一下必要的依賴

sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran

3.安裝開發工具(python3和pip)

sudo apt-get install python3 python3-setuptools python3-dev
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

4.下載OpenCV和OpenCV-contrib的包
筆者這里安裝的是4.5.3版本

wget -O opencv.zip https://github.com/Itseez/opencv/archive/4.5.3.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/4.5.3.zip
unzip opencv-4.5.3.zip
unzip opencv_contrib-4.5.3.zip

下載完直接解壓,如果這樣下載比較慢的話,可以到網站直接下載。

5.安裝opencv需要的庫

pip3 install numpy

這一步筆者沒有安裝到超級用戶,大家可以自行選擇

6.開始進行編譯Opencv,一般編譯都是使用cmake自動編譯生成makefile

cd ~
mv opencv_contrib-4.5.3 opencv-4.5.3/
cd ~/opencv-4.5.3
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D BUILD_opencv_xfeatures2d=OFF \ # 這個模塊開啟時會自動下載一些模型,有些模型在國外服務器,如果用不到里面的算法,這里不推薦打開。
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D ENABLE_NEON=ON \ # NEON指令是針對ARM平台的加速指令,在ARMv7及以上支持
      -D WITH_TENGINE=ON \ # Tengine是專門針對ARM平台的DNN后端,能夠加速DNN模塊,此選項打開之后需要保持開發板聯網
      -D OPENCV_GENERATE_PKGCONFIG=ON \ # 此選項方便調用OpenCV庫
      -D OPENCV_ENABLE_NONFREE=ON \
      -D OPENCV_PYTHON3_INSTALL_PATH=/usr/lib/python3/dist-packages \ # 這里需要修改成你的開發板上對應的位置
      -D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv-4.5.3/opencv_contrib-4.5.3/modules \ # 這里需要修改成你的opencv_contrib所在目錄
      -D PYTHON_EXECUTABLE=/usr/bin/python3.7 \ # 這里需要修改成你Python3所在的目錄,將會自動安裝python版本的OpenCV庫
      -D BUILD_EXAMPLES=ON ..

增加swap空間
將swap大小從100MB增加到1024MB,可以方便OpenCV使用Pi的4個核進行編譯
vim /etc/dphys-swapfile
找到 CONF_SWAPSIZE 這個變量,將100改成1024,然后保存退出。使用如下命令重啟:

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

7.編譯安裝opencv
這個過程比較漫長,我大概編譯安裝了四個多小時。

make -j4
sudo make install
sudo ldconfig  

編譯完成后記得 ,將swap大小從1024MB改回100MB

vim /etc/dphys-swapfile
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

8.上面的步驟完成后,可以測試一下OpenCV是否安裝成功。
終端依次輸入以下命令:

python3
import cv2
print(cv2.__version__) 

如果能夠正確打印OpenCV版本,恭喜你,安裝成功!
9.測試運行

cd ~/opencv-4.5.3/samples/cpp/example_cmake/build

編譯一下先cmake . 再make
cmake .時,我出現了一個問題
報錯說配置不完整,於是我忽略,繼續往下走然后這樣:如下圖:

剛開始我還以為是缺了什么文件沒下下來,去官網找,找到了相關的文檔,但是也不知道哪里能把缺失的文檔下下來,經過多方求助,在一個江湖號稱“蓋世神倫”的學長那里得到答案。
問題出在:我安裝的opencv4.x.x版本是4開頭的,庫的文件位於/usr/local/include/opencv4,但是執行這個cmake .命令的時候,它在/usr/local/include/下面檢索的是opencv2,我們樹莓派上/usr/local/include/這個路徑下只有opencv4,找不到opencv2那是再正常不過的了,所以就報錯了。那么是不是要到官網再去找這個所謂的opencv2文件下下來呢?幸運的是,並沒有那么麻煩,其實opencv2這個文件在opencv4這個目錄下面(/usr/local/include/opencv4/opencv2),即cmake .所需要的路徑其實是/usr/local/include/opencv4/opencv2,而不是/usr/local/include/opencv4。
因此,我就有了兩種解決思路,第一種,修改CMakefile.txt里面的環境變量,這樣,就能順利地找到這個opencv2文件了,第二種,將opencv4里面的文件拷貝復制出來一份,放到/usr/local/include/下面,這樣,不用修改路徑,也能通過原有的環境變量路徑找到cmake .所需要的文件。第一種方法大家可以補充哈。在這里我使用第二種思路。具體操作方法如下:

cd /usr/local/include/
sudo cp -r opencv4/opencv2/ opencv2
cd ~/opencv-4.5.3/samples/cpp/example_cmake
rm -r CMakefiles/ CMakeCache.txt
cmake .
make

補充說明一下:rm -r CMakefiles/ CMakeCache.txt是為了把上一次編譯失敗的cmake臨時文件刪掉,不刪掉的話,繼續編譯還是會出錯的,所以這一點至關重要!
這樣,就成功了,此時ls一下,你的目錄下面會出現一個可執行文件:opencv_example,大膽運行即可

./opencv_example

當你從屏幕中看到一張帥氣的臉,說明安裝成功!(注:需要攝像頭才能看到帥氣的臉)!
或者,你也測試運行一下世界上最快的人臉檢測算法libfacedetection給出的OpenCV DNN的例子,看看OpenCV是否安裝成功:
https://github.com/ShiqiYu/libfacedetection/tree/master/example/opencv_dnn/cpp
歡迎大家批評指正,有問題可評論區留言,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM