這一步咱們開始搭建第一個模塊,用來檢測到圖像中的人臉位置,並將它拍下來保存在指定路徑ide
流程圖:函數
代碼實現:spa
import cv2 def pic(cam): # 調用筆記本內置攝像頭,因此參數爲0,若是有其餘的攝像頭能夠調整參數爲1,2 cam = cv2.VideoCapture(0) # 使用自帶的人臉識別分類器, 其中 這個.xml文件是 識別人臉的分類器文件 # 這裏我已經把這個文件放在了當前項目目錄下 face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 輸入用戶id face_id = input('\n enter user id:') print('\n Initializing face capture. Look at the camera and wait ...') # count變量記錄圖片張數 count = 0 while True: # 從攝像頭讀取圖片 # cam.read()按幀讀取視頻,sucess,img是cam.read()方法的兩個返回值。 # 其中sucess是布爾值,若是讀取幀是正確的則返回True, # 若是文件讀取到結尾,它的返回值就爲False。 # img就是每一幀的圖像,是個三維矩陣。 sucess, img = cam.read() # 轉爲灰度圖片 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 檢測人臉 faces = face_detector.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: # 4個參數依次是 圖像矩陣, 矩形左上角起始座標,右下角座標, 矩形邊框線的顏色 cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0)) count += 1 # 保存圖像 cv2.imwrite("D:/FaceData/" + str(face_id) + '.' + str(count) + '.jpg', gray[y: y + h, x: x + w]) cv2.imshow('image', img) # 保持畫面的持續。 k = cv2.waitKey(1) if k == 27: # 經過esc鍵退出攝像 break elif count >= 100: # 獲得100個樣本後退出攝像 break # 關閉攝像頭 cam.release() cv2.destroyAllWindows() if __name__ == '__main__': cam = cv2.VideoCapture(0) pic(cam)
代碼中每一個函數的做用基本都進行了簡略註釋,code
到如今,咱們就在指定的文件夾中有了必定數量的人臉灰度圖了。視頻