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