于世強(qiáng),應(yīng) 捷
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
?
基于Android平臺(tái)的實(shí)時(shí)人臉檢測(cè)與跟蹤
于世強(qiáng),應(yīng)捷
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
摘要針對(duì)Android智能手機(jī)自帶人臉檢測(cè)功能效率低、錯(cuò)誤率高的問(wèn)題,提出了一種將OpenCV移植到Android平臺(tái)的方法,在運(yùn)行Android系統(tǒng)的嵌入式平臺(tái)中使用改進(jìn)的AdaBoost算法,并結(jié)合OpenCV庫(kù)來(lái)實(shí)現(xiàn)實(shí)時(shí)人臉檢測(cè)與跟蹤。實(shí)驗(yàn)取得了高達(dá)95.05%的人臉檢測(cè)準(zhǔn)確率和50.13 ms的平均檢測(cè)速率,在保證檢測(cè)速度的同時(shí)比Android自帶的人臉檢測(cè)更具高效性和實(shí)用性。
關(guān)鍵詞Android;OpenCV;人臉檢測(cè);AdaBoost算法
人臉檢測(cè)是自動(dòng)人臉識(shí)別系統(tǒng)[1-2]中的一個(gè)關(guān)鍵環(huán)節(jié),在門(mén)禁系統(tǒng)、人臉跟蹤和身份識(shí)別等領(lǐng)域得到了廣泛應(yīng)用。這種應(yīng)用背景要求自動(dòng)人臉檢測(cè)系統(tǒng)[1]對(duì)動(dòng)態(tài)的環(huán)境具有一定的適應(yīng)能力,因此人臉檢測(cè)與跟蹤開(kāi)始作為一個(gè)獨(dú)立的課題受到研究者的重視。經(jīng)過(guò)幾十年的發(fā)展,涌現(xiàn)了許多人臉檢測(cè)經(jīng)典算法,如隱馬爾科夫模型,主成分量分析法,人工神經(jīng)網(wǎng)絡(luò)[3]以及AdaBoost算法等。不同的人臉檢測(cè)方法都不是絕對(duì)獨(dú)立的,其之間均存在著一定的聯(lián)系和自身的優(yōu)越性。AdaBoost算法在人臉檢測(cè)的實(shí)時(shí)性和準(zhǔn)確性方面有著自己的優(yōu)勢(shì),因而AdaBoost算法在實(shí)時(shí)人臉檢測(cè)與跟蹤[4-7]的研究課題中得到了廣泛的應(yīng)用。
近年來(lái),以Android操作系統(tǒng)為代表的智能手機(jī)得到快速的發(fā)展。谷歌在2009發(fā)布NDK(NativeDevelopmentKit),允許開(kāi)發(fā)者使用C/C++或移植C/C++庫(kù)例如OpenCV(OpenSourceComputerVisionLibrary)到Android端來(lái)開(kāi)發(fā)Android應(yīng)用程序。智能手機(jī)輕量化和功能集成的優(yōu)點(diǎn),使得計(jì)算機(jī)視覺(jué)系統(tǒng)在智能手機(jī)上的應(yīng)用前景更加廣闊[8-9]。為此,文中提出一種脫離外部網(wǎng)絡(luò)終端的實(shí)時(shí)人臉跟蹤與檢測(cè)系統(tǒng),該系統(tǒng)所有的實(shí)驗(yàn)工作都在Android智能手機(jī)上完成。
1實(shí)現(xiàn)人臉檢測(cè)與跟蹤
1.1AdaBoost算法改進(jìn)
AdaBoost是一種迭代算法,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的弱分類(lèi)器,然后將這些弱分類(lèi)器集合起來(lái),構(gòu)成一個(gè)強(qiáng)分類(lèi)器,強(qiáng)分類(lèi)器的分類(lèi)精度依賴(lài)于所有弱分類(lèi)器的分類(lèi)精度,這樣可深入挖掘弱分類(lèi)器算法的能力。最后將每次訓(xùn)練得到的強(qiáng)分類(lèi)器最后融合起來(lái),作為最后的決策分類(lèi)器。
PaulViola和MichaelJones提出的AdaBoost算法采用了積分圖計(jì)算特征值的算法[10],大幅提高了檢測(cè)速度。為在提高檢測(cè)速度的同時(shí)降低誤檢率和漏檢率,本文在結(jié)合積分圖算法的的基礎(chǔ)上提出了兩點(diǎn)改進(jìn):首先為弱分類(lèi)器設(shè)定閾值,這樣就避免了分類(lèi)器自己尋找閾值,并在訓(xùn)練過(guò)程中不斷調(diào)整錯(cuò)誤樣本的權(quán)重,突出錯(cuò)誤樣本以期能夠最快達(dá)到閾值,大幅減少了訓(xùn)練和檢測(cè)的時(shí)間;其次在設(shè)定不同比例的人臉?biāo)阉骺?,在人臉檢測(cè)過(guò)程中可根據(jù)距離等實(shí)際情況選擇不同大小的初始搜索框,這樣可避免搜索框過(guò)大造冗余信息被采取影響檢測(cè)速度,或搜索框過(guò)小導(dǎo)致誤檢或漏檢。
1.2改進(jìn)的AdaBoost人臉訓(xùn)練流程
訓(xùn)練樣本要求是面部特寫(xiě)圖像,將一簇訓(xùn)練樣本大小被歸一化為24×24像素,由于人臉形態(tài)千差萬(wàn)別,所以訓(xùn)練樣本選取過(guò)程中要考慮到樣本的多樣性。訓(xùn)練過(guò)程分為以下步驟:
(1)Harr-like特征提取。圖1為4種常用的Haar特征,在這4種特征的基礎(chǔ)上設(shè)計(jì)出更多、更復(fù)雜的特征。Haar-like人臉特征的數(shù)量就取決于訓(xùn)練樣本圖像矩陣的大小,特征模板在子窗口內(nèi)任意放置,一種形態(tài)稱(chēng)為一種特征。
圖1 特征樣子
如圖2所示,眼睛區(qū)域的顏色比臉頰區(qū)域的顏色深,鼻梁兩側(cè)比鼻梁的顏色要深,這樣就提取到兩個(gè)Haar特征值如圖2(b)和圖2(c)所示。
圖2 臉部Harr-like特征提取
(2)使用“積分圖”實(shí)現(xiàn)特征數(shù)值的快速計(jì)算。積分圖的主要思想是將圖像從起點(diǎn)開(kāi)始到各個(gè)點(diǎn)所形成的矩形區(qū)域像素之和作為一個(gè)數(shù)組的元素保存在內(nèi)存中,當(dāng)要計(jì)算某個(gè)區(qū)域的像素和時(shí)可以直接索引數(shù)組的元素,從而加快計(jì)算速度,大幅提高檢測(cè)速度。
圖3 特征值計(jì)算—積分圖
矩陣A、B的值計(jì)算方法如式(1)和式(2)所示。Harr-like特征值為白色矩形減去黑色矩形的值
A=i(5)+ii(1)-ii(4)-ii(2)
(1)
B=i(6)+ii(2)-ii(3)-ii(5)
(2)
(3)訓(xùn)練弱分類(lèi)器。AdaBoost算法中不同的訓(xùn)練集是通過(guò)調(diào)整每個(gè)樣本對(duì)應(yīng)的權(quán)重來(lái)實(shí)現(xiàn)的。開(kāi)始時(shí),對(duì)樣本權(quán)重進(jìn)行歸一化
(3)
對(duì)于每個(gè)特征f,訓(xùn)練一個(gè)弱分類(lèi)器h,計(jì)算所有特征的加權(quán)錯(cuò)誤率
εf=∑iqi|h(xi,f,p,θ)-yi
(4)
選取具有最小錯(cuò)誤率εf的弱分類(lèi)器。對(duì)于分類(lèi)錯(cuò)誤的樣本,加大其對(duì)應(yīng)的權(quán)重;而對(duì)于分類(lèi)正確的樣本,降低其權(quán)重,這樣分錯(cuò)的樣本就被突顯出來(lái),從而得到一個(gè)新的樣本分布
(5)
(6)
在新的樣本分布下,再次對(duì)弱分類(lèi)器進(jìn)行訓(xùn)練。以此循環(huán),直到達(dá)到設(shè)定閾值,得到最優(yōu)弱分類(lèi)器。
(4)強(qiáng)分類(lèi)器訓(xùn)練。將這弱分類(lèi)器疊加(Boost)起來(lái),得到最終的強(qiáng)分類(lèi)器
(7)
強(qiáng)分類(lèi)器集合就構(gòu)成了訓(xùn)練好的人臉特征庫(kù),至此訓(xùn)練完成,整體訓(xùn)練流程如圖4所示。
圖4 人臉?lè)诸?lèi)器訓(xùn)練模型
1.3人臉檢測(cè)系統(tǒng)
首先調(diào)用安卓相機(jī)對(duì)圖像進(jìn)行有效的掃描,根據(jù)實(shí)際情況選擇相應(yīng)的初始搜索窗口。然后用強(qiáng)分類(lèi)器對(duì)捕獲的圖像進(jìn)行判別,每級(jí)強(qiáng)分類(lèi)器均以大概相同的識(shí)別率保留進(jìn)入下一級(jí)具有物體特征的候選物體,而每一級(jí)的子分類(lèi)器則由諸多Haar-like特征構(gòu)成,且每個(gè)特征帶一個(gè)閾值,每級(jí)子分類(lèi)器帶一個(gè)總閾值。跟蹤檢測(cè)物體時(shí),同樣計(jì)算積分圖像為后續(xù)計(jì)算Haar-like特征做準(zhǔn)備,每當(dāng)窗口移動(dòng)到一個(gè)位置,即計(jì)算該窗口內(nèi)的Haar-like特征,加權(quán)后與分類(lèi)器中的閾值比較,大于該閾值才可通過(guò)進(jìn)入下一輪分類(lèi)器篩選。當(dāng)通過(guò)分類(lèi)器所有級(jí)時(shí),說(shuō)明人臉被成功檢測(cè)。
圖5 人臉檢測(cè)系統(tǒng)模型
基于Haar-like特征的人臉檢測(cè)可自動(dòng)對(duì)大量圖片進(jìn)行訓(xùn)練,訓(xùn)練結(jié)果存儲(chǔ)為XML文件,這些級(jí)聯(lián)分類(lèi)器一般需要訓(xùn)練上千幅人臉圖片和上萬(wàn)幅非人臉圖片,訓(xùn)練過(guò)程耗時(shí)很長(zhǎng),本文在自行訓(xùn)練的基礎(chǔ)上結(jié)合OpenCV中訓(xùn)練好的相關(guān)XML文件來(lái)實(shí)現(xiàn)人臉檢測(cè)與跟蹤。
圖6 人臉檢測(cè)與跟蹤系統(tǒng)
2Android平臺(tái)人臉檢測(cè)的實(shí)現(xiàn)
2.1開(kāi)發(fā)環(huán)境的搭建
本文首先采用Google官方的JDK,ADT插件和Eclipse搭建通用的Android開(kāi)發(fā)環(huán)境。由于開(kāi)發(fā)過(guò)程中要編寫(xiě)本地C/C++代碼,需要Android NDK進(jìn)行編譯,這里采用官方版本android-ndk-r9d。只需要解壓android-ndk-r9d壓縮文件到任意路徑,在Eclipse中NDK Location中配置解壓后的android-ndk-r9d文件路徑,便可實(shí)現(xiàn)Eclipse自動(dòng)調(diào)用Android NDK編譯C/C++。此外,最新OpenCV-3.0.0-android-sdk已被打包成備用的Android Library Project,將其導(dǎo)入Eclipse工作空間就可在項(xiàng)目中引用OpenCV庫(kù)函數(shù)。
2.2應(yīng)用程序開(kāi)發(fā)
(1)在Eclipse中新建名為FaceDetection的Android應(yīng)用工程并導(dǎo)入OpenCV最新函數(shù)庫(kù)OpenCV-3.0.0-android-sdk。首先在AndroidManifest.xml對(duì)使用CAMERA的進(jìn)行權(quán)限聲明;再在文件夾src中新建Java類(lèi),實(shí)現(xiàn)對(duì)camera的使用和對(duì)幀圖像數(shù)據(jù)的處理;
(2)在工程目錄中新建JNI文件夾,JNI是一套可實(shí)現(xiàn)Java與本地代碼間的互操作的雙向接口,利用JNI與OpenCV接口編寫(xiě)本地C/C++代碼,并利用Android NDK對(duì)其編譯后生成供Java代碼可調(diào)用的共享庫(kù)。JNI目錄下,還需要編寫(xiě)Android.mk和Application.mk兩個(gè)腳本文件;
(3)在Eclipse中用Android SDK編譯后,便會(huì)在bin目錄中生成可發(fā)布在安卓手機(jī)上的APK文件,圖7是應(yīng)用程序的開(kāi)發(fā)流程。
圖7 安卓應(yīng)用程序開(kāi)發(fā)流程圖
3實(shí)驗(yàn)結(jié)果
打開(kāi)安裝好的檢測(cè)相機(jī),圖8是對(duì)靜態(tài)圖像人臉的檢測(cè)結(jié)果,無(wú)論是單人臉或是多人臉圖像均可成功檢測(cè)。
圖8 人臉檢測(cè)示例圖
圖9是對(duì)動(dòng)態(tài)圖像人臉檢測(cè)與跟蹤的結(jié)果,在鏡頭中的人臉偏移和晃動(dòng)時(shí),能夠?qū)崿F(xiàn)對(duì)人臉的成功追蹤,過(guò)程平滑無(wú)卡頓現(xiàn)象出現(xiàn)。
如圖10所示,在距離不變的情況下,初始搜索框較大時(shí),由于攝入過(guò)多人臉外冗余信息,未能快速實(shí)現(xiàn)成功檢測(cè)人臉,而切換到相對(duì)較小初始搜索框時(shí),能較快地實(shí)現(xiàn)人臉檢測(cè)。
實(shí)際測(cè)試的初步結(jié)果顯示應(yīng)用程序已經(jīng)能夠?qū)崿F(xiàn)人臉檢測(cè)與跟蹤,進(jìn)一步研究人臉檢測(cè)的成果,本文采取了大量的樣本,分別用本文應(yīng)用程序(以下稱(chēng)改進(jìn)AdaBoost算法)和Android自帶API 進(jìn)行人臉檢測(cè),然后將兩者的人臉檢測(cè)性能進(jìn)行對(duì)比。
圖9 人臉跟蹤示例圖
圖10 搜索框大小對(duì)檢測(cè)結(jié)果的影響
改進(jìn)AdaBoostAndroidAPI成功率95.05%88.41%漏檢率3.26%8.72%誤檢率1.69%2.73%檢測(cè)速率50.13ms48.56ms
由表1可知,改進(jìn)的AdaBoost算法實(shí)現(xiàn)的人臉檢測(cè)與Android API人臉檢測(cè)相比,保證檢測(cè)速度的同時(shí)取得了高達(dá)95.05%的檢測(cè)成功率,在兩種方法誤檢率差別不大的情況下,這主要得益于超低漏檢率的貢獻(xiàn)。
4結(jié)束語(yǔ)
通過(guò)改進(jìn)的AdaBoost算法與OpenCV庫(kù)的結(jié)合,本文在不使用外部網(wǎng)絡(luò)終端的條件下實(shí)現(xiàn)了Android系統(tǒng)下的人臉檢測(cè)與跟蹤。大量的實(shí)驗(yàn)數(shù)據(jù)和測(cè)試數(shù)據(jù)表明本方法比Aandroid自帶人臉檢測(cè)系統(tǒng)取得了更好的效果,在檢測(cè)的準(zhǔn)確性和實(shí)時(shí)性?xún)煞矫娑既〉昧祟A(yù)期成果。相信隨著Android嵌入式平臺(tái)技術(shù)的高速發(fā)展和該領(lǐng)域研究人員的不斷努力,Android人臉檢測(cè)與跟蹤能取得更好的研究成果。
參考文獻(xiàn)
[1]楊元挺,李妹.基于嵌入式的自動(dòng)人臉識(shí)別系統(tǒng)研究[J].桂林電子科技大學(xué)學(xué)報(bào),2012,32(6):483-486.
[2]桑海峰,吳丹陽(yáng),王會(huì).視頻監(jiān)控下的人臉跟蹤與識(shí)別系統(tǒng)[J].計(jì)算機(jī)工程與應(yīng)用,2014,50(12):175-179.
[3]方旭.基于BP神經(jīng)網(wǎng)絡(luò)人臉識(shí)別方法的研究與改進(jìn)[J].電腦知識(shí)與技術(shù):學(xué)術(shù)交流,2011(2): 862-863.
[4]Mingxing J,Junqiang D,Tao C,et al.An improved detection algorithm of face with combining adaboost and SVM[C].China: Control and Decision Conference(CCDC),2013.
[5]江偉堅(jiān),郭躬德,賴(lài)智銘.基于新 Haar-like 特征的 Adaboost 人臉檢測(cè)算法[J].山東大學(xué)學(xué)報(bào):工學(xué)版,2014,44(2):43-48.
[6]Li X,Zhai Y,Li X.Research and Implementation of face detection system on android smart phone[C].Xiamen: Proceedings of 2013 Chinese Intelligent Automation Conference,2013.
[7]安恒煊,張學(xué)習(xí),李超,等.一種基于AdaBoost人臉檢測(cè)算法在Android平臺(tái)的實(shí)現(xiàn)[J].電子設(shè)計(jì)工程, 2014,22(8):126-130.
[8]李新,翟玉美,肖洪祥.Android手機(jī)中人臉檢測(cè)算法的改進(jìn)及實(shí)現(xiàn)[J].桂林理工大學(xué)學(xué)報(bào),2014,34(1):175-179.
[9]周勇,張嘉林,王桂珍,等.Android平臺(tái)下人臉識(shí)別系統(tǒng)的研究與實(shí)現(xiàn)[J].南京工程學(xué)院學(xué)報(bào):自然科學(xué)版,2013,11(1):53-57.
[10]Viola P,Jones M.Rapid object detection using a boosted cascade of simple features[C].New York:IEEE Conference on Computer Vision and Pattern Recognition,2001.
Real-time Face Detection and Tracking Based on Android Platform
YUShiqiang,YINGJie
(SchoolofOptical-ElectricalandComputerEngineering,ShanghaiUniversityofShanghaifor
ScienceandTechology,Shanghai200093,China)
AbstractAiming at the low efficiency and high error rate from Android smartphone original face detection system, this paper proposes a method of transplanting OpenCV(Open Source Computer Vision Library) to Android platform, using improved AdaBoost algorithm combined with OpenCV Library to realize real-time face detection and tracking on embedded Android platform. The experiment achieved 95.05% detection accuracy rate and 50.13 ms average detection speed, it is more effective and practical than Android original face detection system at almost the same detection speed.
KeywordsAndroid; OpenCV; face detection; AdaBoost algorithm
收稿日期:2015- 10- 28
作者簡(jiǎn)介:于世強(qiáng)(1990-),男,碩士研究生。研究方向:數(shù)字圖像處理。應(yīng)捷(1973-),女,副教授,碩士生導(dǎo)師。研究方向:數(shù)字圖像處理。
doi:10.16180/j.cnki.issn1007-7820.2016.07.023
中圖分類(lèi)號(hào)TP391.41
文獻(xiàn)標(biāo)識(shí)碼A
文章編號(hào)1007-7820(2016)07-078-04