天天看點

【圖像識别】 Python+Opencv調用攝像頭實作人臉識别并儲存視訊

本文介紹了利用Python+Opencv實作調用攝像頭、進行人臉識别、并儲存為avi格式視訊的程式方法。至于python+opencv測試環境的搭建,回頭再開一個文章進行介紹。

【前期配置】

Python2.7+Opencv2.4.13

【實作過程】

先貼代碼:

#!/usr/bin/env python
#coding=utf-8
import os
import numpy
from PIL import Image,ImageDraw
import cv2


cap = cv2.VideoCapture(0)
fps = cap.get(cv2.cv.CV_CAP_PROP_FPS)
size = (int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.cv.CV_FOURCC('I','4','2','0')
video = cv2.VideoWriter("D:/My Documents/Python/image/avi/aaa.avi", fourcc, 5, size)
print cap.isOpened()

classifier=cv2.CascadeClassifier("D:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml")

count=0
while count > -1:
    ret,img = cap.read()
    faceRects = classifier.detectMultiScale(img, 1.2, 2, cv2.CASCADE_SCALE_IMAGE,(20,20))
    if len(faceRects)>0:
        for faceRect in faceRects: 
                x, y, w, h = faceRect
                cv2.rectangle(img, (int(x), int(y)), (int(x)+int(w), int(y)+int(h)), (0,255,0),2,0)
    video.write(img)
    cv2.imshow('video',img)
    key=cv2.waitKey(1)
    if key==ord('q'):
        break

video.release()
cap.release()
cv2.destroyAllWindows()
           

【代碼說明】

module加載的部分就不多說了。

調用攝像頭使用cv2.VideoCapture(0)指令,fps擷取視訊的幀數,size擷取視訊尺寸,fourcc是辨別視訊資料流格式的四字元代碼。cv2.VideoWriter定義了視訊儲存的位置及相關參數,本例中使用了與攝像頭相同的編碼格式和尺寸,播放幀數設為每秒5幀。cv2.CascadeClassifier定義了人臉識别分類器,opencv根目錄\sources\data\haarcascades中提供了很多訓練好的分類器,我們使用haarcascade_frontalface_alt.xml分類器。

循環結構主要包括人臉識别、人臉标注(綠色粗實線框)、視訊儲存、标注結果展示等功能,當檢測到鍵盤輸入'q'時,攝像頭終止并儲存資料。

最後,video.release()、cap.release()、cv2.destroyAllWindows()關閉所有視窗,have fun!