2017年5月9日 星期二

Raspberry Pi 3 ( 10 ) OpenCV 動態人臉偵測

 Raspberry Pi 3 ( 10 )   OpenCV   動態人臉偵測

     人臉偵測的第一個想到的當然是手機,現在手機、數位相機對人臉的偵測已經是非常普及了,問題是這技術是別人的。OpenCV也提供人臉辨識的資料庫可以讓初學者測試學習。這次就用Raspberry Pi3 + PicameraV2做實驗。

Raspberry Camera


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 程式 ***這一行不要拷貝進程式裡******

#-*-coding:cp950-*-

#上一行是讓 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的視窗,當人臉出現時就會框起來。


以上這段程式是實際測試過的。

5 則留言:

  1. 請問您有遇到下列問題嗎? 怎麼解決的呢?
    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

    回覆刪除
  2. 每次開機一定要切換到cv環境
    $ source ~/.profile
    $ workon cv

    回覆刪除
  3. (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:


    請問出現上述情況該怎麼辦?

    回覆刪除