Keras搭建CNN進行人臉識別系列(三)--利用haar級聯檢測器識別出人臉
阿新 • • 發佈:2019-01-25
人臉識別原理
從實時視訊流中識別出人臉區域,從原理上看,其依然屬於機器學習的領域之一,本質上與谷歌利用深度學習識別出貓沒有什麼區別。程式通過大量的人臉圖片資料進行訓練,利用數學演算法建立建立可靠的人臉特徵模型,如此即可識別出人臉。幸運的是,這些工作OpenCV已經幫我們做了,我們只需呼叫對應的API函式即可,先給出程式碼:
# -*- coding: utf-8 -*- import cv2 import sys from PIL import Image def CatchUsbVideo(window_name, camera_idx): cv2.namedWindow(window_name) # 視訊來源,可以來自一段已存好的視訊,也可以直接來自USB攝像頭 cap = cv2.VideoCapture(camera_idx) # 告訴OpenCV使用人臉識別分類器 classfier = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml") # 識別出人臉後要畫的邊框的顏色,RGB格式 color = (0, 255, 0) while cap.isOpened(): ok, frame = cap.read() # 讀取一幀資料 if not ok: break # 將當前幀轉換成灰度影象 grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 人臉檢測,1.2和2分別為圖片縮放比例和需要檢測的有效點數 faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) if len(faceRects) > 0: # 大於0則檢測到人臉 for faceRect in faceRects: # 單獨框出每一張人臉 x, y, w, h = faceRect cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2) # 顯示影象 cv2.imshow(window_name, frame) c = cv2.waitKey(10) if c & 0xFF == ord('q'): break # 釋放攝像頭並銷燬所有視窗 cap.release() cv2.destroyAllWindows() if __name__ == '__main__': CatchUsbVideo("FaceRecongition", 0)
這裡我們使用了一個現成的opencv版本的haar-casscade人臉識別xml配置檔案,這裡我們給出這個級聯檔案的連結:https://download.csdn.net/download/qq_35747066/10760507。下載下來之後放在工程資料夾中,即與程式碼同一個資料夾內。
執行效果
opencv自帶的級聯器效果還是不錯的!