余 彧,陸亨立,陸小峰,李瑩嬌
(上海大學(xué)通信與信息工程學(xué)院,上海 200072)
Android平臺(tái)中實(shí)時(shí)人臉檢測(cè)和性別識(shí)別問題是模式識(shí)別領(lǐng)域和嵌入式視覺領(lǐng)域交叉的一個(gè)研究問題,既需要通過圖像采集設(shè)備和嵌入式處理平臺(tái)模仿人眼和人大腦的辨別功能,智能地定位人臉?biāo)谖恢貌⒎指畛鱿鄳?yīng)的臉部區(qū)域圖像,為實(shí)際性別的判定識(shí)別提供實(shí)時(shí)可靠的數(shù)據(jù),同時(shí)又需要對(duì)分割出的人臉圖像提取特征并利用模式分類器進(jìn)行性別識(shí)別。在嵌入式平臺(tái)中實(shí)現(xiàn)人臉檢測(cè)以及性別識(shí)別的兩個(gè)主要關(guān)鍵點(diǎn)是實(shí)時(shí)性和有效性,即檢測(cè)和識(shí)別的速率和準(zhǔn)確率。
早在20世紀(jì)70年代已經(jīng)有科研人員研究人臉檢測(cè)問題。人臉檢測(cè)方法涉及到許多模式識(shí)別的經(jīng)典算法,如人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)、主成分量分析法(Principal Component Analysis,PCA)、支持向量機(jī)(Support Vector Machines,SVM)以及 AdaBoost快速人臉檢測(cè)算法等[1]。不同的人臉檢測(cè)方法都存在著一定的聯(lián)系,而隨著研究不斷地深入,人們開始意識(shí)到將多種檢測(cè)方法結(jié)合起來能夠達(dá)到更理想的檢測(cè)效果。最近幾年,研究人員主要側(cè)重于結(jié)合多種檢測(cè)方法進(jìn)行人臉檢測(cè)而不是只針對(duì)某一種方法進(jìn)行改進(jìn)。
對(duì)于性別識(shí)別問題的研究始于20世紀(jì)80年代,但是真正受到關(guān)注是在21世紀(jì)初,最主要的研究目標(biāo)是要得到一個(gè)性別識(shí)別分類器。十多年來性別識(shí)別問題得到越來越多來自計(jì)算機(jī)視覺、模式識(shí)別、人工智能等領(lǐng)域的研究人員的關(guān)注,特別是在近幾年,更是成為一個(gè)熱門研究課題。目前,性別識(shí)別的分類方法多數(shù)都來源于人臉識(shí)別相關(guān)的分類方法。人臉識(shí)別技術(shù)在經(jīng)過幾十年的研究和發(fā)展后,已經(jīng)涌現(xiàn)了大量經(jīng)典的分類方法[2],其中一些方法如人工神經(jīng)元網(wǎng)絡(luò)(ANN)、支持向量機(jī)(SVM)、Fisher-Face法等經(jīng)過研究和實(shí)驗(yàn)證明同樣也適用于性別識(shí)別問題。
在嵌入式平臺(tái)中進(jìn)行人臉檢測(cè)相關(guān)研究的較多,研究成果較為豐富[3],涉及到各類嵌入式平臺(tái),包括了基于ARM或X86構(gòu)架的Android或嵌入式Linux開發(fā)平臺(tái)、DSP平臺(tái)以及FPGA平臺(tái)等。不論是檢測(cè)速度還是檢測(cè)率,都取得了比較滿意的結(jié)果。而對(duì)于在嵌入式平臺(tái)中進(jìn)行性別識(shí)別的研究成果則少的可憐,在國(guó)內(nèi)幾乎是空白,究其主要原因應(yīng)該是受到嵌入式處理設(shè)備的約束和限制,在嵌入式平臺(tái)中進(jìn)行大量復(fù)雜的模式識(shí)別分類很難滿足實(shí)時(shí)性的剛性需求。但隨著多核時(shí)代的來臨,嵌入式處理器的性能不斷提高,同時(shí)伴隨著存儲(chǔ)設(shè)備等其他硬件設(shè)備水平的提升,之前留下的空白應(yīng)該會(huì)得到很好的填補(bǔ)。
本文主要研究Android平臺(tái)中的實(shí)時(shí)人臉檢測(cè)和性別識(shí)別,其實(shí)現(xiàn)方法如圖1所示,主要包括3大部分:人臉檢測(cè)、臉部圖像處理、性別識(shí)別。
圖1 Android平臺(tái)中的實(shí)時(shí)人臉檢測(cè)和性別識(shí)別實(shí)現(xiàn)流程圖
1)人臉檢測(cè)
針對(duì)嵌入式平臺(tái)的處理能力相對(duì)比較一般的特點(diǎn),在人臉檢測(cè)之前須對(duì)從攝像頭設(shè)備獲取的輸入視頻圖像進(jìn)行預(yù)處理,從而最大程度地降低計(jì)算量。預(yù)處理過程包括了灰度處理、圖像等比例壓縮以及直方圖均衡?;叶忍幚戆讶ǖ赖牟噬斎雸D像轉(zhuǎn)化為單通道的灰度圖像,圖像等比例壓縮能夠降低輸入圖像的分辨率,從而減少了人臉檢測(cè)算法的計(jì)算量并有效提高檢測(cè)速率。而直方圖均衡則能夠提高圖像的對(duì)比度和亮度,從而增強(qiáng)人臉檢測(cè)的可靠性。本文采用Adaboost快速人臉檢測(cè)算法進(jìn)行人臉檢測(cè),Adaboost算法是首個(gè)能夠達(dá)到實(shí)時(shí)的人臉檢測(cè)算法,被廣泛運(yùn)用于嵌入式設(shè)備中進(jìn)行人臉檢測(cè)。
2)臉部圖像處理
由于性別識(shí)別的結(jié)果好壞易受到光照變化、臉部表情、臉部朝向改變等影響,因此在人臉檢測(cè)和性別識(shí)別之前加入臉部圖像處理是極其重要的。本文所采用的臉部圖像處理包括以下幾個(gè)步驟:首先是人眼檢測(cè),利用Adaboost算法以及人眼分類器可以較容易地在臉部圖像中標(biāo)定人眼位置。其次是臉部圖像的幾何變換和剪裁,根據(jù)所檢測(cè)到的人眼位置,通過圖像旋轉(zhuǎn)、剪裁、縮放等手段,使得臉部圖像中人眼是對(duì)齊的且不包含背景、額頭、耳朵和下巴,并將處理后的臉部圖像縮放到70×70固定大小。再次是分離直方圖均衡,這個(gè)過程能夠使得每一個(gè)臉部圖像都具有相同的對(duì)比度以及亮度。最后是圖像平滑,圖像平滑能夠有效地減少圖像的噪聲。
3)性別識(shí)別
性別識(shí)別的過程包括離線學(xué)習(xí)和在線識(shí)別兩個(gè)部分。本文采用FisherFace方法進(jìn)行性別識(shí)別以及性別分類器的訓(xùn)練,F(xiàn)isherFace方法會(huì)將高維圖像降低到低維空間,因此能夠大大地降低分類開銷,相比于其他的性別識(shí)別方法最適合在嵌入式平臺(tái)中運(yùn)用。
AdaBoost人臉檢測(cè)算法是由P.Viola等人提出的[4],它是一種迭代算法,其核心思想是:從人臉圖像中抽取大量的簡(jiǎn)單特征,有些特征具有一定的人臉和非人臉區(qū)分能力。隨后通過訓(xùn)練從眾多特征中選出分類能力較強(qiáng)的特征作為弱分類器,并最終將這些弱分類器進(jìn)行有效的組合從而構(gòu)成強(qiáng)分類器[5]。
基于AdaBoost算法的人臉檢測(cè)流程如圖2所示,分為離線訓(xùn)練和在線檢測(cè)兩個(gè)部分。離線訓(xùn)練過程對(duì)大量的人臉和非人臉樣本圖像進(jìn)行訓(xùn)練,對(duì)每個(gè)樣本提取特征,并通過Adaboost算法最終生成強(qiáng)分類器,在線檢測(cè)過程中,運(yùn)用離線過程生成的人臉分類器對(duì)輸入圖像進(jìn)行分類檢測(cè),從而得到人臉圖像結(jié)果。
圖2 基于AdaBoost算法的人臉檢測(cè)流程圖
本文利用 JNI(Java Native Interface)接口、Android NDK(Native Development Kit)以及OpenCV AdaBoost算法API來實(shí)現(xiàn)Android平臺(tái)中的人臉檢測(cè)。封裝了兩個(gè)主要的native方法,分別是JNIEXPORT void JNICALL Java_com_example_gender_MainActivity_LoadFaceCascade(JNIEnv*env,jobject obj,jstring filename)用于加載離線訓(xùn)練好的人臉分類器,以及JNIEXPORT void JNICALL Java_com_example_gender_MainActivity_Detect(JNIEnv* env,jobject obj)用于在線實(shí)時(shí)人臉檢測(cè)。利用NDK對(duì)native方法進(jìn)行編譯并生成共享庫(kù)文件libfacedetect.so,在java源代碼中對(duì)動(dòng)態(tài)庫(kù)進(jìn)行調(diào)用。
針對(duì)嵌入式平臺(tái)對(duì)實(shí)時(shí)性要求較高的特點(diǎn)。本文采用Android中的多線程技術(shù)使整個(gè)人臉檢測(cè)過程在后臺(tái)完成,避免了前臺(tái)的預(yù)覽攝像頭圖像UI出現(xiàn)卡頓的現(xiàn)象。在新建的子線程中執(zhí)行耗時(shí)比較多的人臉檢測(cè)算法,并利用Handler,Looper和MessageQueue進(jìn)行線程間的通信。子線程在檢測(cè)到人臉之后通過sendMessage方法將人臉位置信息傳遞給主線程,主線程在收到數(shù)據(jù)之后實(shí)時(shí)地更新UI。
FisherFace方法也稱為Fisher線性判別分析(Fisher Linear Discriminant Analysis,F(xiàn)LDA),是由P.N.Belhumeur等人在1997年提出的[6]。Fisherface算法的核心思想是以樣本的可分性為目標(biāo),尋找一組線性變換使每類的類內(nèi)離散度最小,同時(shí)使類間的離散度達(dá)到最大,即選擇使樣本類間離散度和類內(nèi)離散度的比值最大的特征值。由于FisherFace算法引入了類別信息,最小化了類內(nèi)距離,因此該算法比較適合于模式識(shí)別問題[7]。
對(duì)于性別識(shí)別問題,有M=2個(gè)模式類別,即男性和女性,樣本的類內(nèi)散布矩陣Sw和Sb類間散布矩陣定義為
式中:N表示所有樣本集的總數(shù);Ni表示第i類樣本集的數(shù)量;μi表示第i類樣本的均值;xij表示第i類中第j個(gè)樣本;μ表示所有樣本的平均值。
Fisher判決準(zhǔn)則函數(shù)定義為
Fisher判決準(zhǔn)則函數(shù)將樣本的類間離散度和類內(nèi)離散度非常巧妙地結(jié)合在一起,取極大化目標(biāo)函數(shù)J(W)的矩陣Wm作為投影方向。其物理意義是:特征樣本在Wm上投影后,類間離散度和類內(nèi)離散度之比達(dá)到最大,從而達(dá)到性別分類的目的。
本文同樣采用JNI接口、Android NDK以及OpenCV FisherFace算法來實(shí)現(xiàn)Android平臺(tái)中的性別識(shí)別。與人臉檢測(cè)相同,同樣封裝了兩個(gè)native方法,分別實(shí)現(xiàn)加載離線性別識(shí)別分類器和在線實(shí)時(shí)識(shí)別。整個(gè)性別識(shí)別過程同樣在后臺(tái)獨(dú)立的線程中完成,具體實(shí)現(xiàn)方法與人臉檢測(cè)過程類似。
本文所選擇的人臉樣本圖像來自于多種途徑,包括知名的人臉庫(kù)(如FERET,Yale,AT&T)、自行采集的人臉樣本庫(kù)以及來自互聯(lián)網(wǎng)的各類明星照片。所有收集的人臉樣本圖像并不只局限于正面臉的圖像,也包括了不同種族、不同年齡段、不同臉部表情以及臉部旋轉(zhuǎn)在以內(nèi)的人臉圖像,從而增強(qiáng)了系統(tǒng)的魯棒性。
性別識(shí)別分類器的訓(xùn)練過程同樣也需要對(duì)樣本圖像進(jìn)行處理,所采用的處理方法與本文第二部分介紹的臉部圖像處理方法相同。如圖3所示,對(duì)所有樣本圖像先利用Adaboost算法進(jìn)行人臉檢測(cè),隨后對(duì)臉部圖像進(jìn)行進(jìn)一步處理,得到根據(jù)人眼對(duì)齊的臉部灰度平滑圖像,最后運(yùn)用FisherFace訓(xùn)練算法進(jìn)行訓(xùn)練并將生成的性別識(shí)別分類器保存到gender.yml描述文件中。
圖3 樣本圖像處理處理示例圖
本文使用兩個(gè)構(gòu)架截然不同的嵌入式硬件平臺(tái)進(jìn)行實(shí)驗(yàn)以及算法性能對(duì)比,其中一個(gè)平臺(tái)是以基于ARM Cortex-A8構(gòu)架的Samsung S5PV210為主處理芯片,主頻1 GHz,以下簡(jiǎn)稱S5PV210平臺(tái)。另一個(gè)是以基于Intel X86構(gòu)架的 Intel Atom Z2460為主處理芯片,主頻1.60 GHz,以下簡(jiǎn)稱Z2460平臺(tái)。在這兩個(gè)平臺(tái)中都運(yùn)行Android 4.0操作系統(tǒng),使用OpenCV2.4.4庫(kù)來實(shí)現(xiàn)所有人臉檢測(cè)和性別識(shí)別算法,并使用交叉編譯環(huán)境Android NDK r8b進(jìn)行編譯。
為了測(cè)試人臉檢測(cè)和性別識(shí)別算法的性能,準(zhǔn)備了大量的測(cè)試樣本圖像以及兩段分辨率均為640×480視頻進(jìn)行對(duì)比分析:1)公共測(cè)試視頻;2)自己生活中錄制的視頻。測(cè)試樣本示例以及公共視頻中的關(guān)鍵幀如圖4所示。
圖4 測(cè)試樣本示例及公共視頻中的關(guān)鍵幀
4.2.1 基于不同特征分類器的AdaBoost人臉檢測(cè)算法性能對(duì)比
OpenCV庫(kù)中提供了兩種已經(jīng)訓(xùn)練好的AdaBoost人臉分類器,一種是基于Haar-like特征的分類器,保存于haarcascade_frontalface_alt2.xml描述文件中;另一種是基于LBP特征的分類器,保存于lbpcascade_frontalface.xml描述文件中。表1是運(yùn)用了這兩種特征分類器的Ada-Boost人臉檢測(cè)算法分別運(yùn)行于S5PV210平臺(tái)和Z2460平臺(tái)的性能測(cè)試結(jié)果,圖5是根據(jù)表1生成的性能對(duì)比柱狀圖。
表1 基于不同特征分類器AdaBoost算法性能對(duì)比
圖5 基于不同特征分類器AdaBoost算法性能對(duì)比
表1中檢測(cè)率=實(shí)際檢測(cè)到人臉幀數(shù)/總含人臉幀數(shù),誤檢率=誤檢到含人臉的幀數(shù)/總含人臉幀數(shù)。由表1中的測(cè)試數(shù)據(jù)以及圖5可知,基于Haar-like特征的人臉分類器可以得到相對(duì)更高的檢測(cè)率(96.35%),而基于LBP特征的人臉分類器檢測(cè)速率要快了1倍以上,且也可以得到比較高的檢測(cè)率(87.46%)。鑒于嵌入式設(shè)備對(duì)實(shí)時(shí)性的要求較高,本文選擇基于LBP特征的人臉分類器進(jìn)行人臉檢測(cè)。
4.2.2 Android平臺(tái)中兩種人臉檢測(cè)方法的性能對(duì)比
從Android 4.0 Ice Cream Sandwich版本開始,官方新增了人臉檢測(cè)的API,本文利用了官方的API實(shí)現(xiàn)了一個(gè)人臉檢測(cè)性能對(duì)比程序,與采用AdaBoost算法實(shí)現(xiàn)人臉檢測(cè)的方法進(jìn)行性能對(duì)比。表2是基于2種不同方法實(shí)現(xiàn)的人臉檢測(cè)性能測(cè)試結(jié)果,2種實(shí)現(xiàn)方法分別運(yùn)行于S5PV210平臺(tái)和Z2460平臺(tái),圖6是根據(jù)表2生成的性能對(duì)比柱狀圖。
表2 基于不同方法實(shí)現(xiàn)的人臉檢測(cè)性能對(duì)比
圖6 基于不同方法實(shí)現(xiàn)的人臉檢測(cè)性能對(duì)比
由表2中的測(cè)試數(shù)據(jù)以及圖6可知,運(yùn)用Android系統(tǒng)自帶API實(shí)現(xiàn)的人臉檢測(cè)相比于使用OpenCV實(shí)現(xiàn)AdaBoost快速人臉檢測(cè),檢測(cè)速率要更快一些,但其檢測(cè)率只有接近80%。
4.2.3 基于FisherFace算法的性別識(shí)別性能對(duì)比分析
表3是基于FisherFace算法的性別識(shí)別方法在S5PV210平臺(tái)和Z2460平臺(tái)運(yùn)行的性能測(cè)試結(jié)果,圖7是根據(jù)表3生成的性能對(duì)比柱狀圖。圖8是對(duì)測(cè)試樣本示例及公共視頻中的關(guān)鍵幀進(jìn)行性別識(shí)別的結(jié)果。由表3中的測(cè)試數(shù)據(jù)以及圖7可知,F(xiàn)isherFace算法在Z2460平臺(tái)運(yùn)行時(shí)已經(jīng)能夠接近10 f/s(幀/秒)的識(shí)別速率,能夠比較好地滿足實(shí)時(shí)性的要求。而在S5PV210平臺(tái)運(yùn)行時(shí)也有接近6 f/s的識(shí)別速率。在兩個(gè)平臺(tái)中運(yùn)行的識(shí)別準(zhǔn)確率均為82.64%。
表3 基于FisherFace算法的性別識(shí)別性能對(duì)比
圖7 基于FisherFace算法的性別識(shí)別性能對(duì)比
本文提出并實(shí)現(xiàn)一種Android系統(tǒng)下實(shí)時(shí)人臉檢測(cè)和性別識(shí)別的方法,并分別在基于ARM和X86構(gòu)架的兩個(gè)嵌入式平臺(tái)中進(jìn)行了大量實(shí)驗(yàn)和測(cè)試數(shù)據(jù)對(duì)比,實(shí)驗(yàn)數(shù)據(jù)證明了本文的方法在實(shí)時(shí)性和準(zhǔn)確性方面都取得了比較理想的結(jié)果。隨著技術(shù)的進(jìn)一步發(fā)展,嵌入式平臺(tái)處理器性能增強(qiáng)及核數(shù)增加是一種必然趨勢(shì),人臉檢測(cè)和性別識(shí)別技術(shù)應(yīng)該能夠更完美地在這些嵌入式平臺(tái)上實(shí)現(xiàn)。
:
[1]趙麗紅,劉紀(jì)紅.人臉檢測(cè)方法綜述[J].計(jì)算機(jī)應(yīng)用研究,2004,21(9):1-4.
[2]閆娟,程武山,孫鑫.人臉識(shí)別的技術(shù)研究與發(fā)展概況[J].電視技術(shù),2006,30(12):81-84.