1. 引言
在某些場景下,我們不僅需要進(jìn)行實時人臉檢測追蹤,還要進(jìn)行再加工;這里進(jìn)行攝像頭實時人臉檢測,并對于實時檢測的人臉進(jìn)行初步提取;
單個/多個人臉檢測,并依次在攝像頭窗口,實時平鋪顯示檢測到的人臉;

圖 1 動態(tài)實時檢測效果圖
檢測到的人臉矩形圖像,會依次平鋪顯示在攝像頭的左上方;
當(dāng)多個人臉時候,也能夠依次鋪開顯示;
左上角窗口的大小會根據(jù)捕獲到的人臉大小實時變化;

圖 2 單個/多個人臉情況下攝像頭識別顯示結(jié)果
2. 代碼實現(xiàn)
主要分為三個部分:
攝像頭調(diào)用,利用 OpenCv 里面的cv2.VideoCapture();
人臉檢測,這里利用開源的 Dlib 框架,Dlib 中人臉檢測具體可以參考Python 3 利用 Dlib 19.7 進(jìn)行人臉檢測;
圖像填充,剪切部分可以參考Python 3 利用 Dlib 實現(xiàn)人臉檢測和剪切;
2.1 攝像頭調(diào)用
Python 中利用 OpenCv 調(diào)用攝像頭的一個例子how_to_use_camera.py:
# OpenCv 調(diào)用攝像頭# 默認(rèn)調(diào)用筆記本攝像頭# Author:  coneypo# Blog:   http://www.cnblogs.com/AdaminXie# GitHub:  https://github.com/coneypo/Dlib_face_cut# Mail:   coneypo@foxmail.comimport cv2cap = cv2.VideoCapture(0)# cap.set(propId, value)# 設(shè)置視頻參數(shù): propId - 設(shè)置的視頻參數(shù), value - 設(shè)置的參數(shù)值cap.set(3, 480)# cap.isOpened() 返回 true/false, 檢查攝像頭初始化是否成功print(cap.isOpened())# cap.read()""" 返回兩個值  先返回一個布爾值, 如果視頻讀取正確, 則為 True, 如果錯誤, 則為 False;   也可用來判斷是否到視頻末尾;    再返回一個值, 為每一幀的圖像, 該值是一個三維矩陣;    通用接收方法為:     ret,frame = cap.read();    ret: 布爾值;    frame: 圖像的三維矩陣;    這樣 ret 存儲布爾值, frame 存儲圖像;        若使用一個變量來接收兩個值, 如:      frame = cap.read()    則 frame 為一個元組, 原來使用 frame 處需更改為 frame[1]"""while cap.isOpened():  ret_flag, img_camera = cap.read()  cv2.imshow("camera", img_camera)  # 每幀數(shù)據(jù)延時 1ms, 延時為0, 讀取的是靜態(tài)幀  k = cv2.waitKey(1)  # 按下 's' 保存截圖  if k == ord('s'):    cv2.imwrite("test.jpg", img_camera)  # 按下 'q' 退出  if k == ord('q'):    break# 釋放所有攝像頭cap.release()# 刪除建立的所有窗口cv2.destroyAllWindows()2.2 人臉檢測
利用 Dlib 正向人臉檢測器,dlib.get_frontal_face_detector();
對于本地人臉圖像文件,一個利用 Dlib 進(jìn)行人臉檢測的例子:
新聞熱點
疑難解答