這里介紹使用攝像頭捕獲實時人臉信息
''' 從攝像頭捕獲實時畫面進行人臉檢測 ''' import cv2 # 准備面部檢測引擎和人眼檢測引擎 # 注意調用方法沒有任何區別 # 只是選擇的xml文件不一樣 # 面部檢測是haarcascade_frontalface_default.xml # 人眼檢測是haarcascade_eye.xml face_engine = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml') # 調用VideoCapture函數 # 參數設為0表示打開本地默認攝像頭 # 參數若為文件路徑也可以打開一個本地的視頻文件 # 返回一個VideoCapture對象 cap = cv2.VideoCapture(0) # 應該是設置屏幕亮度的參數 # 默認以下設置 cap.set(10,10) # 由於人臉檢測是在靜態的圖片上進行 # 所以需要對攝像頭捕獲的內容進行逐幀檢測 # 定義下面的循環體 while True: # 調用read函數讀取每一幀的圖片 # 返回兩個值 # success表示若圖片讀取成功返回True # frame表示返回的Image對象 success, frame = cap.read() # 使用面部識別引擎檢測人臉 # 返回一個包含面部區域信息的可迭代對象 faces = face_engine.detectMultiScale(frame, 1.3, 3) # 對每個面部區域畫出矩形 for (x,y,w,h) in faces: # 在圖片frame上繪制矩形 img1 = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2) # 截取人臉區域 # 因為人眼在人臉上 # 所以人眼檢測一定在面部區域進行 # 可以提高檢測的效率 face_area = img1[y:y+h,x:x+w] # 人眼檢測 eyes = eye_cascade.detectMultiScale(face_area,1.3,3) # 繪制人眼矩形區域 for (ex,ey,ew,eh) in eyes: cv2.rectangle(face_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) # 繪制好矩形區域后,創建圖片顯示窗口 cv2.imshow('Face_recognition', frame) # 條件限制 # 表示鍵盤每隔5毫秒監聽一次 # 0xFF == ord('q')表示按下鍵盤上的Q鍵觸發動作break退出循環 # 注意這里的Q鍵必須要在英文輸入法條件下進行 if cv2.waitKey(5) & 0xFF == ord('q'): break # 調用release函數關閉攝像頭 # 這個要特別注意! cap.release() # 顧名思義,清理窗口、退出窗口 cv2.destroyAllWindows()
最后會這樣顯示
比如奧觀海,一般計算機視覺行內人都是必備奧觀海的圖片的,就像之前說過的Lena圖一樣。
這是實時拍攝的嗷!