天天看點

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

人臉應用在計算機視覺體系中占很大一塊,在深度學習火起來之前,基于傳統機器學習的人臉應用就已經很成熟了,有很多商用應用場景。本文用一個可以實際運作的Demo來說明人臉應用中常見的技術概念,包含‘人臉檢測’、‘人臉對比’、‘人臉表征檢測(五官定位)’、‘眨眼檢測’、‘活體檢測’以及‘疲勞檢測’。

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

人臉檢測

嚴格來講,人臉檢測隻包含對照片中的人臉進行定位,人臉檢測隻擷取照片中人臉的矩形方框(Left、Top、Right、Bottom),再沒有其他的内容。現如今網上大部分“人臉檢測”概念模糊,包含的東西很多,比如除了剛才說的定位,還包括後面要說的人臉對比,這個嚴格上講是錯的。

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

人臉對比

當你使用人臉檢測技術發現圖檔(視訊幀)中包含一個人臉,那麼如何判斷該人臉是誰呢?這個就是我們常見的人臉授權應用,将一個人臉與資料庫的其他人臉進行對比,看它與資料庫中已有人臉哪個最相似。傳統機器學習中,人臉對比過程需要先提取人臉特征編碼,尋找一個特征向量來代替原有人臉RGB圖檔,再通過計算兩個人臉特征向量距離來判斷人臉是否相似(傳統機器學習中的特征工程可以參考上一篇文章)。如果距離小于某值,則認為是同一個人臉,反之亦然。

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

上圖顯示傳統機器學習方法中人臉對比的過程,過程相對來說比較複雜,需要提取合适的特征向量,該特征對原RGB人臉圖檔有一定代表性。基于深度學習的方式去做人臉對比就相對來說簡單很多,可以直接是一個端到端的流程:

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

當然也有的做法是先通過神經網絡提取人臉特征,然後再用傳統機器學習的方式去訓練類似SVM模型去做分類。

人臉表征檢測(五官定位)

一般人臉應用使用前面說到的‘人臉檢測’、‘人臉對比’兩種技術就足夠了,比如人臉打卡、人臉自動馬賽克、人臉開鎖等應用。但是更複雜的一些人臉應用隻有人臉檢測和對比是不夠的,比如後面要說的活體檢測、疲勞檢測等場景。這些時候不僅要判斷人臉的位置(矩形方框),還需要檢測出人臉五官位置,比如眉毛形狀、眼睛區域、鼻子位置、嘴巴位置等等,有了五官位置資料之後,我們就可以基于這些資料做一些更複雜的應用了,比如實時判斷視訊中的人是否眨眼、是否閉眼、是否說話、是否低頭擡頭等等。下圖為人臉表征檢測得到的結果:

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

上圖顯示通過機器學習提取到一張人臉表征的68個點,分别為:

(1)左眉毛5個點

(2)右眉毛5個點

(3)左眼睛6個點

(4)右眼睛6個點

(5)鼻梁4個點

(6)鼻尖5個點

(7)上嘴唇/下嘴唇20個點

(8)下巴17個點

我們可以通過下标(python中可以使用切片)快速擷取對應的坐标點,該坐标點代表臉部表征在原輸入圖檔中的實際位置(像素機關)。

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

眨眼檢測

對視訊每幀做人臉表征檢測,得到視訊每幀畫面中人臉五官的位置資料後,我們可以通過分析人眼區域(六個點組成一個閉合的橢圓形)的閉合程度來判斷是否發生眨眼,那麼如何衡量每個眼睛的閉合程度呢?根據前人研究:http://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdf可知,通過每隻眼的6個點即可判斷眼睛的閉合程度:

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

眼睛在打開到閉合時,下面這個表達式的值快速趨近于零:

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

上面表達式EAR(Eye Aspect Ratio)的值等于垂直方向兩個線段長度之和除以水準方向線段長度*2,這個值在閉眼的瞬間可以趨近于零,在睜眼的瞬間,恢複到原來值。EAR的變化過程如下圖所示:

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

我們隻需要監控EAR的值是否快速波動并且趨近于零來判斷是否閉眼,是否快速恢複來判斷是否睜眼。如果閉眼和睜眼時間間隔很短(隻占幾個視訊幀,每秒25幀算),那麼就認定為眨眼。

活體檢測

人臉應用中,為了防止人們使用照片等僞造人臉通過授權,一般都需要對畫面中的人臉進行活體過濾,即判斷目前視訊畫面中的人臉是否是真人,而不是照片等其他代替物。通過前面介紹的眨眼檢測技術,我們可以實作一個非常簡單的‘活體檢測’算法,算法每隔一個随機時間段(比如幾秒,時間不固定,防止人們錄制視訊來僞造)就要求視訊畫面中的人眨眼,如果畫面中的人積極配合算法發出的指令,那麼可以認為畫面中是真人,否則可能就是僞造人臉。

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

需要說明的是,活體檢測僅僅通過以上這種方式可能還不是足夠安全,一般還可以結合其他活體檢測技術,比如相機深層檢測、臉部光線檢測、以及利用深度學習技術直接對人臉進行二分類(活體/非活體)。

疲勞檢測

疲勞檢測這個應用場景太大了,比如可以用于長途汽車司機疲勞監控告警、值班人員疲勞監控告警等。主要原理還是通過前面介紹的眨眼檢測技術,将其稍微改進一下,我們就可以對閉眼進行檢測,如果閉眼超過一段時間(比如1秒),那麼就認為疲勞發生,發出告警。眨眼判斷很簡單,閉眼判斷更簡單,這些所有的判斷邏輯全部基于人臉表征提取的資料:

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測

需要明确的是,本文所有算法的準确性全部依賴于模型訓練的好壞,人臉檢測是否準确、人臉特征提取是否合适、人臉表征檢測結果是否準确。機器學習就是這樣,結果的好壞完全取決于模型訓練的好壞(特征提取的好壞)。比如本文這個demo中可以容易看到,人臉表征檢測對戴眼鏡的人臉效果不是很好,需要更多這方面的訓練資料。有問題的朋友請留言,感興趣的朋友請關注公衆号,分享原創CV/DL相關文章。

作者:周見智

出處:http://www.cnblogs.com/xiaozhi_5638/

首發公衆号,掃描二維碼關注公衆号,分享原創計算機視覺/深度學習/算法落地相關文章

[計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測