劉亮


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