Raspberry Pi 3 ( 10 ) OpenCV 動態人臉偵測
人臉偵測的第一個想到的當然是手機,現在手機、數位相機對人臉的偵測已經是非常普及了,問題是這技術是別人的。OpenCV也提供人臉辨識的資料庫可以讓初學者測試學習。這次就用Raspberry Pi3 + PicameraV2做實驗。
PiCamera 接入Raspberry Pi3
接下來就先更新一下Rasoberry 。$ 不要輸入!!
$ sudo apt-get update
$ sudo apt-gat upgrade再來鳩開啟Rasoberry設定。
將Camera 開啟
先測試一下Canera 是否正常運作。
$ raspistill -o output.jpg
在跟目錄會有一個Test.jpg的檔案。
Test.jpg 就是剛剛照下來的照片。
上一篇我我OpenCV & Python 是安裝在虛擬環境中要再安裝其他的模組也要回虛擬環境。
$ source ~/.profile
$ workon cv
注意提示符號前面會有cv
安裝Picamera 注意要加 array
$ pip install "picamera[array]"
在這裡有Opencv 有提供建立好的臉部與眼睛 xml 檔案,建議全部下載下來下次可使用。
https://github.com/opencv/opencv/tree/master/data/haarcascades
把haarcascades的目錄名稱改成face,在這目錄底下建立一個新的文字檔案命名為 face.py。
以下是face.py 的內容,個人慘痛經驗是用文字編輯器比Python 的IDE好用,Python 不能有多的空格!!縮牌要使用 tab 鍵。
# 以下是Python 程式 ***這一行不要拷貝進程式裡******
#上一行是讓 Python 能用中文註解
from picamera.array import PiRGBArray
from picamera import PiCamera
import cv2
import time
#設定攝影機
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size=(640, 480))
#新視窗命名為Faces
display_window = cv2.namedWindow("Faces")
#載入臉部特徵模組
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
time.sleep(0.1)
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
image = frame.array
#臉部辨識
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 5)
for (x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2)
#輸出影像
cv2.imshow("Faces", image)
key = cv2.waitKey(1)
rawCapture.truncate(0)
if key == ord("q"): # Press 'q' to quit
break
# 以上是Python 程式 ***這一行不要拷貝進程式裡******
把整個face目錄用WinSCP傳到Raspberry,用WinSCP對於習慣用Windows的我最大的好處是可以直接編輯Raspberry內的文字檔。
在Raspberry 的終端機輸入
$ cd face
$ Python face.py
Raspberry 就會開啟一個名稱為Faces的視窗,當人臉出現時就會框起來。
以上這段程式是實際測試過的。
在Raspberry 的終端機輸入
$ cd face
$ Python face.py
Raspberry 就會開啟一個名稱為Faces的視窗,當人臉出現時就會框起來。
以上這段程式是實際測試過的。
請問您有遇到下列問題嗎? 怎麼解決的呢?
回覆刪除OpenCV Error: Parsing error (haarcascade_frontalface_default.xml(1): Valid XML should start with '') in icvXMLParse, file /home/pi/opencv-3.1.0/modules/core/src/persistence.cpp, line 2220
Traceback (most recent call last):
File "face.py", line 20, in
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
cv2.error: /home/pi/opencv-3.1.0/modules/core/src/persistence.cpp:2220: error: (-212) haarcascade_frontalface_default.xml(1): Valid XML should start with '' in function icvXMLParse
我沒遇過,
回覆刪除每次開機一定要切換到cv環境
回覆刪除$ source ~/.profile
$ workon cv
(cv) pi@raspberrypi:~/Desktop/opencv-master/opencv-master/data/face $ python face.py
回覆刪除Unable to init server: Could not connect: Connection refused
(Faces:32726): Gtk-WARNING **: cannot open display:
請問出現上述情況該怎麼辦?
Xming
刪除