0.引言
利用python開發,借助Dlib庫捕獲攝像頭中的人臉,提取人臉特征,通過計算歐氏距離來和預存的人臉特征進行對比,達到人臉識別的目的;
可以自動從攝像頭中摳取人臉圖片存儲到本地,然后提取構建預設人臉特征;
根據摳取的 / 已有的同一個人多張人臉圖片提取128D特征值,然后計算該人的128D特征均值;
然后和攝像頭中實時獲取到的人臉提取出的特征值,計算歐氏距離,判定是否為同一張人臉;
人臉識別 / face recognition的說明:
wikipedia 關于人臉識別系統 / face recognition system 的描述:theywork by comparing selected facial featuresfrom given image with faces within a database.
本項目中就是比較 預設的人臉的特征和 攝像頭實時獲取到的人臉的特征;
核心就是提取128D人臉特征,然后計算攝像頭人臉特征和預設的特征臉的歐式距離,進行比對;
效果如下(攝像頭認出來我是default_person預設的人臉 / 另一個人不是預設人臉顯示diff):

圖1 攝像頭人臉識別效果gif
1.總體流程
先說下 人臉檢測 (face detection) 和 人臉識別 (face recognition) ,前者是達到檢測出場景中人臉的目的就可以了,而后者不僅需要檢測出人臉,還要和已有人臉數據進行比對,識別出是否在數據庫中,或者進行身份標注之類處理,人臉檢測和人臉識別兩者有時候可能會被理解混淆;
我的之前一些項目都是用dlib做人臉檢測這塊,這個項目想要實現的功能是人臉識別功能,借助的是 dlib官網中 face_recognition.py這個例程 (link:http://dlib.net/face_recognition.py.html);
核心在于 利用 “dlib_face_recognition_resnet_model_v1.dat” 這個model,提取人臉圖像的128D特征,然后比對不同人臉圖片的128D特征,設定閾值計算歐氏距離來判斷是否為同一張臉;
# face recognition model, the object maps human faces into 128D vectorsfacerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat") shape = predictor(img, dets[0])face_descriptor = facerec.compute_face_descriptor(img, shape) 
圖2 總體設計流程
2.源碼介紹
主要有
這三個py文件;
2.1get_face_from_camera.py / 采集構建XXX人臉數據
人臉識別需要將 提取到的圖像數據 和已有圖像數據進行比對分析,所以這個py文件實現的功能就是采集構建XXX的人臉數據;
新聞熱點
疑難解答