讀古今文學網 > 刷臉背後:人臉檢測 人臉識別 人臉檢索 > 4.1 CNN Facial Point Detection人臉檢測算法 >

4.1 CNN Facial Point Detection人臉檢測算法

CNN Facial Point Detection人臉檢測算法,是由Yi Sun等人[1]在2013年提出的。該算法主要是實現面部關鍵點的檢測,運行速度快、執行效率高,可以檢測側臉。但如果一張圖片被檢測到多個人臉,那麼在執行面部關鍵點檢測前需要手動處理,比較煩瑣。此外,由於Yi Sun等人只提供了算法的.exe可執行文件(只能運行在Windows平台上),所以本部分的實驗只能在Windows操作系統上運行,更多內容可以參考文獻[2]。本書提供的程序是調用文獻[2]中的Face detector程序的可執行文件,並進一步處理。在本部分,我們實驗的主要功能是人臉檢測,不考慮面部關鍵點檢測。

4.1.1 CNN Facial Point Detection人臉檢測算法的使用

該算法需要在Visual Studio上配置OpenCV視覺庫才能運行,本書實現的程序是在Visual Studio 2010和OpenCV2.4.9上進行測試的,該項目對應的名稱為:facedetect_ windows。

打開facedet_winds.sln後,還要進行一些配置修改,具體如下。

· 在項目上單擊鼠標右鍵,選擇「屬性」→「配置屬性」→「VC++目錄」→「包含目錄和庫目錄」進行修改,修改為自己計算機的OpenCV對應的路徑。

· 如果你使用的不是OpenCV2.4.9,則還需要在項目上單擊鼠標右鍵,選擇「屬性」→「配置屬性」→「連接器」→「輸入」→「附加依賴項」進行修改。

檢測圖片在code_face\image文件夾下。

檢測結果在result\文件夾下。

讀者可根據實際情況,修改存放檢測圖片和檢測結果的路徑。

修改存放檢測圖片的路徑:將code_face/imagelist.txt的內容修改為檢測圖片的路徑和圖片名,第一行指定檢測的圖片個數,接下來每一行是一個檢測圖片的路徑。

修改存放檢測結果的路徑:修改detect_windows.cpp的filename。

選擇主函數facedection.cpp,按「F5」鍵或者單擊「運行」按鈕,就可以使用CNN Facial Point Detection人臉檢測算法進行人臉檢測。

4.1.2 CNN Facial Point Detection人臉檢測算法的原理

Yi Sun等人提出的算法本質上是檢測面部關鍵點的,檢測出左眼中心、右眼中心、鼻子尖、嘴部左角和嘴部右角,使用了三層卷積網絡。為了檢測效果的準確性和魯棒性,在第一層使用整個面部區域的所有信息進行特徵提取,從而得到較準確的初始估計位置。第二、三層是對初始的估計位置進行調整,達到更高的準確率。它和許多商業軟件及最新算法進行對比,獲得了很好的檢測結果。

CNN Facial Point Detection人臉檢測算法主要包括兩部分,第一部分是使用人臉檢測器檢測人臉,標記出邊界框,即文獻[2]中的Face detector;第二部分是以邊界框作為輸入檢測出面部關鍵點的位置,即文獻[2]中的Point detector。本書中使用該算法的第一部分進行人臉檢測。

我們在主函數facedection.cpp中,通過如下語句調用code_face的可執行文件,進行人臉檢測。

生成bbox.txt文件,該文件中每一行包含:圖片名及對應的人臉檢測框。每個人臉檢測框由四個數據組成,分別對應left、right、top、bottom。然後讀取bbox.txt文件,對每張圖片進行人臉標記。

4.1.3 CNN Facial Point Detection人臉檢測算法的檢測結果

經過測試發現,無論檢測圖片的尺寸大或者小,該算法的運行時間都較短,檢測效果好、噪聲少,同時可以檢測側臉,但不能很好地檢測如圖3-4(e)所示的那類圖片。遺憾的是,作者僅公開了可執行程序,而源程序並未開源。在圖4-1中,我們呈現了一些有代表性的圖片的檢測結果。

圖4-1 CNN Facial Point Detection人臉檢測算法的檢測結果