程衛(wèi)月
(黑龍江工商學(xué)院 黑龍江省哈爾濱市 150025)
人臉識(shí)別被認(rèn)為是認(rèn)證身份信息最好的技術(shù)之一,在眾多領(lǐng)域中均有應(yīng)用,人臉的可變性和相似性[1,2]給研究人員造成了許多難題,同時(shí)人臉圖像在復(fù)雜背景下,如光照等因素的干擾下,具有不易獲取性[3]。針對(duì)上述問題,主要針對(duì)人臉識(shí)別對(duì)光照的魯棒性實(shí)現(xiàn)了在實(shí)時(shí)視頻中識(shí)別人臉圖像,整個(gè)部分一共分為四部分,人臉檢測(cè),預(yù)處理,特征提取和分類識(shí)別。
AdaBoost算法[4]是用來訓(xùn)練出區(qū)分人臉圖像和非人臉圖像的弱分類器,通過弱分類器的加權(quán)組合從而得到強(qiáng)分類器,該算法需要和Haar-like特征、積分圖方法和級(jí)聯(lián)分類器[5]結(jié)合在一起,其中Haar-like特征主要用于檢測(cè);積分圖主要用來提高Haar-like特征值的計(jì)算速度;級(jí)聯(lián)分類器用來將強(qiáng)分類器串聯(lián)到一起,通過增加強(qiáng)分類器的個(gè)數(shù)來降低誤識(shí)率,通過降低強(qiáng)分類器的閾值來提高檢測(cè)率。
LBP算子[6]的基礎(chǔ)模型被定義在3×3鄰域內(nèi),位于鄰域中心的像素與其周圍臨近的8個(gè)像素進(jìn)行比較,如果周圍的像素值小于鄰域中心的像素值,則標(biāo)記為0,否則標(biāo)記為1,組成的最終結(jié)果用于表示鄰域中心像素的LBP值。
LBP算子的基礎(chǔ)模型,不僅固定了范圍而且覆蓋的區(qū)域比較小,所以在圓形LBP算子[7]中將正方形鄰域改進(jìn)為圓形鄰域,其周圍的采樣點(diǎn)在圖像中的坐標(biāo)可以根據(jù)其具體位置計(jì)算出,但是得到的坐標(biāo)未必是整數(shù),所以使用雙線性插值來得到該點(diǎn)的像素值。
最近鄰分類器[8]的基本思想是,在給定的測(cè)試樣本中,找出訓(xùn)練樣本中與之LBP特征值最靠近一個(gè)訓(xùn)練樣本,然后根據(jù)這個(gè)“鄰居”的特征進(jìn)行預(yù)測(cè)。使用卡方檢驗(yàn)[9]來計(jì)算輸入樣本與人臉庫圖像直方圖的最短距離。
在實(shí)時(shí)視頻中每10ms抓取一幀圖像,并利用MFC中的OnTime()函數(shù)來周期性的調(diào)用Haar檢測(cè)器進(jìn)行檢測(cè)。其檢測(cè)算法流程如下:
(1)灰度色彩轉(zhuǎn)換;
(2)收縮圖像:對(duì)獲取到大小為640×480的幀圖像進(jìn)行縮小兩倍操作;
(3)直方圖均衡化:通過equalizeHist()函數(shù)來實(shí)現(xiàn);
(4)檢測(cè)單個(gè)人臉:通過調(diào)用cvHaarDetectObjects()函數(shù)來實(shí)現(xiàn)檢測(cè)的過程,將幀圖像中最大的人臉,保存在矩形數(shù)組中。
(5)檢測(cè)人眼[10]:在保存人臉圖像的矩形數(shù)組中進(jìn)行檢測(cè),在檢測(cè)人眼時(shí),為提高檢測(cè)效率,需將檢測(cè)范圍縮小至人臉圖像的左上角和右上角。該方法提高了檢測(cè)的準(zhǔn)確率,但效率也隨之降低,所以根據(jù)實(shí)際情況來選擇是否進(jìn)行人眼檢測(cè)。
(6)標(biāo)記出人臉區(qū)域:根據(jù)上一步得到的矩形數(shù)組,利用每一矩形的坐標(biāo)來確認(rèn)標(biāo)記矩形的坐標(biāo)。
(7)得到新圖像,重復(fù)以上步驟。
應(yīng)用幾何變換、直方圖均衡化、平滑和橢圓掩碼來實(shí)現(xiàn)人臉圖像的預(yù)處理的過程。
幾何變換是為了將人臉對(duì)齊,根據(jù)兩眼之間的角度、兩眼之間的距離在人臉圖像中的比例、人眼與人臉圖像最上方的距離得到仿射矩陣,再利用仿射變換[11]公式得到幾何變換后的人臉圖像,其中仿射變換如公式(1)所示。
直方圖均衡化是為了增強(qiáng)圖像局部的對(duì)比,該過程是通過拉伸圖像中像素的強(qiáng)度來實(shí)現(xiàn)的。為了避免左右臉的光照不均勻的情況,分別對(duì)左臉、右臉進(jìn)行直方圖均衡化在與整個(gè)臉部融合。
平滑是用來減少人臉圖像中的像素噪聲,為了減少人臉圖像中像素噪聲的影響,在人臉圖像上使用雙邊濾波器來完成該操作。
橢圓掩碼的過程是繪制一個(gè)橢圓區(qū)域,將該橢圓區(qū)域應(yīng)用在人臉圖像中,為之后的特征提取刪除一些沒有用的人臉區(qū)域。
將人臉圖像劃分為8×8的子區(qū)域,對(duì)每個(gè)子區(qū)域提取LBP特征,首先根據(jù)采樣點(diǎn)的個(gè)數(shù)和位置確定每個(gè)采樣點(diǎn)的坐標(biāo),分別對(duì)每個(gè)采樣點(diǎn)進(jìn)行向上取整和向下取整,從而得到與采樣點(diǎn)最近的四個(gè)坐標(biāo),再利用雙線性插值來確定該采樣點(diǎn)的像素值,具體過程如公式(2)所示。
遍歷整個(gè)人臉圖像,比較采樣點(diǎn)像素值和鄰域中心的像素值來確定鄰域中心的LBP值,在遍歷圖像時(shí),為了防止圖像的溢出,對(duì)人臉圖像右側(cè)和下側(cè)寬為1的區(qū)域不進(jìn)行處理。
樣本訓(xùn)練:調(diào)用FaceRecognizer類的train(_in_src,_in_labels)函數(shù)進(jìn)行訓(xùn)練,其中_in_src表示人臉庫中經(jīng)預(yù)處理后的人臉圖像數(shù)組,_in_lables為_in_src對(duì)應(yīng)的標(biāo)簽數(shù)組,相同標(biāo)簽的人臉圖像表示是同一個(gè)人,該訓(xùn)練過程就是利用上述提取出人臉庫中的人臉圖像的特征,并保存在相應(yīng)的LBP直方圖中。
分類識(shí)別:人臉識(shí)別就是預(yù)測(cè)的過程,利用FaceRecognizer類的predict()函數(shù)進(jìn)行預(yù)測(cè),根據(jù)輸入的圖像返回人臉庫中某一圖像的標(biāo)簽號(hào),表示這個(gè)標(biāo)簽號(hào)對(duì)應(yīng)的人臉圖像與輸入的圖像最為相似,如果返回值為-1表示并沒有在人臉庫中找到該人臉圖像。該過程主要利用最近鄰分類器計(jì)算出輸入的圖像直方圖與人臉庫中的每一個(gè)人臉圖像直方圖的距離,計(jì)算過程如公式(3)所示,最終輸出距離最小的人臉圖像標(biāo)簽號(hào)。
開發(fā)環(huán)境選擇OpenCV3.0和MFC兩個(gè)環(huán)境實(shí)現(xiàn)的人臉識(shí)別,所有的功能都是在人臉庫中實(shí)現(xiàn)的,人臉庫的設(shè)計(jì)中,每一個(gè)文件夾內(nèi)包含了一個(gè)人的多張人臉圖像,并且同一個(gè)文件夾內(nèi)人臉圖像的標(biāo)簽號(hào)都是相同的。其中ORL人臉數(shù)據(jù)庫,一共包含40個(gè)不同的人,每人的10張圖像都是通過改變面部表情和拍攝角度獲得的,并且所有的人臉圖像維持在20%的尺度變化,選取每人的5張人臉圖像用于訓(xùn)練,另外的5張人臉圖像用于測(cè)試。對(duì)于筆者自己的數(shù)據(jù)庫是通過在實(shí)時(shí)視頻中拍照獲取的,每個(gè)文件夾內(nèi)包含了同一個(gè)人臉圖像,大致在5張左右。
人臉檢測(cè)的過程是檢測(cè)實(shí)時(shí)視頻中最大的人臉區(qū)域,并用矩形標(biāo)記出該人臉區(qū)域,具體結(jié)果如圖1所示。
圖1:人臉檢測(cè)結(jié)果圖
對(duì)人臉庫中的所有人臉圖像進(jìn)行預(yù)處理,并將結(jié)果保存在預(yù)處理文件夾內(nèi)。部分人臉圖像經(jīng)預(yù)處理之后的結(jié)果如圖2所示。
圖2:預(yù)處理結(jié)果圖
對(duì)人臉庫中的所有人臉圖像進(jìn)行特征提取操作,并將結(jié)果保存在特征提取文件夾內(nèi)。部分人臉圖像經(jīng)過特征提取后的結(jié)果如圖3所示。
圖3:體征提取結(jié)果圖
根據(jù)人臉庫的訓(xùn)練結(jié)果或模型對(duì)實(shí)時(shí)視頻中檢測(cè)到的人臉圖像進(jìn)行識(shí)別,并輸出人臉庫中與之最為相似的人臉名字,人臉識(shí)別的結(jié)果如圖4所示。
圖4:人臉識(shí)別結(jié)果圖
為了驗(yàn)證本系統(tǒng)的性能,在多種環(huán)境下對(duì)其進(jìn)行了測(cè)試。在整個(gè)過程中,保證實(shí)時(shí)視頻中出現(xiàn)的人臉均來自本文的人臉庫,其中絕大部分人臉都是正臉,并且臉部基本不存在遮擋物。人臉檢測(cè)結(jié)果如表1所示,表示了不同檢測(cè)器情況下的檢測(cè)時(shí)間,最終檢測(cè)結(jié)果可以看出haarcascade_frontalface_alt2.xml(本文采用的檢測(cè)器)檢測(cè)率最高、誤檢率最低并且檢測(cè)時(shí)間最少。
表1:不同檢測(cè)器的檢測(cè)對(duì)比
人臉識(shí)別的實(shí)驗(yàn)共進(jìn)行三次,每次進(jìn)行識(shí)別的人臉是隨機(jī)的,由于從人臉檢測(cè)到人臉識(shí)別都是在實(shí)時(shí)視頻的環(huán)境下實(shí)現(xiàn)的,所以在人臉角度稍有改變可能都使人臉識(shí)別的結(jié)果改變,所以規(guī)定在5秒內(nèi)出現(xiàn)人臉識(shí)別結(jié)果出現(xiàn)次數(shù)最多的作為本次最終的人臉識(shí)別結(jié)果,該人臉識(shí)別的最終測(cè)試結(jié)果如表2所示。
雖然使用的訓(xùn)練樣本比較少,但是表2的結(jié)果表明了它在一定程度上具有較高的識(shí)別率,只有在夜晚室外也就是光線較弱的條件下,表現(xiàn)出來的結(jié)果才稍差一些,雖然LBP算子在一定程度上解決了光照條件的問題,但是在光線很弱的情況下,人臉的紋理特征丟失比較嚴(yán)重,導(dǎo)致此時(shí)的識(shí)別率無法達(dá)到預(yù)期的效果。
根據(jù)表2的數(shù)據(jù)結(jié)果,可以得到本系統(tǒng)識(shí)別率為89.09%,平均識(shí)別時(shí)間為103.51毫秒,這一數(shù)據(jù)表明了本實(shí)時(shí)視頻系統(tǒng)的人臉識(shí)別檢測(cè)率和識(shí)別率都比較高,在生活中具有一定的實(shí)用性。
表2:人臉識(shí)別性能測(cè)試表
針對(duì)人臉識(shí)別在光照條件下的魯棒性問題進(jìn)行研究,主要實(shí)現(xiàn)了基于AdaBoost算法的人臉檢測(cè), AdaBoost算法可以根據(jù)訓(xùn)練樣本訓(xùn)練出若干個(gè)的弱分類器,并將這些弱分類器加權(quán)組合成更強(qiáng)的強(qiáng)分類器,最終的檢測(cè)結(jié)果利用矩形標(biāo)記出來。實(shí)現(xiàn)了基于LBP算子的特征提取,圓形LBP算子具有的最大優(yōu)點(diǎn)是灰度不變性,通過比較鄰域中心與周圍像素的關(guān)系,避免了光照變化帶來的灰度影響;實(shí)現(xiàn)了基于最近鄰分類器的分類識(shí)別,在訓(xùn)練樣本中找到和測(cè)試樣本距離最近的樣本特征來完成預(yù)測(cè),最終的識(shí)別結(jié)果在檢測(cè)到的人臉圖像的右上方標(biāo)記出來。