使用DLIB函式庫達成即時人臉辨識功能

 1. 研究動機

在大二上學期時,想要做出一個人臉門禁系統,在網路搜尋時,搜尋到Dlib這個函式庫,他提供了眾多的預訓練模型,本作品使用Dlib函式庫搭配tkinter套件製作GUI,並且用到了本課程教的陣列運算,達成即時人臉辨識的功能。

2.研究步驟

2.1系統流程圖

圖一 系統流程圖

2.2獲得人臉位置

在一張圖像中,我們要先辨識圖片中的人臉及其位置,在Dlib函式庫中,是以CNN的方法來獲得人臉的位置,Dlib提供了已經訓練好的模型,在程式中只要使用dlib.cnn_face_detection_model_v1函式即可使用此模型,在該步驟中,此函式可以回傳檢測到人臉的數量以及座標。

圖二 獲得人臉位置功能圖例

2.3獲得人臉關鍵點

在獲得人臉的數量以及座標之後,由於人臉有許多的器官,例如鼻子、眉毛等等,Dlib規範了68個人臉的關鍵點,使用dlib.shape_predictor函式可以得到人臉68點關鍵點的座標,以更好的辨識人臉。

圖三 獲得人臉關鍵點功能圖例

2.4獲得人臉特徵向量

在人臉辨識中,最後需要將所辨識到的人臉轉成特徵向量,才可以快速地比較,如果是將人臉以圖像的方式比對,將會耗費很多的資源,在Dlib中作者提供了使用29ResNet訓練而成的模型,在輸入了圖片以及關鍵點後dlib.face_recognition_model_v1這個函示會輸出128維的特徵向量,用來跟資料庫的特徵向量做比對。


圖四 獲得人臉特徵向量功能圖例

2.5比對相似人臉

獲得人臉特徵相量後,必須與資料庫的特徵向量比對,比對方法為先將人臉特徵向量減去資料庫的向量再取歐式距離,擁有最小歐式距離並且歐式距離小於自訂閾值的人臉標籤即是系統辨識出之人臉。

3.實驗結果

GTX1050顯示卡運算下,在640x480的尺寸中,將1幀畫面辨識出其中人臉,耗時僅0.1秒,是可以達到串流功能的,以下是靜態的執行畫面。

圖五程式執行畫面程式動態影片(google雲端)

4.結論

Dlib中,使用CNN作為人臉偵測的方法,CNN的方法雖然精度很高,但是需要的運算效能非常多,在像是樹梅派嵌入式系統,是不能達成即時的辨識的,在整個人臉辨識完成的步驟裡,dlib.CNN_face_detection_model_v1這個函式佔了90%以上的時間,因此這個步驟是需要解決的,推測可以使用haarHOG等不需要CNN的人臉檢測方法來大幅降低所需時間。





留言

這個網誌中的熱門文章

以dlib實現人臉辨識打卡系統

以python讀取yolo的輸出-darknet.py

使用Python達成影像形態學處理(不使用Opencv函式庫)