PHP opencv Dlib,Face_Recognition
Face_Recognition
使用Opencv和Dlib實(shí)現(xiàn)基于視頻的人臉識(shí)別
文件夾介紹
1、Resources\pictures
此文件夾下存放人臉保存結(jié)果
2、Resources\video
此文件夾下存放帶標(biāo)注視頻保存結(jié)果
3、Resources\faceS
此文件夾下存放各個(gè)人物的圖片,用于人臉庫(kù)的建立
4、Resources\featureDB
此文件下為各個(gè)人物的128D描述符的數(shù)據(jù)存儲(chǔ)文件
5、Resources\featureMean\feature_all.csv
此文件為人臉特征庫(kù)文件
6、Resources\shape_predictor_68_face_landmarks.dat
人臉關(guān)鍵點(diǎn)標(biāo)記模型文件
7、Resources\dlib_face_recognition_resnet_model_v1.dat
面部識(shí)別模型文件
8、face_recognition.mp4
待檢測(cè)的視頻
9、face_recognition.py
人臉識(shí)別代碼文件
10、detection.py
人臉檢測(cè)代碼文件
11、face_recognition.py
建立本地人臉庫(kù)代碼文件
介紹
思路介紹
無(wú)論是基于視頻或者調(diào)用攝像頭來(lái)完成人臉識(shí)別,其實(shí)是一樣,通過(guò)使用opencv,來(lái)捕獲視頻或者攝像頭傳來(lái)的圖像,每隔若干幀取一幀做人臉識(shí)別,調(diào)用Dlib中的人臉檢測(cè)器來(lái)檢測(cè)人臉,并通過(guò)Dlib的人臉關(guān)鍵點(diǎn)預(yù)測(cè)器來(lái)獲得人臉的關(guān)鍵點(diǎn),接下來(lái)使用Dlib的面部識(shí)別模型將獲得的68個(gè)關(guān)鍵點(diǎn)轉(zhuǎn)換成128D面部描述符,我們通過(guò)計(jì)算人臉的128D面部描述符與本地人臉庫(kù)(需要自己建立人臉庫(kù))中的人臉128D面部描述符的歐氏距離,來(lái)判斷是否為同一人,當(dāng)距離小于特定閾值時(shí),認(rèn)定識(shí)別成功,打上標(biāo)簽。
運(yùn)行環(huán)境介紹
操作系統(tǒng)版本:Windows10
運(yùn)行環(huán)境:python3.6+opencv4.1.2+dlib19.8.1
軟件:PyCharm
(注:這里下載dlib包最好下載.whl文件,不需要安裝cmake以及boost這些麻煩的東西。因?yàn)閐ilib包的沒(méi)有python3.7版的whl文件,所以建議使用python3.6)
附上opencv和dlib包鏈接:https://pan.baidu.com/s/1Z33r7SoD5Z0faH96wr7Ecw
提取碼:a8gl
模型介紹
這里的人臉識(shí)別使用了Dlib已訓(xùn)練成功的兩個(gè)模型--人臉關(guān)鍵點(diǎn)預(yù)測(cè)器和面部識(shí)別模型。使用時(shí)需要加載模型,文件分別為shape_predictor_68_face_landmarks.dat和dlib_face_recognition_resnet_model_v1.dat
模型文件下載地址 http://dlib.net/files/
人臉關(guān)鍵點(diǎn)預(yù)測(cè)器
Dlib中標(biāo)記68個(gè)特征點(diǎn)采用的是ERT算法,是一種基于回歸樹(shù)的人臉對(duì)齊算法,這種方法通過(guò)建立一個(gè)級(jí)聯(lián)的殘差回歸樹(shù)來(lái)使人臉形狀從當(dāng)前形狀一步一步回歸到真實(shí)形狀。每一個(gè)GBDT的每一個(gè)葉子節(jié)點(diǎn)上都存儲(chǔ)著一個(gè)殘差回歸量,當(dāng)輸入落到一個(gè)節(jié)點(diǎn)上時(shí),就將殘差加到改輸入上,起到回歸的目的,最終將所有殘差疊加在一起,就完成了人臉對(duì)齊的目的。
用法:
predictor_path = resources_path + "shape_predictor_68_face_landmarks.dat"
#加載人臉關(guān)鍵點(diǎn)預(yù)測(cè)器
predictor= dlib.shape_predictor(predictor_path)
#獲取面部關(guān)鍵點(diǎn),gary為灰度化的圖片
shape = predictor(gray,value)
人臉識(shí)別模型
Dlib中使用的人臉識(shí)別模型是基于深度殘差網(wǎng)絡(luò),深度殘差網(wǎng)絡(luò)通過(guò)殘差塊來(lái)構(gòu)建,它有效的解決了梯度消失以及梯度爆炸問(wèn)題。當(dāng)網(wǎng)絡(luò)深度很大時(shí),普通網(wǎng)絡(luò)的誤差會(huì)增加,而深度殘差網(wǎng)絡(luò)卻有較小的誤差。這里的人臉識(shí)別通過(guò)訓(xùn)練深度殘差網(wǎng)絡(luò)將人臉的68個(gè)特征關(guān)鍵點(diǎn)轉(zhuǎn)換成128D面部描述符,用于人臉的識(shí)別。
model_path = resources_path + "dlib_face_recognition_resnet_model_v1.dat"
#生成面部識(shí)別器
facerec = dlib.face_recognition_model_v1(model_path)
# 提取特征-圖像中的68個(gè)關(guān)鍵點(diǎn)轉(zhuǎn)換為128D面部描述符,其中同一人的圖片被映射到彼此附近,并且不同人的圖片被遠(yuǎn)離地映射。
face_descriptor = facerec.compute_face_descriptor(frame, shape)
效果展示
識(shí)別過(guò)程
1、本地人臉庫(kù)建立
2 、視頻處理
通過(guò)opencv提供的VideoCapture()函數(shù)對(duì)視頻進(jìn)行加載,并計(jì)算視頻的fps,以方便人臉標(biāo)記之后的視頻的輸出。
3、加載模型
將已經(jīng)訓(xùn)練好的模型加載進(jìn)來(lái),將人臉關(guān)鍵點(diǎn)標(biāo)記模型和面部識(shí)別模型加載進(jìn)來(lái),以便后續(xù)使用。
4、人臉檢測(cè)
對(duì)視頻進(jìn)行讀取,每隔6幀,取一幀進(jìn)行人臉檢測(cè),先將取得的照片進(jìn)行灰度處理,然后進(jìn)行人臉檢測(cè),并繪畫(huà)人臉標(biāo)記框進(jìn)行展示,然后通過(guò)加載的人臉關(guān)鍵點(diǎn)標(biāo)記模型識(shí)別圖像中的人臉關(guān)鍵點(diǎn),并且標(biāo)記。
5、人臉識(shí)別
將獲取的人臉關(guān)鍵點(diǎn)轉(zhuǎn)換成128D人臉描述符,將其與人臉庫(kù)中的128D面部描述符進(jìn)行歐氏距離計(jì)算,當(dāng)距離值小于某個(gè)閾值時(shí),認(rèn)為人物匹配,識(shí)別成功,打上標(biāo)簽。當(dāng)無(wú)一小于該閾值,打上Unknown標(biāo)簽
6、 保存人臉標(biāo)記視頻
將整個(gè)處理過(guò)程進(jìn)行輸出,將人臉標(biāo)記過(guò)程保存下來(lái)。
總結(jié)
以上是生活随笔為你收集整理的PHP opencv Dlib,Face_Recognition的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言求45678所有非平凡因子,近世代
- 下一篇: 怎么在电脑安装php文件夹在哪个文件夹,