1. 程式人生 > >Python+opencv學習筆記之人臉視訊採集及實時檢測(樹莓派3B+下檢測)

Python+opencv學習筆記之人臉視訊採集及實時檢測(樹莓派3B+下檢測)

實驗目標:
1.首先通過opencv程式設計寫一個可以呼叫攝像頭並且能將攝像頭捕捉到的內容進行儲存。
2.將視訊檔案傳送到我們的樹莓派上,然後再利用Python編寫程式對視訊進行人臉識別處理,最後將人臉識別後的視訊儲存。
3.對某一張圖片進行處理,讓其具有毛玻璃效果,並將處理後的圖片儲存。
接下來就是實際的操作了
ps:一定要確保樹莓派上的Python能夠匯入cv2這個模組,也就是你在互動式的環境下輸出import cv2不會出現錯誤。最開始我就遇到了這個錯誤,後來查詢解決方法發現是我的樹莓派上有一些依賴庫未安裝。

這是在PyCharm上呼叫攝像頭錄製視訊的程式
import cv2
if __name__ == '__main__':
    cap=cv2.VideoCapture(0)
    fourcc=cv2.VideoWriter_fourcc(*'XVID')
    out=cv2.VideoWriter('test001.avi',fourcc,20.0,(640,480))
    while cap.isOpened():
        ret,frame=cap.read()
        if ret==True:
            frame=cv2.flip(frame,1)
            out.write(frame)
            cv2.imshow('frame',frame)
            if cv2.waitKey(1)&0xff==ord('q'):
                break
    cap.release()
    out.release()
    cv2.destroyAllWindows()

錄製視訊後我們將視訊傳到樹莓派上。(可以用TeamViewer直接傳到指定資料夾下。如果是用的遠端桌面連線或是其他沒有上傳檔案的工具登入到樹莓派上的話可以直接用U盤將視訊拷到樹莓派上)
**接下來我們還需要了解如何用Python對現有視訊進行人臉識別。

這裡可以參考python&opencv人臉識別及haarcascade_frontalface_alt2.xml檔案下載

記下下載的xml檔案所在的位置,可以直接放在.py檔案所在的目錄下。

接下來分享一下haarcascades—各種分類器xml檔案下載地址
有關人臉識別的基本原理我也不知道怎麼說,大家可以去看一些大神的部落格,應該會有詳解,這裡我就直接開始識別操作了。

import cv2
import sys
if __name__ == '__main__':
    cascPath = "./haarcascade_frontalface_alt2.xml"
    faceCascade = cv2.CascadeClassifier(cascPath)
    cap = cv2.VideoCapture('test1.avi')
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('test4.avi', fourcc, 20.0, (640, 480))
    while cap.isOpened():
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = faceCascade.detectMultiScale(
            gray,
            scaleFactor=1.1,
            minNeighbors=3,
            minSize=(30, 30),
            flags=cv2.ORB_HARRIS_SCORE
        )
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)//在人臉區域畫出一個選框
        if ret == True:
            out.write(frame)
            cv2.imshow('frame', frame)
            if cv2.waitKey(1) & 0xff == ord('q'):
                break
    cap.release()
    out.release()
    cv2.destroyAllWindows()

完工。