程衛月
(黑龍江工商學院 黑龍江省哈爾濱市 150025)
人臉識別被認為是認證身份信息最好的技術之一,在眾多領域中均有應用,人臉的可變性和相似性[1,2]給研究人員造成了許多難題,同時人臉圖像在復雜背景下,如光照等因素的干擾下,具有不易獲取性[3]。針對上述問題,主要針對人臉識別對光照的魯棒性實現了在實時視頻中識別人臉圖像,整個部分一共分為四部分,人臉檢測,預處理,特征提取和分類識別。
AdaBoost算法[4]是用來訓練出區分人臉圖像和非人臉圖像的弱分類器,通過弱分類器的加權組合從而得到強分類器,該算法需要和Haar-like特征、積分圖方法和級聯分類器[5]結合在一起,其中Haar-like特征主要用于檢測;積分圖主要用來提高Haar-like特征值的計算速度;級聯分類器用來將強分類器串聯到一起,通過增加強分類器的個數來降低誤識率,通過降低強分類器的閾值來提高檢測率。
LBP算子[6]的基礎模型被定義在3×3鄰域內,位于鄰域中心的像素與其周圍臨近的8個像素進行比較,如果周圍的像素值小于鄰域中心的像素值,則標記為0,否則標記為1,組成的最終結果用于表示鄰域中心像素的LBP值。
LBP算子的基礎模型,不僅固定了范圍而且覆蓋的區域比較小,所以在圓形LBP算子[7]中將正方形鄰域改進為圓形鄰域,其周圍的采樣點在圖像中的坐標可以根據其具體位置計算出,但是得到的坐標未必是整數,所以使用雙線性插值來得到該點的像素值。
最近鄰分類器[8]的基本思想是,在給定的測試樣本中,找出訓練樣本中與之LBP特征值最靠近一個訓練樣本,然后根據這個“鄰居”的特征進行預測。使用卡方檢驗[9]來計算輸入樣本與人臉庫圖像直方圖的最短距離。
在實時視頻中每10ms抓取一幀圖像,并利用MFC中的OnTime()函數來周期性的調用Haar檢測器進行檢測。其檢測算法流程如下:
(1)灰度色彩轉換;
(2)收縮圖像:對獲取到大小為640×480的幀圖像進行縮小兩倍操作;
(3)直方圖均衡化:通過equalizeHist()函數來實現;
(4)檢測單個人臉:通過調用cvHaarDetectObjects()函數來實現檢測的過程,將幀圖像中最大的人臉,保存在矩形數組中。
(5)檢測人眼[10]:在保存人臉圖像的矩形數組中進行檢測,在檢測人眼時,為提高檢測效率,需將檢測范圍縮小至人臉圖像的左上角和右上角。該方法提高了檢測的準確率,但效率也隨之降低,所以根據實際情況來選擇是否進行人眼檢測。
(6)標記出人臉區域:根據上一步得到的矩形數組,利用每一矩形的坐標來確認標記矩形的坐標。
(7)得到新圖像,重復以上步驟。
應用幾何變換、直方圖均衡化、平滑和橢圓掩碼來實現人臉圖像的預處理的過程。
幾何變換是為了將人臉對齊,根據兩眼之間的角度、兩眼之間的距離在人臉圖像中的比例、人眼與人臉圖像最上方的距離得到仿射矩陣,再利用仿射變換[11]公式得到幾何變換后的人臉圖像,其中仿射變換如公式(1)所示。

直方圖均衡化是為了增強圖像局部的對比,該過程是通過拉伸圖像中像素的強度來實現的。為了避免左右臉的光照不均勻的情況,分別對左臉、右臉進行直方圖均衡化在與整個臉部融合。
平滑是用來減少人臉圖像中的像素噪聲,為了減少人臉圖像中像素噪聲的影響,在人臉圖像上使用雙邊濾波器來完成該操作。
橢圓掩碼的過程是繪制一個橢圓區域,將該橢圓區域應用在人臉圖像中,為之后的特征提取刪除一些沒有用的人臉區域。
將人臉圖像劃分為8×8的子區域,對每個子區域提取LBP特征,首先根據采樣點的個數和位置確定每個采樣點的坐標,分別對每個采樣點進行向上取整和向下取整,從而得到與采樣點最近的四個坐標,再利用雙線性插值來確定該采樣點的像素值,具體過程如公式(2)所示。

遍歷整個人臉圖像,比較采樣點像素值和鄰域中心的像素值來確定鄰域中心的LBP值,在遍歷圖像時,為了防止圖像的溢出,對人臉圖像右側和下側寬為1的區域不進行處理。
樣本訓練:調用FaceRecognizer類的train(_in_src,_in_labels)函數進行訓練,其中_in_src表示人臉庫中經預處理后的人臉圖像數組,_in_lables為_in_src對應的標簽數組,相同標簽的人臉圖像表示是同一個人,該訓練過程就是利用上述提取出人臉庫中的人臉圖像的特征,并保存在相應的LBP直方圖中。
分類識別:人臉識別就是預測的過程,利用FaceRecognizer類的predict()函數進行預測,根據輸入的圖像返回人臉庫中某一圖像的標簽號,表示這個標簽號對應的人臉圖像與輸入的圖像最為相似,如果返回值為-1表示并沒有在人臉庫中找到該人臉圖像。該過程主要利用最近鄰分類器計算出輸入的圖像直方圖與人臉庫中的每一個人臉圖像直方圖的距離,計算過程如公式(3)所示,最終輸出距離最小的人臉圖像標簽號。

開發環境選擇OpenCV3.0和MFC兩個環境實現的人臉識別,所有的功能都是在人臉庫中實現的,人臉庫的設計中,每一個文件夾內包含了一個人的多張人臉圖像,并且同一個文件夾內人臉圖像的標簽號都是相同的。其中ORL人臉數據庫,一共包含40個不同的人,每人的10張圖像都是通過改變面部表情和拍攝角度獲得的,并且所有的人臉圖像維持在20%的尺度變化,選取每人的5張人臉圖像用于訓練,另外的5張人臉圖像用于測試。對于筆者自己的數據庫是通過在實時視頻中拍照獲取的,每個文件夾內包含了同一個人臉圖像,大致在5張左右。
人臉檢測的過程是檢測實時視頻中最大的人臉區域,并用矩形標記出該人臉區域,具體結果如圖1所示。

圖1:人臉檢測結果圖
對人臉庫中的所有人臉圖像進行預處理,并將結果保存在預處理文件夾內。部分人臉圖像經預處理之后的結果如圖2所示。

圖2:預處理結果圖
對人臉庫中的所有人臉圖像進行特征提取操作,并將結果保存在特征提取文件夾內。部分人臉圖像經過特征提取后的結果如圖3所示。

圖3:體征提取結果圖
根據人臉庫的訓練結果或模型對實時視頻中檢測到的人臉圖像進行識別,并輸出人臉庫中與之最為相似的人臉名字,人臉識別的結果如圖4所示。

圖4:人臉識別結果圖
為了驗證本系統的性能,在多種環境下對其進行了測試。在整個過程中,保證實時視頻中出現的人臉均來自本文的人臉庫,其中絕大部分人臉都是正臉,并且臉部基本不存在遮擋物。人臉檢測結果如表1所示,表示了不同檢測器情況下的檢測時間,最終檢測結果可以看出haarcascade_frontalface_alt2.xml(本文采用的檢測器)檢測率最高、誤檢率最低并且檢測時間最少。

表1:不同檢測器的檢測對比
人臉識別的實驗共進行三次,每次進行識別的人臉是隨機的,由于從人臉檢測到人臉識別都是在實時視頻的環境下實現的,所以在人臉角度稍有改變可能都使人臉識別的結果改變,所以規定在5秒內出現人臉識別結果出現次數最多的作為本次最終的人臉識別結果,該人臉識別的最終測試結果如表2所示。
雖然使用的訓練樣本比較少,但是表2的結果表明了它在一定程度上具有較高的識別率,只有在夜晚室外也就是光線較弱的條件下,表現出來的結果才稍差一些,雖然LBP算子在一定程度上解決了光照條件的問題,但是在光線很弱的情況下,人臉的紋理特征丟失比較嚴重,導致此時的識別率無法達到預期的效果。
根據表2的數據結果,可以得到本系統識別率為89.09%,平均識別時間為103.51毫秒,這一數據表明了本實時視頻系統的人臉識別檢測率和識別率都比較高,在生活中具有一定的實用性。

表2:人臉識別性能測試表
針對人臉識別在光照條件下的魯棒性問題進行研究,主要實現了基于AdaBoost算法的人臉檢測, AdaBoost算法可以根據訓練樣本訓練出若干個的弱分類器,并將這些弱分類器加權組合成更強的強分類器,最終的檢測結果利用矩形標記出來。實現了基于LBP算子的特征提取,圓形LBP算子具有的最大優點是灰度不變性,通過比較鄰域中心與周圍像素的關系,避免了光照變化帶來的灰度影響;實現了基于最近鄰分類器的分類識別,在訓練樣本中找到和測試樣本距離最近的樣本特征來完成預測,最終的識別結果在檢測到的人臉圖像的右上方標記出來。