未經(jīng)同意,不得轉(zhuǎn)載
人臉活體檢測(Face Anti-spoofing),在人臉識別前判斷當(dāng)前輸入的人臉是否是真人,可以有效防止欺騙攻擊。
一、Spoofing方式
- 照片:打印的彩色人臉照片;
- 視頻:錄制的一段人臉視頻;
- 3D面具:3D打印人的頭部模型
二、Face Anti-spoofing方法
人臉活體檢測本質(zhì)可以理解為真假人臉的二分類問題,基本的方法有:
1. 基于紋理特征
利用真假人臉在紋理細節(jié)上的差異,提取人臉的LBP,DoG和SURF等特征,訓(xùn)練一個二分類的分類器如SVM,LDA。
存在問題:
(1)對光照和相機條件比較敏感;
(2)魯棒性較差。
2. 基于運動信息
從視頻中提取人臉區(qū)域的特定運動信息判斷真假人臉,利用用戶的眨眼、嘴部運動,點頭搖頭等信息進行判斷。
存在問題:
(1)需要用戶配合
(2)多用于金融安全身份驗證,對實時門禁系統(tǒng)不太適用
3. 基于深度學(xué)習(xí)
利用深度學(xué)習(xí)網(wǎng)絡(luò)如CNN、RNN等訓(xùn)練判斷真假人臉的二分類網(wǎng)絡(luò)模型。
存在問題:
(1)容易過擬合,目前數(shù)據(jù)集種類有限,難以覆蓋spoofing的方式;
(2)domain shift問題。實際測試場景往往非可控,測試集和訓(xùn)練集分布有很大差異,這時候就會出現(xiàn)過擬合問題,模型在測試集上效果不理想。
4. 借助輔助設(shè)備
利用近紅外成像技術(shù),選取兩個波段結(jié)合可見光成像進行人臉偽裝檢測。
存在問題:
(1)對采集條件要求比較嚴格,成本高于普通可見光系統(tǒng)。
三、數(shù)據(jù)集

- NUAA: http://parnec.nuaa.edu.cn/xtan/data/nuaaimposterdb.html
- http://parnec.nuaa.edu.cn/xtan/NUAAImposterDB_download.html
- Replay-Attack dataset: https://www.idiap.ch/dataset/replayattack
- CASIA Face Anti-Spoofing Database: http://www.cbsr.ia.ac.cn/english/FaceAntiSpoofDatabases.asp
- MSU Mobile Face Spoofing Database (MSU MFSD): http://biometrics.cse.msu.edu/Publications/Databases/MSUMobileFaceSpoofing/index.htm#Download_instructions
四、基于HSV + YCrCb顏色特征訓(xùn)練簡單的CNN模型
項目地址:https://github.com/Oreobird/Face-Anti-Spoofing
基于tensorflow keras實現(xiàn),網(wǎng)絡(luò)模型比較簡單,如下圖所示,多輸入單輸出,對人臉圖像轉(zhuǎn)換為HSV和YCrCb顏色空間,分別輸入到VGG16提取特征,將兩者融合后,再加入幾層全連接,最終以softmax輸出真假人臉的分類概率。模型的訓(xùn)練與測試都封裝在models.py文件的FasNet類中。

數(shù)據(jù)集使用了NUAA,訓(xùn)練數(shù)據(jù)的處理在datasets.py文件,其中DataSet是通用的讀取數(shù)據(jù)類,NUAA類以DataSet提供的接口封裝了對NUAA數(shù)據(jù)集的相關(guān)操作。
在main.py中提供了兩種測試方式,可以通過python main.py --online=True來調(diào)用攝像頭實時讀取視頻數(shù)據(jù)來做檢測,基于dlib檢測出人臉再輸入到模型做推理,實現(xiàn)比較簡單,具體實現(xiàn)可以看源碼。