1️⃣ 在樹莓派中安裝opencv庫
(1)安裝依賴
如果執行某條指令時出現依賴包問題,建議使用sudo aptitude install
(需要先sudo apt-get install aptitude
安裝aptitude)
#更新和升級任何現有軟體包
$ sudo apt-get update && sudo apt-get upgrade
#安裝一些開發人員工具,包括CMake,它可以幫助配置OpenCV構建過程:
$ sudo apt-get install build-essential cmake pkg-config
#安裝一些映像I/O包,以允許從磁碟載入各種映像檔案格式。此類檔案格式的示例包括JPEG,PNG,TIFF等
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
#安裝視訊I/O包,能夠從磁碟讀取各種視訊檔案格式,以及直接使用視訊流
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
#GTK用於在螢幕上顯示影像並構建基本的GUI
$ sudo apt-get install libgtk2.0-dev libgtk-3-dev
#效能優化包
$ sudo apt-get install libatlas-base-dev gfortran
#安裝Python 2.7和Python 3
$ sudo apt-get install python2.7-dev python3-dev
(2)下載OpenCV原始碼
cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
$ unzip opencv.zip
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
$ unzip opencv_contrib.zip
(3)安裝pip
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ sudo python3 get-pip.py
(4)安裝Python虛擬機器
pip安裝時,使用國內源加速-i https://mirrors.aliyun.com/pypi/simple
# 安裝虛擬環境,防止依賴衝突
sudo pip install virtualenv virtualenvwrapper -i https://mirrors.aliyun.com/pypi/simple
sudo rm -rf ~/.cache/pip
配置~/.profile時,需要新增新的環境變數,否則會出現如下錯誤
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv # 這條不可缺少
source /usr/local/bin/virtualenvwrapper.sh
export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin # 這條可忽略
載入配置檔案,使之生效
# 每次新開終端,要進入python虛擬機器都需要事先載入配置檔案
source ~/.profile
使用Python3 安裝虛擬機器
mkvirtualenv cv -p python3
進入虛擬機器
source ~/.profile
$ workon cv
安裝numpy
由於pip預設從官網上下載第三方庫,限於網速問題,多次pip install numpy
失敗(換源無效),無奈之下只好先在本機上手動下載numpy的.whl檔案,通過ssh傳輸到樹莓派中,再進行離線安裝
#https://www.piwheels.org/simple/numpy/numpy-1.18.4-cp37-cp37m-linux_armv7l.whl (10.4 MB)
#在Window系統下命令列中輸入如下
scp <localfile> pi@192.168.1.9:/home/pi/
$ 輸入密碼 <password>
將接收到的.whl檔案存放到python的site-packages下,然後使用如下指令進行安裝
python -m pip install <檔名>
成功安裝Numpy
(5)編譯OpenCV
# 設定CMake構建選項
cd ~/opencv-3.3.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.3.0/modules \
-D BUILD_EXAMPLES=ON ..
檢查numpy的安裝
增大了交換空間CONF_SWAPSIZE=1024
# CONF_SWAPSIZE由100改為1024
sudo nano /etc/dphys-swapfile
# 重啟swap服務
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
開始編譯(這段過程歷盡艱辛,各種報錯,詳情請見編譯問題彙總)
make -j4
安裝OpenCV
$ sudo make install
$ sudo ldconfig
$ ls -l /usr/local/lib/python3.7/site-packages/
$ cd ~/.virtualenvs/cv/lib/python3.7/site-packages/
#建立軟鏈
$ ln -s /usr/local/lib/python3.7/site-packages/cv2.cpython-37m-arm-linux-gnueabihf.so cv2
(6)驗證安裝
$ source ~/.profile
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__
'3.3.0'
>>>
2️⃣使用opencv和python控制樹莓派的攝像頭
(1)picamare模組安裝
開啟虛擬機器
$ source ~/.profile #每次開啟虛擬機器之前都需要source配置檔案,否則無法開啟
$ workon cv
安裝picamare
$ pip install "picamera[array]"
(2)在Python程式碼中匯入OpenCV控制攝像頭
拍照功能程式碼test_image.py:
# import the necessary packages
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
rawCapture = PiRGBArray(camera)
# allow the camera to warmup
time.sleep(3) #此處把0.1改成了3
# grab an image from the camera
camera.capture(rawCapture, format="bgr")
image = rawCapture.array
# display the image on screen and wait for a keypress
cv2.imshow("Image", image)
cv2.waitKey(0)
拍照:
攝像功能程式碼video_test.py:
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))
time.sleep(0.1)
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
image = frame.array
cv2.imshow("Frame", image)
key = cv2.waitKey(1) & 0xFF
rawCapture.truncate(0)
if key == ord("q"):
break
攝像:
3️⃣Raspberry Pi 的人臉識別
注:所有操作均在python虛擬機器中進行
安裝dlib以及實現人臉識別功能的開源模組face_recogniztion
$ pip install dlib
$ pip install face_recognition
執行GitHub上face_recognition倉庫下的程式碼
執行時需要將攝像頭對準影像或照片,儘量離得近一點,識別成功率更高
同一個程式碼倉庫下的另一個示例
該示例引入opencv來處理影像資訊,可以實時顯示當前攝像頭識別到的人臉資訊
4️⃣ 結合微服務的進階任務
docker安裝(參考樹莓派上 Docker 的安裝和使用)
sudo apt install docker-ce
拉取已配置python環境和opencv的映象(支援arm)sixsq/opencv-python
#配置docker的映象加速
sudo nano /etc/docker/daemon.json
#重新載入docker服務的配置檔案
systemctl dameon-reload
#重啟docker 服務
systemctl restart docker
#拉取映象
sudo docker pull sixsq/opencv-python
進入容器並安裝庫
sudo docker run -it sixsq/opencv-python /bin/bash
pip install "picamera[array]" dlib face_recognition
安裝成功後進行commit
sudo docker commit 79e08fabc3fd face_opencv
sudo docker images
建立raspberrypi資料夾及相關檔案
- Dockerfile
FROM face_opencv
RUN mkdir /myapp
WORKDIR /myapp
COPY myapp .
build映象
sudo docker build -t myface_opencv
在容器中跑通示例程式碼facerec_on_raspberry_pi.py
一定要確保攝像頭開啟,檢查是否存在video0檔案
sudo docker run -it --device=/dev/vchiq --device=/dev/video0 --name myface_opencv myface_opencv
python3 facerec_on_raspberry_pi.py
(選做)在容器中跑通示例程式碼facerec_from_webcam_faster.py
#sudo apt-get install x11-xserver-utils
xhost +
sudo docker run -it --rm \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=:0.0 \
-e QT_X11_NO_MITSHM=1 \
--device=/dev/vchiq \
--device=/dev/video0 \
--name myface4 \
myface_opencv \
python3 facerec_from_webcam_faster.py
5️⃣問題與總結
-
問題1-安裝依賴
-
問題描述:出現需要安裝依賴和依賴衝突
-
解決方法:使用
sudo aptitude install
-
-
問題2-安裝pip
-
問題描述:安裝python3 get-pip.py時報錯誤AttributeError: module 're' has no attribute 'compile'
-
問題解析:上次實驗殘留re.py檔案,和系統庫同名
-
解決方法:刪除re.py檔案
-
-
問題3-安裝Pyhton虛擬機器
-
問題描述:使用Python3 安裝虛擬機器報錯
-
解決方法:修改配置檔案如部落格上文所示
-
-
問題4-編譯OpenCV
-
問題描述:編譯時出現四次缺少hpp類的錯誤
-
問題解析:出錯是由於hpp檔案不存在,但其檔案存在於opencv-contrib目錄下,可以在程式碼中將其路徑修改為檔案所在目錄對應的絕對路徑。
-
解決方法:根據錯誤資訊提示的檔案目錄,找到配置檔案,將配置資訊修改
-
前兩個報錯
-
#include "opencv2/xfeatures2d/cuda.hpp"
-
改為
-
#include "/home/pi/opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"
-
第三個報錯
-
opencv2/xfeatures2d.hpp
-
改為
-
/home/pi/opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp
-
第四個報錯
-
/opencv2/xfeatures2d/nonfree.hpp
-
改為
-
include "/home/pi/opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp"
-
-
問題5
-
問題描述:無效型別轉換
-
解決方法:開啟程式碼檔案
/home/pi/opencv-3.3.0/modules/python/src2/cv2.cpp
在對應行進行強制型別轉換
-
-
問題6
-
問題描述:執行拍照功能程式碼時出錯,缺少gtk庫
-
解決方法:
-
首先下載缺少的庫libgtk2.0-dev和pkg-config,使用aptitude install下載該庫及相關依賴,然後使用cmake重新編譯OpenCv
-
在cmake時要新增如下內容:
-D WITH_QT=ON -D WITH_GTK=ON -D WITH_GTK_2_X=ON
(參考連結OpenCV Error: The function is not implemented.解決方法) -
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.3.0/modules \ -D BUILD_EXAMPLES=ON \ -D WITH_QT=ON \ -D WITH_GTK=ON \ -D WITH_GTK_2_X=ON ..
-
如果cmake過程中出現如下錯誤,說明系統缺少Qt 4.x模組,需要使用pip安裝Qt 4:
sudo apt-get install qt4-default
-
使用命令
sudo apt search qt4-default
,出現以下內容說明安裝成功 -
使用
make -j4
重新編譯安裝opencv(又是一段漫長的等待,建議睡個覺再繼續嗷)
-
-
6️⃣小組協作記錄
小組成員及分工
學號 | 姓名 | 分工 |
---|---|---|
031702311 | 陳珊珊 | 負責實際操作,問題解決,部落格撰寫 |
031702321 | 林鑫燦 | 負責查閱資料,問題解決,部落格撰寫 |
031702336 | 林家偉 | 負責查閱資料,問題解決,部落格撰寫 |
線上協作記錄
我們小組通過螢幕分享的方式直播操作,遇到問題大家一起解決,大概經過16個小時的奮鬥我們終於完成了!!!