最近買了一個raspberry Pi Camera v2,剛好有一個樹莓派4b,心血來潮就想利用樹莓派做一個人臉識別。
然后開始倒騰Opencv了,記錄一下肝出來的過程。
一.首先我用的是最新的Raspbian Buster系統,可以到官網(https://www.raspberrypi.org/downloads/raspberry-pi-os/)下載。
用的是python3.7。
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.下載OpenCV3.4.1和OpenCV-contrib的包
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.4.1.zip wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip unzip opencv.zip unzip opencv_contrib.zip
下載完直接解壓,如果這樣下載比較慢的話,可以到網站直接下載。
5.安裝opencv需要的庫
sudo pip3 install numpy
6.開始進行編譯Opencv,一般編譯都是基於cmake
cd ~ # ~:指家目錄,一般是/home/pi mkdir opencv cd opencv # 將下載好的opencv cd ~/opencv-3.4.1/ mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.4.1/modules \ -D ENABLE_PRECOMPILED_HEADERS=OFF \ -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.編譯完成測試
在命令行下輸入:python3
,然后import cv2
導入,如果導入成功不會有提示信息。接下來可以用cv2.__version__
測試當前opencv的版本
進入目錄opencv-3.4.1--samples--cpp--example_camke(編譯一下先cmke .. 再make )
最后./opencv_example
這樣你就成功了
錯誤記錄
1.fatal error: boostdesc_bgm.i: 沒有那個文件或目錄 #include "boostdesc_bgm.i"
查閱資料是因為少了一些文件,如下
boostdesc_bgm.i boostdesc_bgm_bi.i boostdesc_bgm_hd.i boostdesc_lbgm.i boostdesc_binboost_064.i boostdesc_binboost_128.i boostdesc_binboost_256.i vgg_generated_120.i vgg_generated_64.i vgg_generated_80.i vgg_generated_48.i
下載這些文件,將這些文件放在相應的目錄下(/home/pi/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/src)
資源下載
鏈接: https://pan.baidu.com/s/1XrQeLb5O2Kt1gA-QwCtPGg
密碼: jpwp
2./home/pi/opencv/opencv-3.4.1/modules/stitching/include/opencv2/stitching/detail
/matchers.hpp:52:12: fatal error: opencv2/xfeatures2d/cuda.hpp: 沒有那個文件或目錄
錯誤的原因是缺少cuda.hpp文件,這些文件在opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2
目錄下,所以直接將這個目錄下的文件拷貝到opencv-3.4.1/modules/stitching/include/opencv2/
即可
cp ~/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/include/opencv2/* ~/opencv-3.4.1/modules/stitching/include/opencv2/
這個過程中注意你自己的路徑,按照你自己的路徑去拷貝。
3.編譯到99%又死了,最后一個錯誤。
[modules/python2/CMakeFiles/opencv_python2.dir/__src2/cv2.cpp.o] Error 1
/home/pi/opencv/opencv-3.4.1/modules/python/src2/cv2.cpp:889:34: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
出錯是應為const char不能轉換為char。解決這個問題很簡單,就是將const char強制類型轉換為char,可是因為沒找到出錯的地方,所以幾次編譯都死在了這里了。
解決方法
vim ~/opencv/opencv-3.4.1/modules/python/src2/cv2.cpp
原文鏈接:https://blog.csdn.net/simonforfuture/article/details/101716181