關於活體檢測的一些理論方法
阿新 • • 發佈:2019-01-07
最近研究活體檢測,主要是針對防止身份證照片攻擊,通過提示使用者完成某些動作進行識別;
想要檢測使用者的動作,最基礎的一個前提,必須將人臉的特徵點提取出來,才能做之後的判斷;opencv自帶的方法貌似只能畫出矩形的人臉框,我們必須要準確檢測出眼睛鼻子和人臉的輪廓,從網上找了兩個人臉特徵提取庫:
1.IntrafaceDll
2.libfacedetect
兩個庫的共同點是,都能提取人臉68個關鍵點,這對我們的檢測提供了很有利的條件;
也各有利弊,IntrafaceDll提取相對準確,尤其是針對眨眼,張嘴等動作時,相當靈敏,但是當前網上我只找到了lib庫,沒有找到原始碼,其只支援opencv246版本(和我的專案衝突);libfacedetect對於眨眼並不靈敏,張嘴效果還行,主要是引入方便,相容性好;
好,提取68個點之後,效果大概是這樣:
好,現在我說一下活體檢測的思路把,
第一個張嘴,首先要找出嘴巴上下左右嘴脣的位置,通過上下的絕對距離/左右的絕對距離,得到一個比例,設定一個闕值,大於此值時,為張嘴,小於則為閉嘴;
眨眼,和張嘴的邏輯一樣,不過要分左眼和右眼;
搖頭,檢測左右臉的晃動,需要三個點,鼻子,臉最左位置,臉最右位置,鼻子到左絕對距離為left,到右絕對距離為right, 總距離記為w=left+right; 當left<w/3 則判定為向左晃動,right>w/3則判斷為向右晃動,其他情況 為正臉;
以上是我通過實驗總結出來的幾種方法,效果比較理想,程式碼這裡就不貼了,畢竟原理最重要