人臉是一個常見而複雜的視覺模式,人臉所反映的視覺信息在人與人的交流和交往中有着重 要的做用和意義,對人臉進行處理和分析在視頻監控、出入口控制、視頻會議以及人機交互等領 域都有着普遍的應用前景,所以是模式識別和計算機視覺領域持續的研究熱點。算法
本系統在 FriendlyARM Tiny6410 開發板基礎上,利用 OpenCV 計算機視覺庫和 QT 圖形庫,通 過普通的 USB 攝像頭實現了自動人臉識別,準確率較高,方便易用。數據庫
「人臉識別」大體可分爲兩個階段:架構
1. 人臉檢測 搜索一幅圖像,尋找一切人臉區域(此處以綠色矩形顯示),而後進行圖像處理,清理臉部圖像以便於更好地識別。ide
2. 人臉識別 把上一階段檢測處理獲得的人臉圖像與數據庫中的已知 人臉進行比對,斷定人臉對應的人是誰(此處以白色文本顯示)。函數
系統運行時,自動從 USB 攝像頭獲取 YUV 格式的圖片,轉換成 QImage 格式並實時顯示在 LCD屏上,再將其轉換成 IplImage 格式,利用 OpenCV 的 Haar Cascade Face Detector(也稱爲 Viola-Jones 方法)進行人臉檢測,獲得一個矩形區域,截取該矩形區域圖像進行直方圖均衡化處理,進行訓練或識別。測試
系統訓練流程:spa
點擊觸摸屏上的按鈕獲取一幀圖片,由訓練者判斷是否加入訓練集。當訓練集圖片足夠後, 點擊訓練按鈕,即便用 PCA 方法處理訓練集中的人臉圖片,生成 XML 文件。設計
系統識別流程:orm
點擊觸摸屏上的按鈕,進入識別狀態。獲得上述的人臉區域圖像後,讀取 XML 文件,使用PCA 方法將圖像與數據庫比對,若可信度超過閾值,則在屏幕上顯示出人名。視頻
攝像頭可獲取多幅圖像以提升準確度和可靠性,咱們採集多幅圖像求可信度平均值與閾值比 較,若可信度平均值大於閾值,則登陸系統成功,經過串口發送信號並彈出對話框提示信息;若 在規定時間內未登陸成功,則記錄訪問者的人臉並提示登陸失敗。
多分類器級聯結構是不少強分類器的組合,其結構以下圖所示:
它是一種由粗到細的結構,其中每一層是 AdaBoost 算法訓練獲得的一個強分類器,都通過閾 值調整,使得每一層能讓所有正例樣本經過,而拒絕很大一部分非人臉樣本。
本做品使用 OpenCV 中的檢測器,使用其自帶的一個 XML 文件執行檢測。
PCA 方法由 Turk 和 Pentlad 首先提出,它的基礎就是 Karhunen-Loeve 變換(簡稱 KL 變換)。 一幅人臉圖像(假設爲 50x50 像素)是一個 2500 維空間的數據點,咱們利用 PCA 方法將全部人臉 圖像數據點投影到 PCA 子空間中進行降維和特徵提取。
相對於歐式距離,利用馬氏距離做爲人臉圖像間的距離識別效果較好,但因爲本做品主要用 於判斷待測人臉是否爲數據庫中人臉,可信度的計算方法極爲關鍵,而目前最好的可信度的計算 方程是基於歐式距離的:
float confidence = 1.0f – sqrt( it→distance /
(float) (trainFacesNum * eigenVectorsNum) ) / 255.0f;
故本做品仍採用歐式距離。
OpenCV 的人臉檢測器獲取到人臉圖像後,使用直方圖均衡化進行圖像的預處理,而後調用OpenCV 的庫函數進行識別,用上述公式計算出待測人臉可信度。
第 1~4 次測試中,人臉數據庫中只有 ORL 數據庫的四我的和 A 的人臉數據,此時 B、C 均爲「陌生人」,只有 A 能登陸系統。
第 5~9 次測試中,人臉數據庫中增長了 B 的數據,此時只有 C 爲「陌生人」,A、B 都可登 錄系統。
本做品以友善之臂的 Tiny6410 開發板爲平臺,使用普通的 USB 攝像頭,設計了一個自動人臉識別系統。系統實現了訓練、識別人臉的功能,並在實驗室環境下完成了測試。
經測試,使用者在未訓練時沒法登陸系統,其可信度與人臉數據庫中已有人員的可信度有一 定差值,能夠區分數據庫內外人臉。使用者通過訓練後便可登陸系統。
利用攝像頭能夠連續獲取圖像的特性,本做品屢次計算可信度取平均值的方法必定程度上提升了識別的可靠性。
固然,本做品仍有不少不足的地方,好比因爲驅動程序不完善,單靠軟件實現的圖像採集速度較慢,致使實時性不高;以及未實現活體檢測,存在使用主人照片登陸系統的可能。