摘要:近年來,人臉識別技術已經由弱人工智能向強人工智能轉化,隨著人臉識別算法的不斷改進,人臉識別技術已經在公安、金融等部門得到了廣泛應用。本文提出了一種Python語言利用Dlib第三方庫實現基于深度學習的人臉識別方法。
關鍵詞:Python;Dlib;人臉識別
1、人臉識別技術概述
人臉識別技術是一種基于圖像識別,是根據人臉的特征信息進行身份判定的技術,它經過了幾十年的發展已經由弱人工智能向強人工智能轉化,隨著人臉識別算法的不斷改進,人臉識別技術已經成為人工智能領域的重要應用。目前人臉識別技術已經比較成熟,得到了公安金融等部門的廣泛應用。(1)公安部門:通過相片匹配戶籍數據,尋找目標對象。(2)安防領域:通過人臉識別對重點管控區域人員的身份識別,在公共場所對人群進行監視,以達到身份識別的目的,例如在機場、車站等人流量大的場所,通過智能監控系統識別犯罪分子。(3)金融領域:利用人臉識別實現交易支付,例如支付寶實名認證用戶可通過刷臉支付。
2、人臉識別的過程
人臉識別是一個比較復雜的過程,歸納起來可以由五個步驟組成:人臉檢測、人臉關鍵點檢測、人臉規整、人臉特征提取、人臉識別,人臉識別的過程如圖1所示。不同技術會采用不同的方法來實現人臉面部特征的抽象,比如Harmon和Lesk采用多維特征矢量來表示,而Kaya和Kobayashi則采用歐氏距離來表示,本文第三部分提到的Dlib庫則是基于深度學習,利用已經訓練好的人臉關鍵點檢測器和人臉識別模型,得到人臉面部特征值。
3、Dlib庫介紹
近些年,Python語言發展迅猛,在很多開發語言排行榜名列前三名。Python語言能夠得到這么快的發展,得益于其源代碼開源性和代碼開發的高效性。Python社區提供了大量的第三方庫,它們能夠實現科學計算、數據可視化、數據分析等多個領域,Dlib庫就是一個知名的第三方庫,能夠實現人臉檢測和識別,其算法采用HOG特征與級聯分類器,算法的實現大概過程有:(1)將圖像灰度化。(2)采用Gamma校正法對圖像進行顏色空間的標準化。(3)對每個圖像像素進行梯度計算。(4)對圖像進行小單元格劃分。(5)生成每個單元格的梯度直方圖。(6)把單元格組合成大的塊,塊內歸一化梯度直方圖。(7)生成HOG特征描述向量。
4、Python利用Dlib庫實現人臉識別
4.1 前期準備
(1)安裝好Dlib第三方庫。
(2)下載人臉識別模型和人臉關鍵點檢測器,分別保存為文件1.dat和2.dat(可從網址http://dlib.net/files/下載)。
(3)準備好已知人臉相片和待識別人臉相片,本例準備已知人臉相片20張存放在Faces文件夾中,待識別人臉2張,其中test01.jpg和Faces文件夾中的第19張相片是同一個人,test02.jpg和Faces文件夾中的第7張相片是同一個人,主程序為testface.py,整個文件夾如圖2所示。
4.2 實現過程
實現過程主要有三個步驟:根據人臉識別模型和人臉關鍵點檢測器,得到已知人臉相片的特征值庫;根據人臉識別模型和人臉關鍵點檢測器,得到待識別人臉相片的特征值;計算待識別人臉相片的特征值和特征值庫的歐式距離,距離最小者就是參考識別結果。程序的實現主要包括以下三個子函數,fun1函數功能是得到一張相片的特征值,fun2函數功能是得到多張相片的特征值庫,fun3函數功能是計算待識別人臉相片的特征值和特征值庫的歐式距離,輸出距離最小者為參考識別結果。
(1)fun1函數代碼如下,例如執行fun1(test01. jpg)就可以得到以下128個特征值,結果如表1所示。
(2)fun2函數代碼如下。
(3)fun3函數代碼如下。
(4)主程序代碼如下。
主程序分別用test01.jpg和test02.jpg相片進行測試,測試結果均正確,都能識別出與test01.jpg和test02.jpg匹配的相片,測試結果圖3所示。
5、結束語
本方法實現了人臉識別的功能,但由于每張相片有128個特征值,如果已知人臉相片較多,特征值庫較大,計算歐式距離所用時間較長,還要改進算法,需要引進并行計算等技術,提高人臉識別效率。
作者簡介:張枝令,寧德師范學院信息與機電工程學院,副教授,研究方向:計算機網絡、數據挖掘和大數據。