劉亮
摘 要 人臉識(shí)別是公共安全領(lǐng)域的研究重點(diǎn)。本文首先通過分析比較,采用基于Adaboost的算法檢測(cè)人臉,基于LDP的特征臉?biāo)惴▽?shí)現(xiàn)特征提取和特征識(shí)別。然后選擇OpenCV計(jì)算機(jī)視覺庫來實(shí)現(xiàn)人臉檢測(cè)和人臉識(shí)別。最后,通過JNI調(diào)用本地OpenCV代碼實(shí)現(xiàn)Android平臺(tái)的人臉識(shí)別系統(tǒng)。
【關(guān)鍵詞】Android平臺(tái) 人臉檢測(cè) 人臉識(shí)別系統(tǒng)
1 引言
近年來,信息安全越來越受到人們關(guān)注,身份驗(yàn)證和識(shí)別技術(shù)成為眾人矚目的焦點(diǎn),生物特征識(shí)別技術(shù)和人工智能技術(shù)不斷更新發(fā)展,其中,人臉識(shí)別技術(shù)因具有并發(fā)性、非接觸性、非強(qiáng)制性、操作簡(jiǎn)單等特點(diǎn),被越來越廣泛地運(yùn)用到各個(gè)領(lǐng)域中。Android系統(tǒng)是目前移動(dòng)設(shè)備的主流操作系統(tǒng)之一,在移動(dòng)操作系統(tǒng)市場(chǎng)份額中占據(jù)了主導(dǎo)地位。隨著人們?cè)谝苿?dòng)領(lǐng)域信息安全意識(shí)的提高,在移動(dòng)平臺(tái)上進(jìn)行人臉識(shí)別具有廣闊的發(fā)展前景,同時(shí)也面臨諸多挑戰(zhàn)。本文結(jié)合Android移動(dòng)終端的特點(diǎn),研究基于Android的人臉識(shí)別系統(tǒng)的實(shí)現(xiàn),更好地滿足移動(dòng)領(lǐng)域信息安全方面的市場(chǎng)需求。
2 人臉識(shí)別原理
人臉識(shí)別技術(shù)是一種基于生理特征的識(shí)別技術(shù),通過計(jì)算機(jī)提取人臉特征,并根據(jù)這些特征進(jìn)行身份驗(yàn)證的一種技術(shù)。廣義的人臉識(shí)別過程包括人臉圖像采集及預(yù)處理、人臉檢測(cè)與特征提取和人臉的對(duì)比與識(shí)別三大部分,其原理如圖1所示。
人臉檢測(cè)的算法有很多種,典型的有特征抽取算法、人臉小波檢測(cè)、基于模板匹配、神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)方法、Adaboost算法等。本文選擇Adaboost算法實(shí)現(xiàn)人臉檢測(cè)。人臉識(shí)別技術(shù)包括特征提取和特征識(shí)別,實(shí)現(xiàn)方法可概括為3類:基于幾何特征方法(歐式距離判別法)、基于模板方法(特征臉方法、神經(jīng)網(wǎng)絡(luò)方法等)和基于模型方法(隱馬爾科夫方法)。本文選擇基于LDP的特征臉?biāo)惴▽?shí)現(xiàn)人臉特征提取與特征識(shí)別。
3 人臉識(shí)別算法
3.1 圖像預(yù)處理
現(xiàn)實(shí)生活應(yīng)用人臉檢測(cè)與識(shí)別系統(tǒng)時(shí),人臉的圖像是在各種隨機(jī)的場(chǎng)景下由攝像頭或照相機(jī)拍攝的,因此受到光照變化、背景色彩、設(shè)備質(zhì)量以及人臉姿態(tài)等因素的影響,需要對(duì)其進(jìn)行預(yù)處理,主要包括光照補(bǔ)償、濾波去噪處理和幾何歸一化的處理,經(jīng)過這些處理,后期操作中將得到較好的識(shí)別效果。
首先定位人眼。為了提高定位效率,先確定人眼在人臉圖像中的大概位置,然后基于這個(gè)大致的范圍,采用灰度積分投影和灰度差分積分投影相結(jié)合的方法精確定位人眼:
M(y)=kphori(y)- Dhori(y)
其中,k為系數(shù),K phori(y)為灰度積分投影,Dhori(y)為灰度差分積分投影。
其次是臉部圖像的幾何變換和剪裁,根據(jù)所檢測(cè)到的人眼位置,通過圖像旋轉(zhuǎn)、剪裁、縮放等手段,使得臉部圖像中人眼是對(duì)齊的且不包含背景、額頭、耳朵和下巴,并將處理后的臉部圖像縮放到70×70固定大小。
再次是分離直方圖均衡,這個(gè)過程能夠使得每一個(gè)臉部圖像都具有相同的對(duì)比度以及亮度。
最后是圖像平滑,圖像平滑能夠有效地減少圖像的噪聲。
3.2 人臉檢測(cè)
自適應(yīng)增強(qiáng)(adaptive boosting,AdaBoost)是一種需要監(jiān)督的機(jī)器學(xué)習(xí)算法。特征選取和特征計(jì)算決定了AdaBoost算法的運(yùn)行速度。Viola等人提出了基于Haar特征的AdaBoost人臉檢測(cè)算法。本文使用Haar 特征進(jìn)行特征提取。
基于特征的檢測(cè)能對(duì)選定區(qū)域的狀態(tài)進(jìn)行編碼。矩形特征是對(duì)輸入圖像使用矩形進(jìn)行提取特征。Haar特征是一些由黑白矩形組成的特征,臉部的一些特性可以用矩形特征簡(jiǎn)單地描述,矩形特征值是兩個(gè)不同的矩形區(qū)域像素和之差。如果圖像特征表示眼睛的顏色比臉頰上端的顏色深??梢杂锰卣髦祦砭幋a特征,特征值定義為:
V=Sum黑-Sum白
其中,Sum黑、Sum白分別表示黑色和白色矩形覆蓋區(qū)域的像素和。
使用Viola等人提出的積分圖像的概念,可加快矩形特征的計(jì)算速度。進(jìn)而計(jì)算出Haar特征的特征值,定義積分圖中位置(x,y)處的值為待測(cè)圖像位置(x,y)處的上方和左側(cè)所有像素之和。
S(x,y)=s(x,y?1)+i(x,y)
C(x,y)=c(x?1,y)+s(x,y)
其中,c(x,y)為積分圖在(x,y)點(diǎn)處的值,i(x,y)為原圖像素點(diǎn)(x,y)處的灰度值,s(x,y)表示一行灰度值的累加和。初始時(shí)s(x,-1)=0,c(-1,y)=0。
弱分類器對(duì)正負(fù)樣本分類的準(zhǔn)確率應(yīng)大于 1/2,這樣訓(xùn)練算法最終收斂。一個(gè)弱分類器 h(x,f,p,θ):其中 1 表示人臉,0 表示非人臉。
計(jì)算在每個(gè)特征f下的所有樣本特征值,并進(jìn)行排序。然后掃描一遍排好序的特征值,從而確定特征f的一個(gè)最后閾值,最終訓(xùn)練成一個(gè)弱分類器。所有迭代得到的弱分類器,并按照—定的權(quán)值疊加起來,得到一個(gè)強(qiáng)分類器。將多個(gè)強(qiáng)分類器連接起來,得到Adaboost級(jí)聯(lián)分類器。如圖2所示。
3.3 人臉特征的提取
局部二值模式LBP(Local Binary Patterns)是一種從局部紋理定義中衍生出來的算法,所謂的紋理是圖像分析中常用的鑒別特征,它所含有的信息能夠表征物體表面的變化。由于其優(yōu)秀的分類特性和計(jì)算的簡(jiǎn)便性,使得其廣泛的運(yùn)用于圖像檢索、人臉分析和工業(yè)檢測(cè)等領(lǐng)域。
Ojala等人提出的LBP算子的模板大小被定義為3x3,以此模板依次掃描圖像中的像素點(diǎn),將該模板的中心點(diǎn)位置的灰度值與周圍位置的8個(gè)灰度值相比較,若鄰域位置的灰度值大于中心位置的灰度值則該鄰域位置標(biāo)記為l,相反標(biāo)記為0;將這中心像素點(diǎn)周圍的8個(gè)像素點(diǎn)順時(shí)針依次連接組成8位二進(jìn)制數(shù);將該二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),替代中心像素點(diǎn)位置的像素值。
gc代表中心像素位置的灰度值大小,P為該中心位置周圍鄰域像素點(diǎn)的個(gè)數(shù),gi(i=O,l,...,P-1)是周圍第i個(gè)像素位置的灰度值。則以(xc,yc)為中心位置的一個(gè)局部鄰域的紋理特征可以表示為:
LDP算法結(jié)合了LBP的優(yōu)點(diǎn),在其基礎(chǔ)上考慮到特征的方向性,能更有效和更為魯棒的描述人臉。與LBP碼相類似,我們需要對(duì)得到的卷積結(jié)果進(jìn)行二值化處理,需要選定一個(gè)閾值。這里我們對(duì)返回的卷積結(jié)果的絕對(duì)值b0,b1,b2,b3,b4,b5,b6,b7從大到小進(jìn)行排序,取其中第K個(gè)大小的值為閾值,大于該閾值的賦值為1,相反為0。
LDP算子對(duì)于存在噪聲和非均勻的光照變化的圖像具有更好的魯棒性。
4 Android平臺(tái)人臉識(shí)別系統(tǒng)設(shè)計(jì)
4.1 Android JNI技術(shù)
本文所研究的人臉識(shí)別算法是由C語言實(shí)現(xiàn),并且調(diào)用了Opencv庫,這樣相對(duì)于使用Java語言實(shí)現(xiàn)有較高的執(zhí)行效率。Android系統(tǒng)應(yīng)用層采用的Java語言,但Android系統(tǒng)中也提供了JNI接口使得在Android程序中能方便的調(diào)用C語言或其他語言。JNI位于本地庫與Java框架層之間,其結(jié)構(gòu)如圖3所示。
4.2 系統(tǒng)功能模塊
Android平臺(tái)上的人臉檢測(cè)與識(shí)別系統(tǒng)主要由圖像采集模塊、人臉圖像預(yù)處理模塊、人臉檢測(cè)模塊、人臉注冊(cè)模塊和人臉識(shí)別模塊等共五個(gè)模塊組成。
圖像采集模塊:利用Android平臺(tái)攝像頭進(jìn)行圖像采集,調(diào)用Opencv庫,實(shí)現(xiàn)調(diào)用攝像頭、對(duì)拍攝的物體進(jìn)行自動(dòng)對(duì)焦、連續(xù)拍照等功能,快速獲取圖像幀的信息。
人臉圖像預(yù)處理模塊:對(duì)采集到的圖像幀進(jìn)行光照補(bǔ)償、濾波去噪處理和幾何歸一化的處理等處理。
人臉檢測(cè)模塊:經(jīng)預(yù)處理的圖像采用Adaboost人臉檢測(cè)方法獲取人臉,并對(duì)裁剪出的人臉圖像進(jìn)行標(biāo)記。
人臉注冊(cè)模塊:經(jīng)過訓(xùn)練后可以輸入姓名,然后可連續(xù)錄制十張照片,并按照人臉檢測(cè)中的步驟提取出10張人臉照片保存到SD卡中,將人臉姓名和編號(hào)按順序?qū)懭雈aceN.txt文件中。
人臉識(shí)別模塊:根據(jù)測(cè)試者人臉圖像計(jì)算人臉LDP特征,得到識(shí)別結(jié)果。如果測(cè)試者的人臉特征在我們?cè)O(shè)置的閾值的內(nèi)則,輸出識(shí)別人臉的姓名,否則提示人臉庫中無此人,請(qǐng)擺正人臉配合識(shí)別。
本文設(shè)計(jì)并實(shí)現(xiàn)了基于Android的人臉識(shí)別系統(tǒng)。針對(duì)Android平臺(tái)的硬件能力有限的特點(diǎn),開發(fā)了一種適用于Android平臺(tái)的系統(tǒng)資源消耗較少的人臉識(shí)別系統(tǒng)。系統(tǒng)開發(fā)過程中主要使用了Adaboost人臉檢測(cè)算法和基于LDP特征臉的人臉識(shí)別算法,采用OpenCV視覺開源庫在Android平臺(tái)上加以實(shí)現(xiàn),目前該入臉識(shí)別系統(tǒng)已經(jīng)達(dá)到較高的識(shí)別水平,具有很好的實(shí)用性和應(yīng)用前景。
參考文獻(xiàn)
[1]陳會(huì)安,李強(qiáng).Java和Android開發(fā)實(shí)戰(zhàn)詳解[M].北京:人民郵電出版社,2014.
[2]HUGHES A.Android mobile security:a comprehensive evaluationof its feats and flaws[D].UTICA COI.I.EGE,2015.
[3]趙麗紅,劉紀(jì)紅.人臉檢測(cè)方法綜述[J].計(jì)算機(jī)應(yīng)用研究,2004,21(09):l-4.
[4]張恒喜,史爭(zhēng)軍.基于SQlJte的Android數(shù)據(jù)庫編程[J].電腦編程技巧與維護(hù),2011(21):30-31.
作者單位
酒泉職業(yè)技術(shù)學(xué)院 甘肅省酒泉市 735000