人臉檢測(detection)與人臉校準(alignment)

遊走的傑少發表於2017-07-28

由於個人想做一下人臉角度識別,但能夠找到的比較好的model是於仕祺大神的facedetection,奈何大神的版本只有Windows下的連結庫,Ubuntu下使用不了,所以就基於人臉識別與人臉校準自己寫一個角度識別的程式碼。其基本思想是通過人眼睛、鼻子、嘴巴的傾斜位置與人臉正中線角度進行比較,能夠粗略計算出人臉的yaw與pitch角,並且基於Kinect2的深度資訊,可以大概讀取到人臉距離Kinect2的距離資訊。
人臉檢測(detection)在opencv中早就有直接能拿來用的haar分類器,基於Viola-Jones演算法。這裡介紹一種MSRA在14年的最新技術:Joint Cascade Face Detection and Alignment(ECCV14)。這篇文章直接在30ms的時間裡把detection和alignment都給做了,PR曲線彪到很高,時效性高,記憶體佔用卻非常低,在一些庫上虐了Face++和Google Picasa。
人臉校準(alignment)是給你一張臉,你給我找出我需要的特徵點的位置,比如鼻子左側,鼻孔下側,瞳孔位置,上嘴脣下側等等點的位置。
下面是Joint Cascade Face Detection and Alignment的結構圖:
這裡寫圖片描述
作者建立了一個叫post classifier的分類器,方法如下:

1.樣本準備:首先作者呼叫opencv的Viola-Jones分類器,將recal閥值設到99%,這樣能夠儘可能地檢測出所有的臉,但是同時也會有非常多的不是臉的東東被檢測出來。於是,檢測出來的框框們被分成了兩類:是臉和不是臉。這些圖片被resize到96*96。

2.特徵提取:接下來是特徵提取,作者採用了三種方法:

第一種:把window劃分成6*6個小windows,分別提取SIFT特徵,然後連線著36個sift特徵向量成為影像的特徵。
第二種:先求出一個固定的臉的平均shape(27個特徵點的位置,比如眼睛左邊,嘴脣右邊等等),然後以這27個特徵點為中心提取sift特徵,然後連線後作為特徵。
第三種:用他們組去年的另一個成果Face Alignment at 3000 FPS via Regressing Local Binary Features (CVPR14) ,也就是圖中的3000FPS方法,迴歸出每張臉的shape,然後再以每張臉自己的27個shape points為中心做sift,然後連線得到特徵。

3.分類:將上述的三種特徵分別扔到線性SVM中做分類,訓練出一個能分辨一張圖是不是臉的SVM模型。

參考部落格:
http://www.cnblogs.com/sciencefans/p/4394861.html

相關文章