




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
分類號(hào):TP391.4 UDC:D10621-408-(2012)0714-0密級(jí):公開編號(hào):2008023028成都信息工程學(xué)院學(xué)位論文基于Android編程平臺(tái)的面部識(shí)別技術(shù)研究論文作者姓名:鐘鋪俊申請(qǐng)學(xué)位專業(yè):生物醫(yī)學(xué)工程申請(qǐng)學(xué)位類別:工學(xué)學(xué)士王保強(qiáng)(教授)論文提交日期:2012年06年01日獨(dú)創(chuàng)性聲明本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。據(jù)我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其它教育機(jī)構(gòu)的學(xué)位或證書而使用過的材料。與我一同工作的同志對(duì)本研究所做的任何貢獻(xiàn)均已在論文中作了明確的說明并表示謝意。簽名:日期:2012年6月09日關(guān)于論文使用授權(quán)的說明本學(xué)位論文作者完全了解成都信息工程學(xué)院有關(guān)保留、使用學(xué)位論文的規(guī)定,有權(quán)保留并向國家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和磁盤,允許論文被查閱和借閱。本人授權(quán)成都信息工程學(xué)院可以將學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存、匯編學(xué)位論文。(保密的學(xué)位論文在解密后應(yīng)遵守此規(guī)定)簽名:日期:2012年6月09日基于Android編程平臺(tái)的面部識(shí)別技術(shù)研究摘要隨著Google與33家手機(jī)制造商、手機(jī)供貨商、軟硬件供貨商、電信業(yè)者聯(lián)合組成的開放手機(jī)聯(lián)盟(OpenHandsetAlliance,OHA),在2011年11月5日發(fā)布名為“android”的開放手機(jī)平臺(tái),Android就以原始碼操作系統(tǒng)平臺(tái)、免費(fèi)應(yīng)用程序開發(fā)環(huán)境,在手持設(shè)備,尤其在手機(jī)上的應(yīng)用得到了飛速的發(fā)展。本文的主題就是基于android編程平臺(tái),利用手持設(shè)備對(duì)面部識(shí)別技術(shù)的研究。研究內(nèi)容:使用智能手機(jī)采集人臉圖像,并對(duì)人臉圖像進(jìn)行預(yù)處理,讓其達(dá)到相關(guān)識(shí)別算法的要求,適合與人臉庫里面的圖像進(jìn)行對(duì)比,得出識(shí)別結(jié)果。研究方法:首先由Android手機(jī)獲取人臉圖像,對(duì)人臉圖像進(jìn)行預(yù)處理(彩圖灰度化、直方圖均衡化、圖像的平滑濾波等);再通過JavaNativeInterface(JNI)規(guī)則將OpenCV平臺(tái)與android平臺(tái)實(shí)現(xiàn)類庫共享,利用PrincipalComponentAnalysis(PCA)算法對(duì)人臉圖像進(jìn)行特征提取,獲得特征向量(特征臉)完成訓(xùn)練階段;最后,將待識(shí)別的人臉圖像投影到特征向量,通過最鄰近法得到與特征向量最近的人臉圖像完成識(shí)別階段,從而識(shí)別此人的身份。研究結(jié)果:本文利用PCA算法對(duì)人臉進(jìn)行識(shí)別,通過降維的方法減少了計(jì)算量,降低了程序?qū)τ布囊螅瑫r(shí)識(shí)別率較高,具有一定的使用價(jià)值。但是,存在一個(gè)問題:拍照時(shí)手機(jī)離人臉的距離存在差異,提取到的人臉圖像也有所不同,這樣就影響了識(shí)別率。關(guān)鍵詞:Android;JNI;OpenCV;圖像預(yù)處理;面部識(shí)別;PCAStudyofthefacerecognitiontechnologybasedontheandroidplatformprogrammingAbstractWiththepublicationoftheopenmobilephoneplatformcalled“Android”inNovember5th,2011,“Android”wastakingshaperapidlyinthefieldofhandhelddevicesandespeciallyinthefieldoftheapplicationofthemobilephonewiththetappingenvironmentofthesourceoperatingsystemplatformandthefreeapplicationprogram.TheopenmobilephoneplatformwaspublishedbyGoogleandtheOpenHandsetAlliancewhichisconsistedof33mobilephonemanufacturersandsuppliers,thesoftwareandhardwaresuppliersandtheTelecommunicationcompanies.Thetopicofmypaperistostudythefacialrecognitiontechnology,makinguseofthehandleddevices,whichisbasedontheprogramplatformofandroid.Themaincontentsofthispaperareasfollowing:First,itusesintelligentmobilephonetogettheimageofhumanface.Then,itadjuststhefaceimagetomeettheneedoftherelativerecognitionalgorithm.Andlastitcomparesthefaceimagewiththeonesinthestoreroomofthefaceimagetogettheresultoftherecognition.Themajormethodsofthispaperisasfollowing:firstly,gettingthefaceimagesfromtheAndrewsphone,andmakingapretreatmenttothefaceimages,suchaswallpapersgraying,histogramequalization,smoothingfilteroftheimagesandsoon;secondly,achievingtheclasslibrarysharingoftheOpenCVplatformandtheAndroidplatformthroughtherulesoftheJavaNativeInterface.AndthenusingPrincipalComponentAnalysismethodtopickupthefeaturesofthefaceimagestoobtaintheeigenvectorswhichistheeigenvectors-faceinordertofinishthetrainingstage;thirdly,makingthefaceimageswhicharetobeidentifiedprojectontotheeigenvectorsandgettingthefaceimagewhichisthenearesttotheeigenvectorswiththemethodoftheclosesttofinishtherecognitionphrase.Thustheperson'sidentityisidentified.Theresultsofthispaperareasfollowings.Firstly,thecalculationwillbereducedandtherequirementsoftheprogramonthehardwarewillbeloweredwiththemethodsofthePrincipalComponentAnalysisandthedimensionalityreductionintherecognitionofpeople’sface.Meantime,therecognitionratewillbeimproved.PCAmethodhassomepracticalvalues.However,whentakingaphotograph,itwillcauseoneproblemthattheextractedfaceimageswillbedifferentduetothedifferenceofthedistancebetweenthephoneandtheface.Thustherecognitionratewillbeinfluenced.Keywords:Android;JNI;OpenCV;Imagepreprocessing;Facerecognition;PCA目錄1引言 11.1背景和意義 11.2人臉識(shí)別技術(shù)研究現(xiàn)狀 11.3本課題研究意義 21.4本文主要內(nèi)容及結(jié)構(gòu) 32研究方案及技術(shù)路線 42.1研究內(nèi)容 42.1.1研究對(duì)象 42.1.2制約識(shí)別率的關(guān)鍵問題 42.2研究方案 42.2.1相關(guān)人臉識(shí)別算法比較 42.2.2運(yùn)用程序功能分析 52.2.3研究方案的確定 62.3技術(shù)路線 63 人臉圖像獲取 73.1Android編程平臺(tái) 73.1.1Android開發(fā)平臺(tái)搭建 73.1.2Android開發(fā)簡介 83.2人臉圖像獲取 93.2.1Android應(yīng)用程序組件(Activity簡介) 93.2.2相關(guān)文件夾建立 113.2.3控制照相機(jī)照相 114圖像預(yù)處理 124.1彩圖灰度化 124.2直方圖均衡化 134.3圖像平滑濾波 144.4邊沿檢測(cè) 154.5人臉部位提取 175 PCA算法及實(shí)現(xiàn) 185.1AndroidNDK簡介 185.2PCA算法原理分析 185.2.1訓(xùn)練階段 195.2.2識(shí)別階段 205.3OpenCV實(shí)現(xiàn)PCA算法 205.3.1OpenCV簡介 205.3.2PCA算法實(shí)現(xiàn) 215.4.SO庫文件編譯 215.4.1JNI規(guī)則 215.4.2庫文件編譯 236研究結(jié)果及分析 247總結(jié) 257.1全文總結(jié) 257.2前景展望 25參考文獻(xiàn) 27致謝 28附錄 29附錄一:圖像預(yù)處理效果圖: 29附錄二:程序界面截圖 291引言1.1背景和意義21世紀(jì)是移動(dòng)互聯(lián)網(wǎng)發(fā)展的時(shí)代,未來也是移動(dòng)互聯(lián)網(wǎng)的時(shí)代。移動(dòng)互聯(lián)網(wǎng)的發(fā)展對(duì)人類的生活產(chǎn)生了巨大的影響。而移動(dòng)手持設(shè)備正是在3G移動(dòng)互聯(lián)網(wǎng)時(shí)代得到了飛速的發(fā)展,手機(jī)已成為人們普遍使用的小型移動(dòng)設(shè)備。2007年11月5日,android智能手機(jī)操作系統(tǒng)正是發(fā)布,由于其開放性,可定制性得到了眾多手機(jī)制造商的重視。2011年第一季度,Android在全球的市場(chǎng)份額首次超過塞班系統(tǒng),躍居全球第一。2012年2月數(shù)據(jù),Android占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng)52.5%的份額,中國市場(chǎng)占有率為68.4%。AndroidOS是Google發(fā)布基于Java并運(yùn)行在Linux內(nèi)核上的手機(jī)操作系統(tǒng)。Android操作系統(tǒng)采用分層架構(gòu),從高層到底層一共四層,分別是應(yīng)用程序?qū)?、?yīng)用程序框架層,系統(tǒng)層和Linux核心層。而Android底層方面使用C/C++語言作為開發(fā)語言。隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應(yīng)用程序。從而受到眾多開發(fā)者的喜愛,成為真正意義上的開放式操作系統(tǒng)[2]。隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,手機(jī)已經(jīng)超越了它最初的設(shè)計(jì)本能。它不僅僅應(yīng)用于通訊這單一功能,還是移動(dòng)的支付平臺(tái)、管理著用戶的眾多信息。所以手機(jī)的信息安全也成為急于解決的技術(shù)問題。本文就是運(yùn)用Android編程平臺(tái),在手機(jī)上進(jìn)行人臉識(shí)別技術(shù)的研究。從而對(duì)手機(jī)使用者的身份進(jìn)行確認(rèn),保障手機(jī)所有者的信息、財(cái)產(chǎn)等安全。1.2人臉識(shí)別技術(shù)研究現(xiàn)狀人臉識(shí)別的研究歷史比較悠久,Galton在1888年和1910年就分別在Nature兩篇關(guān)于利用人臉進(jìn)行身份識(shí)別的文章。自動(dòng)人臉識(shí)別的研究最早的論文出現(xiàn)于1965年Chan和Bledsoe在PanoramicResearchInc.發(fā)表的技術(shù)報(bào)告。近年來,人臉識(shí)別更是得到了長足的發(fā)展,每年都有大量的學(xué)術(shù)論文發(fā)表。人臉識(shí)別研究的歷史現(xiàn)狀大體劃分為以下三個(gè)階段[1]:第一階段(1964-1990)。這一時(shí)期人臉識(shí)別通常作為一個(gè)一般性的模式識(shí)別問題被研究,所采用的技術(shù)方案是基于人臉幾何結(jié)構(gòu)特征的方法。這集中體現(xiàn)在人們對(duì)于剪影的研究上,人們對(duì)面部剪影曲線的結(jié)構(gòu)特征提取與分析進(jìn)行了大量研究。人工神經(jīng)網(wǎng)絡(luò)也一度被研究員用于人臉識(shí)別問題中。第二階段(1991-1997)。在這短暫的時(shí)間里人臉識(shí)別技術(shù)進(jìn)入高潮期,碩果累累。不但誕生了若干代表性的人臉識(shí)別算法,而且出現(xiàn)了商業(yè)化運(yùn)作的人臉識(shí)別系統(tǒng)。最為著名的Identix的FaceIt。在這一階段所提出的算法在理想圖像采集條件、對(duì)象配合、中小規(guī)模正面人臉數(shù)據(jù)庫上達(dá)到了非常好的性能。從技術(shù)方案上來看,2D人臉圖像線性子空間判別分析、統(tǒng)計(jì)表觀模型、統(tǒng)計(jì)模式識(shí)別是這一階段的主流技術(shù)。第三階段(1998-現(xiàn)在)。由于主流的人臉識(shí)別技術(shù)對(duì)光照、姿態(tài)等非理想條件或是用戶不配合造成的變化條件下魯棒性比較差。因此成為時(shí)下研究的熱點(diǎn)。如此同時(shí)商業(yè)系統(tǒng)進(jìn)一步發(fā)展。而非線性建模方法、統(tǒng)計(jì)學(xué)理論、基于Boosting的學(xué)習(xí)技術(shù)、基于3D模型建模與人臉識(shí)別方法等逐漸成為備受重視的技術(shù)發(fā)展趨勢(shì)。人臉識(shí)別技術(shù)是從最初的單一的正面灰度圖像的識(shí)別,經(jīng)過對(duì)多姿態(tài)人臉識(shí)別研究,發(fā)展到能夠?qū)崿F(xiàn)動(dòng)態(tài)識(shí)別,目前正在向三維人臉識(shí)別的方向發(fā)展。與其他的學(xué)科不同的是:人臉識(shí)別技術(shù)融合了數(shù)字圖像處理、計(jì)算機(jī)圖像學(xué)、模式識(shí)別、計(jì)算機(jī)視覺、人工神經(jīng)網(wǎng)絡(luò)和生物特征等多個(gè)學(xué)科的理論和方法。另外人臉自身所處環(huán)境的復(fù)雜性,如表情、姿態(tài)、圖像的環(huán)境光照強(qiáng)度等條件的變化以及人臉上的遮擋物等,都會(huì)使人臉識(shí)別方法受到很大的影響。因此,人臉識(shí)別技術(shù)仍然是21世紀(jì)具有挑戰(zhàn)性的課題。1.3本課題研究意義人臉識(shí)別,是一種基于人的臉部特征信息進(jìn)行身份認(rèn)證的生物特征識(shí)別技術(shù)。相比指紋識(shí)別技術(shù),人臉識(shí)別具有非接觸、識(shí)別速度快、準(zhǔn)確率高等優(yōu)點(diǎn),因而深受歡迎并且應(yīng)用廣泛,特別是比起IC卡更具發(fā)展優(yōu)勢(shì)。除了重要行業(yè)和領(lǐng)域的應(yīng)用外,人臉識(shí)別技術(shù)在智能門禁、門鎖、考勤、手機(jī)、數(shù)碼相機(jī)、智能玩具等民用市場(chǎng)也有著廣泛的應(yīng)用。人臉識(shí)別主要有一下幾種應(yīng)用:身份鑒定:在鑒定模式下,可以快速的計(jì)算出實(shí)時(shí)采集到的面紋數(shù)據(jù)與人臉數(shù)據(jù)庫中的已知人員的面紋數(shù)據(jù)之間的相似度,給出一個(gè)按相似度遞減排列的可能的人員列表,或是簡單的返回鑒定結(jié)果和相對(duì)應(yīng)的可信度。身份鑒定可用于電腦、網(wǎng)絡(luò)安全、銀行業(yè)務(wù)、智能訪問控制、邊境控制等領(lǐng)域。身份確認(rèn):在確認(rèn)模式下,面紋數(shù)據(jù)可以存儲(chǔ)在智能卡中或是數(shù)碼記錄中,只需要簡單地將實(shí)時(shí)面紋數(shù)據(jù)與存儲(chǔ)的數(shù)據(jù)相比對(duì),如果可信度超過一個(gè)指定的值,則比對(duì)成功身份得以確認(rèn)。視頻監(jiān)控應(yīng)面像捕捉,人臉識(shí)別技術(shù)可以再監(jiān)控范圍中跟蹤一個(gè)人和確定的位置[1]。面像數(shù)據(jù)壓縮能將面紋數(shù)據(jù)壓縮到小于84字節(jié)以內(nèi)便可以應(yīng)用于智能卡、條形碼或是其他存儲(chǔ)空間有限的設(shè)備中。近年來,隨著歐美發(fā)達(dá)國家人臉識(shí)別技術(shù)開始進(jìn)入實(shí)用階段后,人臉識(shí)別迅速成為市場(chǎng)熱點(diǎn)。據(jù)調(diào)查報(bào)告顯示:2007年全球生物識(shí)別市場(chǎng)收入超過30億美元,并且今后5年內(nèi)將以每年8億美元的幅度遞增[9]。新技術(shù)的應(yīng)用帶來了全新的數(shù)字化生活方式??梢韵胂?,在人臉識(shí)別時(shí)代,走入地鐵需要刷卡、去銀行取錢需要輸入密碼、上班考勤需要按指紋等方式都將改變。1.4本文主要內(nèi)容及結(jié)構(gòu)本論文所完成的任務(wù)是基于Android編程平臺(tái),在Android手機(jī)上實(shí)現(xiàn)人臉識(shí)別功能。對(duì)手機(jī)使用者的身份進(jìn)行確認(rèn),保證手機(jī)所有者的信息、財(cái)產(chǎn)安全等。本論文在總體結(jié)構(gòu)上共分為5章。第1章引言,本章介紹了Android和人臉識(shí)別的背景、意義。第2章研究方案及技術(shù)路線,本章主要介紹人臉識(shí)別的各種算法、方案和實(shí)現(xiàn)的技術(shù)路線。第3章圖像的獲取,本章介紹了Android編程平臺(tái)的基礎(chǔ)知識(shí),并通過控制手機(jī)攝像頭進(jìn)行人臉的捕捉,人臉數(shù)據(jù)庫的建立,圖像的存取。第4章圖像預(yù)處理,本章介紹了相關(guān)圖像處理的算法以及實(shí)現(xiàn),其中包括彩色圖像的灰度化、灰度圖像的直方圖均衡化、圖像的平滑濾波、邊緣檢測(cè)等。第5章PCA算法及實(shí)現(xiàn),本章介紹了JNI規(guī)則,以及OpenCV編程平臺(tái)與Android編程實(shí)現(xiàn)類庫的共享。利用OpenCV實(shí)現(xiàn)PCA算法。第6章研究結(jié)果及分析,本章對(duì)研究結(jié)果敘述,以及分析。第7章結(jié)論,對(duì)全文進(jìn)行總結(jié),并對(duì)該課題的前景進(jìn)行展望。2研究方案及技術(shù)路線2.1研究內(nèi)容2.1.1研究對(duì)象本文涉及的研究對(duì)象是從智能手機(jī)的攝像頭獲取的人臉圖像,并對(duì)人臉圖像進(jìn)行一定的處理,讓其達(dá)到相關(guān)識(shí)別算法的要求,適合與人臉庫里面的圖像進(jìn)行對(duì)比,得出結(jié)果。2.1.2制約識(shí)別率的關(guān)鍵問題目前隨著人臉識(shí)別技術(shù)的發(fā)展,在識(shí)別率方面有了較大的提高,但是在相關(guān)技術(shù)方面仍然面臨著諸多問題。主要表現(xiàn)在以下幾個(gè)方面:(1)采集設(shè)備:采集設(shè)備的性能和采集時(shí)的設(shè)置使得獲取的人臉圖像數(shù)據(jù)的變化較大,如何解決這個(gè)問題也值得關(guān)注。(2)光照、背景的影響:光照是影響人臉識(shí)別性能的最關(guān)鍵因素,背景的不同也影響著識(shí)別的準(zhǔn)確率。對(duì)該問題的解決直接關(guān)系著人臉識(shí)別應(yīng)用程序的可靠性、識(shí)別的準(zhǔn)確率。(3)人臉姿態(tài):人臉姿態(tài)也是目前人臉識(shí)別實(shí)用化的一個(gè)巨大的障礙。如何將各種姿態(tài)統(tǒng)一到標(biāo)準(zhǔn)人臉,也是提高識(shí)別準(zhǔn)確率的關(guān)鍵之所在。(4)表情問題:人臉表情的不同也會(huì)影響數(shù)據(jù)的采集和提取,這也將影響到后期的算法處理。2.2研究方案2.2.1相關(guān)人臉識(shí)別算法比較人臉識(shí)別的方法大致可以分為基于幾何特征的方法、基于模板匹配的方法、隱馬爾可夫模型的方法、基于神經(jīng)網(wǎng)絡(luò)的方法、特征臉方法。(1)基于幾何特征:幾何特征的識(shí)別方法首先將人臉用一個(gè)幾何特征矢量表示,用模式識(shí)別中的層次聚類思想來對(duì)人臉進(jìn)行識(shí)別。幾何特征矢量是以人臉器官的形狀和幾何關(guān)系為基礎(chǔ)的特征矢量,其分量通常包括人臉自定兩點(diǎn)間的歐氏距離、曲率、角度。人臉器官的關(guān)鍵點(diǎn)分別對(duì)應(yīng)于不同的積分投影方式產(chǎn)生的波峰波谷。(2)基于模板匹配:模板匹配的方法大多是用歸一化互相關(guān),直接計(jì)算兩幅圖像之間的匹配程度。由于這種方法要求兩幅圖像上的目標(biāo)要有相同的尺度、取向和光照條件,所以預(yù)處理要做尺度歸一化和灰度歸一化的工作。識(shí)別時(shí),未分類的圖像跟數(shù)據(jù)庫中的所有圖像數(shù)據(jù)進(jìn)行比較,采用相關(guān)作為典型的匹配函數(shù)。(3)隱馬爾可夫模型:隱馬爾可夫模型(hiddenMarkovmodel,HMM)是用于描述信號(hào)系統(tǒng)特征的一種常見的統(tǒng)計(jì)模型,被廣泛應(yīng)用于語音判定中。人臉面部特征的分布都依照一種自然的順序,即從上到小、從左到右,即使人臉在平面和垂直方向上發(fā)生旋轉(zhuǎn),這種順序也不會(huì)變化,但是實(shí)現(xiàn)起來的難度較大。(4)基于神經(jīng)網(wǎng)絡(luò)識(shí)別:神經(jīng)網(wǎng)絡(luò)的方法是近年來比較活躍的一個(gè)研究方向。人工神經(jīng)網(wǎng)絡(luò)(ANN)是一種以大的量處理單元(神經(jīng)元)為節(jié)點(diǎn),處理單元之間實(shí)現(xiàn)加權(quán)值互聯(lián)的拓?fù)浣Y(jié)構(gòu),處理單元是人類大腦神經(jīng)單元的簡化。Cottrell等人使用級(jí)聯(lián)BP神經(jīng)網(wǎng)絡(luò)進(jìn)行人臉識(shí)別,對(duì)部分受損的人像、光照有所變化的人像,個(gè)人識(shí)別能力較好,但是神經(jīng)元數(shù)目通常很多,訓(xùn)練時(shí)間很長,具有固有缺陷:收斂速度慢、容易陷入局部極小、先驗(yàn)參數(shù)多且參數(shù)的確定憑經(jīng)驗(yàn)而定[8]。(5)特征臉識(shí)別:特征臉法是人臉識(shí)別中常用的一種方法。該方法主要是從人臉圖像的全局出發(fā),運(yùn)用K-L變換理論,在原始人臉空間中求得一組正交向量,并以此構(gòu)成新的人臉空間,使所有人臉的均方差最小,達(dá)到將為的目的。降維的思想,降低了運(yùn)算量,有利于此算法運(yùn)用于硬件配置相對(duì)中低端的手持設(shè)備中。但是此算法也存在缺陷:特征臉方法容易受角度、光照、表情等干擾導(dǎo)致識(shí)別率下降。通過以上算法的介紹,結(jié)合算法的特征還有應(yīng)用的平臺(tái),我們選擇PCA算法。它可以為我們減少大量的計(jì)算,從而提高程序運(yùn)行的效率,因?yàn)閷?shí)在手機(jī)上運(yùn)行我們更應(yīng)該考慮到運(yùn)算量的大小,綜合考慮本文的主要算法實(shí)現(xiàn)我們采用PCA算法。2.2.2運(yùn)用程序功能分析本文應(yīng)用程序最主要的功能就是要能識(shí)別出人臉,首先該系統(tǒng)需要對(duì)通過攝像頭拍照而獲取到的原始的人臉圖片進(jìn)行一系列處理才可進(jìn)行下一步的工作,該處理過程也稱圖像預(yù)處理。預(yù)處理這個(gè)模塊在整個(gè)人臉識(shí)別系統(tǒng)的開發(fā)過程中占有很重要的地位,只有預(yù)處理模塊做的好,才可能很好的完成后面的特征提取這一關(guān)鍵模塊。因此本設(shè)計(jì)中所要完成的主要功能如下所述:圖像的獲取功能:主要是通過手機(jī)攝像功能獲取人臉圖像。圖像的存取功能:在手機(jī)SD卡中建立相關(guān)文件夾,用于存取人臉圖像,其中包括訓(xùn)練圖像、待識(shí)別圖像以及相關(guān)的數(shù)據(jù)。圖像的預(yù)處理功能:主要是對(duì)獲取的圖像進(jìn)行灰度化、直方圖均衡化、平滑濾波、邊緣檢測(cè)等處理。圖像特征提取的功能:按照PCA算法對(duì)圖像進(jìn)行特征提取。識(shí)別功能:這部分功能主要實(shí)現(xiàn)待識(shí)別圖像與訓(xùn)練后圖像數(shù)據(jù)進(jìn)行比對(duì),得出相應(yīng)的結(jié)果。2.2.3研究方案的確定通過以上分析本文的研究方案確定為以下幾點(diǎn):熟悉Java編程語言為進(jìn)一步熟悉Android編程平臺(tái)打下基礎(chǔ),初步實(shí)現(xiàn)利用Android手機(jī)實(shí)現(xiàn)拍照和存取功能。進(jìn)一步學(xué)習(xí)數(shù)字圖像處理相關(guān)知識(shí),為圖像的預(yù)處理打下堅(jiān)實(shí)的基礎(chǔ)。研究各圖像處理的算法,然后進(jìn)行編程運(yùn)行,通過編程的實(shí)際運(yùn)行效果進(jìn)行相應(yīng)的變換、改進(jìn)。主要預(yù)處理步驟如圖2-1:圖像預(yù)處理層次圖。圖像預(yù)處理彩色圖像的灰度化圖像預(yù)處理彩色圖像的灰度化灰度圖像的直方圖均衡化圖像的平滑濾波圖像的邊緣檢測(cè)圖2-1圖像預(yù)處理層次圖圖像預(yù)處理獲取標(biāo)準(zhǔn)人臉后,學(xué)習(xí)人臉識(shí)別相關(guān)算法,對(duì)主要人臉識(shí)別算法進(jìn)行總結(jié)、歸納。確定本課題人臉識(shí)別算法,并對(duì)算法認(rèn)真理解、研究。最終實(shí)現(xiàn)人臉識(shí)別算法,完成本課題要求。2.3技術(shù)路線由以上分析,技術(shù)路線如圖2-2:人臉識(shí)別技術(shù)路線。相關(guān)文獻(xiàn)閱讀學(xué)習(xí)相關(guān)文獻(xiàn)閱讀學(xué)習(xí)C/C++、Java基礎(chǔ)復(fù)習(xí)數(shù)字圖像處理學(xué)習(xí)初步框架構(gòu)想圖像的預(yù)處理知識(shí)的準(zhǔn)備PCA算法學(xué)習(xí)程序框架的搭建圖像預(yù)處理PCA算法實(shí)現(xiàn)程序完善運(yùn)行結(jié)果分析程序優(yōu)化查資料圖2-2人臉識(shí)別技術(shù)路線人臉圖像獲取3.1Android編程平臺(tái)3.1.1Android開發(fā)平臺(tái)搭建本文android開發(fā)平臺(tái)是基于Windows環(huán)境下搭建的,具體方法步驟如下:在Oracle官方網(wǎng)站免費(fèi)下載最新的JDK安裝程序,網(wǎng)址為:://oracle.下載完成后按照默認(rèn)路徑安裝JDK軟件。打開DOSCMD命令窗口輸入java-version命令檢查是否安裝成功。若成功會(huì)顯示JDK版本號(hào)等相關(guān)信息。接下來配置環(huán)境變量:在系統(tǒng)環(huán)境變量里添加PATH變量,內(nèi)容為JDK安裝目錄中bin文件夾路徑,并且同時(shí)添加CLASSPATH變量,內(nèi)容為JDK安裝目錄中l(wèi)ib和demo的路徑。并且用;來隔開的。登陸Android官方網(wǎng)站://developer.android,下載對(duì)應(yīng)版本的SDK安裝包。下載完成后只需要解壓,不需要安裝。但是要同樣需要配置環(huán)境變量。將SDK解壓后的目錄下的tools目錄的絕對(duì)路徑添加到系統(tǒng)Path中,然后同樣用DOSCMD命令android–h檢查是否安裝成功。登陸Eclipse官方網(wǎng)站://,下載適用版本的Eclipse.將下載完成的Eclipse安裝包解壓硬盤。雙擊eclipse.exe打開eclipse軟件,在Help->InstallNewSoftware,安裝ADT。完成后重啟eclipse,在Widows->Preferences下選擇android->Browse添加androidSDK路徑,單擊OK完成。這樣android開發(fā)環(huán)境基本搭建完成。Android開發(fā)環(huán)境搭建好了就可已進(jìn)行android應(yīng)用程序的開發(fā)了。3.1.2Android開發(fā)簡介程序庫表面管理程序庫表面管理媒體框架SQLiteOpenGLFreeTypeWebKitSGLSSLlibc應(yīng)用程序框架活動(dòng)管理窗體管理視圖系統(tǒng)包管理管理資源管理位置管理通知管理內(nèi)容提供Linux內(nèi)核顯示驅(qū)動(dòng)相機(jī)驅(qū)動(dòng)IPC驅(qū)動(dòng)鍵盤驅(qū)動(dòng)WiFi驅(qū)動(dòng)電源管理閃存驅(qū)動(dòng)音頻驅(qū)動(dòng)應(yīng)用程序活動(dòng)管理活動(dòng)管理活動(dòng)管理活動(dòng)管理圖3-1Android平臺(tái)架構(gòu)圖Android平臺(tái)是在Linux2.6.25版本的基礎(chǔ)上改造的,提供了各種的函數(shù)庫和完整的應(yīng)用程序框架。我們把Android大體上分為4層:Linux內(nèi)核,系統(tǒng)開發(fā)庫,應(yīng)用程序框架以及應(yīng)用程序。具體參看圖3-1:Android平臺(tái)架構(gòu)圖應(yīng)用程序是包括Android平臺(tái)配置的一套應(yīng)用程序集,以及用戶基于Android平臺(tái)的應(yīng)用程序框架,使用Java語言自行開發(fā)的程序。應(yīng)用程序框架:開發(fā)者可以完成使用與那些內(nèi)核應(yīng)用程序相同的框架,這些框架是用于簡化和重用應(yīng)用程序的組件。通過應(yīng)用程序,用戶自定義的程序可以執(zhí)行用戶程序之外的預(yù)設(shè)功能,這樣可以極大的減少用戶程序的額外工作量。系統(tǒng)開發(fā)庫:Android定義了一套C/C++庫供Android平臺(tái)的其他組件使用。這些功能通過Android應(yīng)用程序框架提供給開發(fā)者,開發(fā)者不能直接使用這些庫。Linux內(nèi)核:Android的核心系統(tǒng)服務(wù)依賴于Linux2.6內(nèi)核,如內(nèi)存管理、進(jìn)程管理、驅(qū)動(dòng)模型等。Linux內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層[5]。3.2人臉圖像獲取3.2.1Android應(yīng)用程序組件(Activity簡介)在android中,Activity擁有四種基本狀態(tài):(1)Active/Running狀態(tài),一個(gè)新Activity啟動(dòng)入棧后,它在屏幕最前端,處于棧的最頂端,此時(shí)它處于可見并可和用戶交互的激活狀態(tài)。(2)Paused狀態(tài),當(dāng)Activity被另一個(gè)透明或者Dialog樣式Activity覆蓋時(shí)的狀態(tài)。此時(shí)它依然與窗口管理器保持連接,系統(tǒng)繼續(xù)維護(hù)其內(nèi)部狀態(tài),所以它仍然可見,但它已經(jīng)失去了焦點(diǎn)故不可與用戶交互。(3)Stopped狀態(tài),當(dāng)Activity被另外一個(gè)Activity覆蓋、失去焦點(diǎn)并不可見時(shí)處于Stopped狀態(tài)。(4)Killed狀態(tài),Activity被系統(tǒng)殺死回收或者沒有被啟動(dòng)時(shí)處于Killed狀態(tài)。Android是通過一種Activity棧的方式來管理Activity的,一個(gè)Activity的實(shí)例的狀態(tài)決定它在棧中的位置。處于前臺(tái)的Activity總是在棧的頂端,當(dāng)前臺(tái)的Activity因?yàn)楫惓;蚱渌虮讳N毀時(shí),處于棧第二層的Activity將被激活,上浮到棧頂。當(dāng)新的Activity啟動(dòng)入棧時(shí),原Activity會(huì)被壓入到棧的第二層。一個(gè)Activity在棧中的位置變化反映了它在不同狀態(tài)間的轉(zhuǎn)換[3]。Activity的狀態(tài)與它在棧中的位置關(guān)系如圖3-2所示:重新激活失去焦點(diǎn)不在棧頂?shù)腁ctivity,可能被系統(tǒng)銷毀、收回資源重新激活失去焦點(diǎn)不在棧頂?shù)腁ctivity,可能被系統(tǒng)銷毀、收回資源Activity1(Running)Activity2(Paused/Stopped/Killed)Activity3(Paused/Stopped/Killed)………圖3-2Activity的狀態(tài)與它在棧中的位置關(guān)系圖Android程序員可以決定一個(gè)Activity的“生”,但不能決定它的“死”,也就時(shí)說程序員可以啟動(dòng)一個(gè)Activity,但是卻不能手動(dòng)的“結(jié)束”一個(gè)Activity。每一個(gè)Activity都有自己的生命周期,而Activity的生命周期統(tǒng)一交給系統(tǒng)管理。如圖3-3:Activity生命周期示意圖。onCreate()onStart()onCreate()onStart()onResume()onPause()ActivitystartsActivityisrunningonStop()onDestroy()onRestart()ActivityisshutdownProcessiskilled圖3-3Activity生命周期示意圖Android平臺(tái)定義了一種稱為Intent(意向)的異步消息,該消息用于激活A(yù)ctivity、Service和BroadcastReceiver組件。具體用法如下:Intentintent=newIntent();Intent.setClass(FaceDetectorActivity.this,Resgistered.class);startActivity(intent);3.2.2相關(guān)文件夾建立Android文件的實(shí)體操作包括文件的創(chuàng)建和刪除,本文將用到文件夾的建立,文件夾主要用于存儲(chǔ)相關(guān)圖像。程序中主要的核心代碼如下://判斷是否插入SD卡booleansdvalue=Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);//創(chuàng)建文件夾FilefileTake=newFile(String_SDroot+"/FaceDetector/Take"); if(!fileTake.exists()) { fileTake.mkdirs(); }3.2.3控制照相機(jī)照相使用Camera類的“open”方法獲得一個(gè)照相機(jī)的接口。(Cameracamera=Camera.open();)通過照相機(jī)的接口的setPreviewDisplay()方法可以指定承載預(yù)覽內(nèi)容的視圖組件,通過setPreviewCallback()方法可以設(shè)定對(duì)預(yù)覽事件的回調(diào)處理。設(shè)置完成后可以通過照相機(jī)接口的setPreview()和stopPreview()方法來啟動(dòng)或是停止對(duì)照片的預(yù)覽。并通過takePicture()方法進(jìn)行照片拍攝,通過快門事件的回調(diào)函數(shù),開發(fā)者可以處理開門關(guān)閉后的事件,而通過獲取照片事件的回調(diào)接口,開發(fā)者可以獲取照相機(jī)所得到的圖片數(shù)據(jù),從而進(jìn)行下面的圖像預(yù)處理等等操作。最后通過release()方法來斷開與照相機(jī)設(shè)備的連接,并釋放該照相機(jī)接口有關(guān)的資源。程序中核心代碼如下:/*啟動(dòng)Camera*/mCamera=Camera.open();mCamera.setPreviewDisplay(holder);publicvoidtakePicture(){if(mCamera!=null){ mCamera.takePicture(null,null,jpegCallback);}}//通過快門事件回調(diào)存儲(chǔ)圖像CameraBitmap=BitmapFactory.decodeByteArray(_data,0,_data.length);FilemyCaptureFile=newFile("/sdcard/FaceDetector/Take/takePH.jpg");BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(myCaptureFile));CameraBitmap.setDensity(8);CameraBitmappress(BitmappressFormat.JPEG,100,bos);4圖像預(yù)處理在人臉圖像的產(chǎn)生、傳輸和變換上,往往由于多種因素使得圖像產(chǎn)生變劣或是退化,劣變退化就是產(chǎn)生的圖像與原始景物之間的某些差異,這些差異一般包括人臉圖像對(duì)比度差、人臉邊沿模糊、噪聲較大等。這些退化對(duì)下一步的處理帶來了困難和不便,因此這很有必要對(duì)人臉圖像進(jìn)行一些恰當(dāng)?shù)奶幚?,改善圖像的視覺效果,從而提高圖像的清晰度,便于后期的圖像識(shí)別提高識(shí)別率,這一過程就是圖像的預(yù)處理。人臉圖像預(yù)處理的方法主要有:人臉圖像的灰度化、人臉圖像的二值化、人臉圖像的幾何校正、直方圖均衡化、人臉圖像的濾波、圖像的銳化、像素平均法等。4.1彩圖灰度化人臉識(shí)別技術(shù)的研究一般是一灰度圖像作為研究對(duì)象。彩色圖像包含了人臉較多的信息,直接將彩色圖像作為研究對(duì)象這樣就是的處理的過程變得復(fù)雜化,不利于識(shí)別。而灰度圖在保留了人臉信息量不丟失的情況下,加少了信息總量,為后期的識(shí)別算法提供了可行性。將彩色圖像灰度化,通常采用以下經(jīng)驗(yàn)公式:(4-1)具體過程如:圖4-1彩色圖像的灰度變換讀取圖像數(shù)據(jù)獲取RGB分量讀取圖像數(shù)據(jù)獲取RGB分量計(jì)算像素點(diǎn)灰度值像素點(diǎn)重新賦值得到灰度圖圖4-1彩色圖像的灰度變換Android程序?qū)崿F(xiàn)的主要代碼:intcolor=pix_result[width*i+j];intred=Color.red(color);intgreen=Color.green(color);intblue=Color.blue(color);color=(int)((float)red*0.3+(float)green*0.59+(float)blue*0.11)&0xFF;4.2直方圖均衡化圖像的灰度直方圖是圖像各個(gè)像素點(diǎn)灰度值的統(tǒng)計(jì)度量。運(yùn)用直方圖能很好的反應(yīng)圖像的大體概貌以及圖像灰度值得大體分別情況。如圖像中的目標(biāo)、背景的分布情況,還可以計(jì)算圖像中的最大最小灰度值、平均灰度值、對(duì)比度等。應(yīng)用于圖像的預(yù)處理上我們稱其為直方圖均衡化(也稱直方圖修正),其基本的思想是將各灰度級(jí)分量盡量平均分布在整個(gè)圖像空間,在直方圖上的表現(xiàn)為由密集的灰度分布變?yōu)榫鶆虻姆植?,從而增?qiáng)圖像的對(duì)比度。此外,直方圖均衡化還可以減少管線對(duì)圖像的干擾、影響,使得對(duì)圖像的特征提取更加的容易,同時(shí)提高了圖像的主觀質(zhì)量。實(shí)踐證明,直方圖的均衡化是一種有效的圖像增強(qiáng)方法。直方圖均衡化就是要建立一個(gè)T變換,對(duì)于連續(xù)的圖像來說:用變量R來代表待增強(qiáng)圖像的灰度級(jí)。假設(shè)R被歸一化到區(qū)間[0,1],且R=0代表黑色、R=1代表白色。之后用一個(gè)離散公式并允許像素值在區(qū)間[0,L-1]。這樣我們建立變換:(4-2)在輸入圖像中,對(duì)于每個(gè)像素值R產(chǎn)生一個(gè)灰度值S。滿足一下條件:(1)在區(qū)間上為單值且單調(diào)函數(shù)(2)當(dāng)時(shí),這樣就保證了的反變換存在,單調(diào)的條件就保證了輸出圖像是從黑到白的順序,最后由S到R的反變換可表示為:(4-3)對(duì)于離散的數(shù)字圖像,其方法可以表示為:(4-4)其中A為圖像面積,L為圖像灰度級(jí),表示灰度級(jí)為k的像素點(diǎn)的總數(shù)[2]。算法實(shí)現(xiàn)流程,如圖3-2直方圖均衡化算法流程獲取源圖像信息統(tǒng)計(jì)個(gè)灰度級(jí)概率密度獲取源圖像信息統(tǒng)計(jì)個(gè)灰度級(jí)概率密度源圖像直方圖均衡化返回均衡化的像素點(diǎn)數(shù)組圖4-2直方圖均衡化算法流程Android中核心代碼:Gray=PixelsGray[i];FrequenceGray[Gray]++;SumGray[i]=SumGray[i-1]+FrequenceGray[i];SumGray[i]=(int)(SumGray[i]*255/length);PixelsGray[k]=SumGray[PixelsGray[k]];returnPixelsGray;4.3圖像平滑濾波人臉圖像在采集過程中,受到各種干擾時(shí)不可避免的,并在獲得的圖像中留下了痕跡。為了避免噪聲對(duì)圖像的特征抽取的影響,需要消除圖像的噪聲?,F(xiàn)在消除噪聲的主要方法分為兩類:一類是全局處理,包括Wiener濾波、Kal-man濾波等方法。二類是使用局部算子,如均值濾波、中值濾波、梯度倒數(shù)加權(quán)濾波等經(jīng)典算法。本文就是運(yùn)用的均值濾波方法對(duì)獲得的人臉圖像進(jìn)行平滑濾波。均值濾波就是對(duì)信號(hào)進(jìn)行局部平均,以平均值來代表該像素點(diǎn)的灰度值,換言之,每一個(gè)像素值用其局部鄰域內(nèi)所有值得平均值來代替:(4-5)其中m為鄰域內(nèi)像素點(diǎn)的總數(shù)。如在像素點(diǎn)處取3x3的鄰域,這樣得到公式如下:(4-6)其中值得注意的是鄰域N控制著濾波程度,對(duì)應(yīng)大卷積模板的大尺度會(huì)加大濾波程度,但是這樣會(huì)導(dǎo)致圖像細(xì)節(jié)的損失。在設(shè)計(jì)線性平滑濾波器的時(shí)候,選擇濾波權(quán)值使得濾波器只有一個(gè)峰值,并且在水平和垂直方向上市對(duì)稱的,下面就是程序中運(yùn)用的一個(gè)典型3x3平滑濾波器的權(quán)值模板:線性平滑濾波器除去了高頻成分和圖像中的銳化細(xì)節(jié)。如把階躍變化平滑成逐漸變化,使得精確定位的能力下降[4]。程序中實(shí)現(xiàn)的核心代碼如下:average=(1/4*data[i*width+j]+1/8*data[i*width+j-1]+1/8*data[i*width+j+1]+1/8*data[(i-1)*width+j]+1/16*data[(i-1)*width+j-1]+1/16*data[(i-1)*width+j+1]+1/8*data[(i+1)*width+j]+1/16*data[(i+1)*width+j-1]+1/16*data[(i+1)*width+j+1])/9;filterData[i*width+j]=(int)(average) filterData[i]=(filterData[i]-min)*255/(max-min);4.4邊沿檢測(cè)圖像的邊緣是圖像非常重要的特征之一。圖像的邊緣保留了原始圖像中相當(dāng)重要的部分信息,而又使得總的數(shù)據(jù)量得以減少,這為后續(xù)的算法,也就是特征提取的計(jì)算量得以大大的減少,這正是符合特征提取的要求。而用于圖像識(shí)別的邊緣提取比視覺效果增強(qiáng)的邊緣提取要復(fù)雜一些。邊緣對(duì)應(yīng)于物體的邊界,在灰度圖像中灰度值變化劇烈的地方符合這一要,一般會(huì)以這個(gè)特征來提取圖像的邊緣。灰度值得劇烈變化可以度量邊緣,由此我們想到在數(shù)學(xué)上,最直觀的方法就是微分。在此之前我們應(yīng)該對(duì)輸入圖像進(jìn)行噪聲消除的處理,這樣保證圖像中的高頻成分是原始圖像中的。經(jīng)典的邊緣檢測(cè)是以原始圖像為基礎(chǔ),對(duì)圖像中的像素考察它的某個(gè)領(lǐng)域內(nèi)的灰度階躍變化,利用邊緣鄰近一階或是二階方向?qū)?shù)的變化規(guī)律進(jìn)行邊緣檢測(cè)。比較經(jīng)典的常用的算法有:查分邊緣檢測(cè)、Roberts邊緣檢測(cè)算子、Sobel邊緣檢測(cè)算子、Prewitt邊緣檢測(cè)算子等。本文就是采用Sobel算子進(jìn)行圖像的邊緣檢測(cè)。對(duì)于數(shù)字圖像而言,可以用一階差分來代替一階微分。對(duì)圖像x,y兩個(gè)方向進(jìn)行差分:(4-7)(4-8)求梯度時(shí),對(duì)平方和的開方運(yùn)算,可以用兩個(gè)分量的絕對(duì)值之和來表示。如下公式:(4-9)Sobel算子是一種梯度幅值的計(jì)算方法,通過對(duì)數(shù)字圖像f(x,y)的每一個(gè)像素的四鄰域點(diǎn)的灰度值的加權(quán)差,與鄰點(diǎn)的權(quán)值大小。其先做成加權(quán)平均,再微分,再求梯度。具體的算法表達(dá)如下:(4-10)(4-11)根據(jù)以上,定義Sobel算子如下:(4-12)Sobel算子的核心是兩個(gè)3x3的卷積核,通過這兩個(gè)模板在圖像區(qū)域中移動(dòng),完成圖像中每個(gè)像素點(diǎn)與這兩個(gè)卷積核的卷積運(yùn)算[4]。Sobel算子卷積核如下:由于算法的復(fù)雜度本文采用OpenCV中的庫函數(shù)實(shí)現(xiàn)圖像的邊緣檢測(cè),具體實(shí)現(xiàn)核心代碼如下:pImgSobelgray=cvCreateImage(cvGetSize(pImage),IPL_DEPTH_16S,1);cvSobel(pImg8uSmooth,pImgSobelgray,0,1,3);4.5人臉部位提取在用手機(jī)進(jìn)行拍照時(shí),拍下來的人臉圖像含有背景,這就為后面的識(shí)別帶來了誤差。本文將通過OpenCV中目標(biāo)檢測(cè)函數(shù),對(duì)人臉部位進(jìn)行檢測(cè),并將人連部位保存為圖像存儲(chǔ)下來供后面識(shí)別,這樣就減少了背景對(duì)識(shí)別的影響[10]。目標(biāo)檢測(cè)方法最初由PaulViola提出,并由RainerLienhart對(duì)這一方法進(jìn)行了改善.首先,利用樣本(大約幾百幅樣本圖片)的HARR特征進(jìn)行分類器訓(xùn)練,得到一個(gè)級(jí)聯(lián)的boosted分類器。訓(xùn)練樣本分為正例樣本和反例樣本,其中正例樣本是指待檢目標(biāo)樣本(例如人臉或汽車等),反例樣本指其它任意圖片,所有的樣本圖片都被歸一化為同樣的尺寸大小。分類器訓(xùn)練完以后,就可以應(yīng)用于輸入圖像中的感興趣區(qū)域(與訓(xùn)練樣本相同的尺寸)的檢測(cè)。檢測(cè)到目標(biāo)區(qū)域(汽車或人臉)分類器輸出為1,否則輸出為0。為了檢測(cè)整副圖像,可以在圖像中移動(dòng)搜索窗口,檢測(cè)每一個(gè)位置來確定可能的目標(biāo)。為了搜索不同大小的目標(biāo)物體,分類器被設(shè)計(jì)為可以進(jìn)行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。所以,為了在圖像中檢測(cè)未知大小的目標(biāo)物體,掃描程序通常需要用不同比例大小的搜索窗口對(duì)圖片進(jìn)行幾次掃描[6]。分類器中的“級(jí)聯(lián)”是指最終的分類器是由幾個(gè)簡單分類器級(jí)聯(lián)組成。在圖像檢測(cè)中,被檢窗口依次通過每一級(jí)分類器,這樣在前面幾層的檢測(cè)中大部分的候選區(qū)域就被排除了,全部通過每一級(jí)分類器檢測(cè)的區(qū)域即為目標(biāo)區(qū)域。目前支持這種分類器的boosting技術(shù)有四種:DiscreteAdaboost,RealAdaboost,GentleAdaboostandLogitboost,"boosted"即指級(jí)聯(lián)分類器的每一層都可以從中選取一個(gè)boosting算法(權(quán)重投票),并利用基礎(chǔ)分類器的自我訓(xùn)練得到?;A(chǔ)分類器是至少有兩個(gè)葉結(jié)點(diǎn)的決策樹分類器[11]。主要過程分為兩步:(1)從文件中裝載訓(xùn)練好的級(jí)聯(lián)分類器或者從OpenCV中嵌入的分類器數(shù)據(jù)庫中導(dǎo)入,利用庫函數(shù)cvLoadHaarClassifierCascade(),函數(shù)原型如下:CvHaarClassifierCascade*cvLoadHaarClassifierCascade(constchar*directory,CvSizeorig_window_size)(2)檢測(cè)圖像中的目標(biāo),利用庫函數(shù)vHaarDetectObjects(),函數(shù)原型如下:CvSeq*cvHaarDetectObjects(constCvArr*image,CvHaarClassifierCascade*cascade,CvMemStorage*storage,doublescale_factor=1.1,intmin_neighbors=3,intflags=0,CvSizemin_size=cvSize(0,0));PCA算法及實(shí)現(xiàn)5.1AndroidNDK簡介AndroidNDK的全稱是AndroidNativeDevelopmentKit,是一系列開發(fā)工具。允許程序開發(fā)人員在Android應(yīng)用程序中嵌入C/C++語言編寫的非托管代碼(unmanagedcode)在公共語言運(yùn)行庫的環(huán)境的外部由操作系統(tǒng)直接執(zhí)行的代碼,稱之為非托管代碼。非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務(wù)。AndroidNDK版本1.5集成了交叉編譯,支持ARMv5TE處理器指令集,JNI接口和一些穩(wěn)定的庫文件。它提供了一系列的說明文檔、示例代碼和開發(fā)工具,指導(dǎo)程序員使用C/C++語言進(jìn)行開發(fā),并提供便捷工具將庫文件打包到.apk文件中。更重要的是Android虛擬機(jī)允許應(yīng)用程序源代碼通過JNI調(diào)用在本地實(shí)現(xiàn)的方法。這樣極大的提高了Android應(yīng)用程序開發(fā)的靈活性。在Windows下AndroidNDK編譯環(huán)境的配置方法主要分為以下四步:(1)下載AndroidNDK的安裝包(2)下載并安裝Cygwin(3)配置Cygwin的NDK開發(fā)環(huán)境(4)測(cè)試開發(fā)環(huán)境是否可以正常工作5.2PCA算法原理分析PCA將圖像看作具有一定分布的隨機(jī)向量。由于人臉總體構(gòu)型的相似性,人臉圖像在其中的分布不是隨機(jī)的,PCA可以獲得人臉圖像分布的主成分方向,從而使用人臉圖像的主成分來表達(dá)人臉。它使得圖像數(shù)據(jù)在一個(gè)低維的空間進(jìn)行處理,在保持了原有大部分信息量的基礎(chǔ)上,大大的減少了運(yùn)算量,這樣有利于在移動(dòng)設(shè)備上的開發(fā)使用。從本質(zhì)上而言,這是一種基于統(tǒng)計(jì)分析的信息壓縮算法。PCA算法運(yùn)用于人臉識(shí)別主要分為連個(gè)階段:訓(xùn)練階段和識(shí)別階段。5.2.1訓(xùn)練階段設(shè)人臉圖像用N=width*height維向量,人臉圖像訓(xùn)練集可以看作是維的隨機(jī)向量,其中m是訓(xùn)練樣本圖像數(shù)目。則這m幅圖像的平均圖像的向量表示為:(5-1)每個(gè)人臉與平均人臉圖像的差值定義為:(5-2)這樣訓(xùn)練圖像的協(xié)方差矩陣表示為:(5-3)式中是N維向量,則就是維向量。設(shè)和分別是協(xié)方差矩陣的特征值和特征向量,其中,將特征值按從小到大順序排列:。這樣就很容易計(jì)算出協(xié)方差矩陣的正交歸一特征向量為:(5-4)進(jìn)一步我們獲得特征臉為了進(jìn)一步減少計(jì)算量,我們提出特征值的貢獻(xiàn)率(選取的特征值在總的特征值的和比),選取前P個(gè)最大特征值以及對(duì)應(yīng)的特征向量[7]。(5-5)這樣每一幅人臉圖像都可以投影到由組成的子空間中,因此每一幅人臉圖像對(duì)應(yīng)于子空間中的一個(gè)點(diǎn)。同樣子空間中的一個(gè)點(diǎn)也代表著一個(gè)人臉圖像,由于這些點(diǎn)很想人臉圖像,所以我們稱之為“特征臉”。這樣對(duì)于任意一個(gè)樣本,它的主成分特征為:(5-6)5.2.2識(shí)別階段識(shí)別階段本文采用三階鄰近算法,對(duì)待測(cè)樣本的主成分和每一訓(xùn)練樣本的主成分求距離,將待測(cè)樣本歸類于最小距離的訓(xùn)練樣本類別。具體算法過程如下:(1)將每幅人臉圖像與平均臉的差值臉矢量投影到“特征臉”空間,即:(5-7)(2)將待識(shí)別的人臉圖像與平均臉的差值臉投影到特征臉空間,得到其特征向量(5-8)(3)定義識(shí)別閾值(5-9)(4)采用歐氏距離來計(jì)算與每個(gè)人臉的距離(5-10)為了能區(qū)分人臉與非人臉,我們還需要計(jì)算待識(shí)別圖像與由特征臉空間重建的圖像之間的距離(5-11)最后根據(jù)以下規(guī)則進(jìn)行判斷:若:(1),則輸入圖像不是人臉圖像(2),1)且對(duì),,則輸入圖像包含未知人臉2)且對(duì),,則輸入人臉圖像為人臉庫中第i個(gè)人臉5.3OpenCV實(shí)現(xiàn)PCA算法5.3.1OpenCV簡介OpenCV于1999年由Intel建立,現(xiàn)在由WillowGarage提供支持。OpenCV是一個(gè)基于BSD許可證授權(quán)(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫,可以運(yùn)行在Linux、Windows和MacOS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列C函數(shù)和少量C++類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法。它具有三個(gè)重要的特性:(1)OpenCV擁有包括300多個(gè)C函數(shù)的跨平臺(tái)的中、高層API。它不依賴于其它的外部庫——盡管也可以使用某些外部庫。(2)OpenCV對(duì)非商業(yè)應(yīng)用和商業(yè)應(yīng)用都是免費(fèi)(FREE)的。(3)OpenCV為Intel?IntegratedPerformancePrimitives(IPP)提供了透明接口。這意味著如果有為特定處理器優(yōu)化的的IPP庫,OpenCV將在運(yùn)行時(shí)自動(dòng)加載這些庫[4]。OpenCV可以應(yīng)用于人機(jī)交互、物體識(shí)別、圖像分割、人臉識(shí)別、動(dòng)作識(shí)別、運(yùn)動(dòng)跟蹤和機(jī)器人7大鄰域。5.3.2PCA算法實(shí)現(xiàn)由上文對(duì)PCA算法原理的闡述,幾個(gè)重要的因素:待訓(xùn)練圖像數(shù)據(jù)、平均圖像、訓(xùn)練圖像協(xié)方差矩陣、協(xié)方差矩陣的特征值特征向量、特征向量子空間、待識(shí)別圖像的子空間投影。以下為PCA算法實(shí)現(xiàn)的過程圖,如圖5-1:PCA算法實(shí)現(xiàn)過程。識(shí)別訓(xùn)練讀取待訓(xùn)練的圖像識(shí)別訓(xùn)練讀取待訓(xùn)練的圖像平均圖像的求取將圖像數(shù)據(jù)讀入指定的矩陣協(xié)方差矩陣的求解協(xié)方差矩陣特征值特征向量的求解主成分求解獲得特征臉空間待識(shí)別圖像投影歐氏距離的求解鄰近圖像尋找識(shí)別結(jié)果圖5-1PCA算法實(shí)現(xiàn)過程5.4.SO庫文件編譯5.4.1JNI規(guī)則JavaNativeInterface簡稱JNI,中文為JAVA本地調(diào)用。從Java1.1開始,JavaNativeInterface(JNI)標(biāo)準(zhǔn)成為Java平臺(tái)的一部分,它允許Java代碼和其他語言寫的代碼進(jìn)行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計(jì)的,但是它并不妨礙你使用其他語言,只要調(diào)用約定受支持就可以了。設(shè)計(jì)的主要目的在于標(biāo)準(zhǔn)的Java類庫可能不支持你的程序所需的特性?;蛟S你已經(jīng)有了一個(gè)用其他語言寫成的庫或程序,而你希望在Java程序中使用它。簡而言之就是在C/C++與Java搭建一個(gè)接口平臺(tái)。如圖5-2:JNI接口圖。FunctionsLibrariesFunctionsLibrariesExceptionsVMClasses圖5-2JNI接口圖JNI最重要的好處是它沒有對(duì)底層Java虛擬機(jī)的實(shí)現(xiàn)施加任何限制。因此,Java虛擬機(jī)廠商可以在不影響虛擬機(jī)其它部分的情況下添加對(duì)JNI的支持。由于Android的應(yīng)用層的類都是以Java寫的,這些Java類編譯為Dex形式的Bytecode之后,必須靠Dalvik虛擬機(jī)(VM:VirtualMachine)來執(zhí)行。所以VM在Android平臺(tái)里扮演著很重要的角色。此外,在執(zhí)行Java類的過程中,如果Java類需要與C組件溝通時(shí),VM就會(huì)載入C組件,然后讓Java的函數(shù)順利的調(diào)用到C組建的函數(shù)。此時(shí)VM就成了Java與C/C++連接的紐帶,讓Java與C組件能通過標(biāo)準(zhǔn)的JNI界面而相互溝通。Java的程式將通過System.loadLibrary(*.so的檔案名)這一指令要求VM去載入所指定的C組件。如程序?qū)崿F(xiàn):publicclassLibImgFun{ static{ System.loadLibrary("ImgFun"); }}這就要求VM去載入Android的libImgFun.so檔案,載入后Java與libImgFun.so檔案就組合起來,一起執(zhí)行。當(dāng)Android的VM執(zhí)行到System.loadLibrary()時(shí)首先會(huì)調(diào)用JNI_OnLoad()函數(shù),這個(gè)函數(shù)將告訴VM此C組件使用的是哪一個(gè)JNI版本,所有C組件內(nèi)的初期值皆由此函數(shù)進(jìn)行初始化。而當(dāng)VM釋放C組件的時(shí)候就會(huì)調(diào)用JNI_UnLoad()來進(jìn)行善后的清除動(dòng)作。接下來就是編輯.c/.cpp文件實(shí)現(xiàn)本地方法,編譯.c/.cpp文件生成動(dòng)態(tài)庫。5.4.2庫文件編譯在工程文件夾下建立jni文件夾,然后新建Application.mk和Android.mk。內(nèi)容如下:(1)Application.mk文件:#BuildbothARMv5TEandARMv7-Amachinecode.APP_OPTIM:=debugAPP_STL:=gnustl_staticAPP_CPPFLAGS:=-frtti–fexceptionsAPP_ABI:=armeabi-v7aarmeabi(2)Android.mk文件:NDK_USE_CYGPATH=1LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)include../includeOpenCV.mkifeq("$(wildcard$(OPENCV_MK_PATH))","")#trytoloadOpenCV.mkfromdefaultinstalllocationinclude$(TOOLCHAIN_PREBUILT_ROOT)/user/share/OpenCV/OpenCV.mkelseinclude$(OPENCV_MK_PATH)endifLOCAL_LDLIBS:=-llogLOCAL_MODULE:=ImgFunLOCAL_SRC_FILES:=ImgFun.cppinclude$(BUILD_SHARED_LIBRARY)(3)建立接口文件函數(shù)如下例子:JNIEXPORTjintJNICALLJava_com_FaceIdentify_LibImgFun_Recognize(JNIEnv*env,jobjectobj,jstringfilename)(4)利用Cygwin編譯工具編譯,鍵入$NDK/ndk-build命令開始編譯,結(jié)果如圖5-3所示圖5-3生成庫文件6研究結(jié)果及分析組成人臉庫:將攝像頭拍攝下來的人臉圖像進(jìn)行大小統(tǒng)一、圖像預(yù)處理、人臉提取和邊緣檢測(cè),再將預(yù)處理后的圖片進(jìn)行保存在人臉庫中。在程序中可以實(shí)現(xiàn)多對(duì)一的識(shí)別。當(dāng)然,也可以實(shí)現(xiàn)一對(duì)一識(shí)別(將人臉庫里面的人臉圖像全部存儲(chǔ)為一個(gè)人的人臉圖像)。程序中設(shè)置的是3個(gè)人,每人5張圖片。讀取待訓(xùn)練的圖片:將人臉
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑勞務(wù)清包合同
- 園林綠化工程施工合同
- 展廳裝修施工合同協(xié)議書
- 中介房屋買賣合同大全年
- 醫(yī)療健康領(lǐng)域醫(yī)療資源分布統(tǒng)計(jì)表
- 導(dǎo)購員聘用合同協(xié)議書
- 2025年潮州貨運(yùn)上崗證模擬考試0題
- 2025年部編版小學(xué)三年級(jí)下冊(cè)課外閱讀專項(xiàng)復(fù)習(xí)題(有答案)
- ic芯片購銷合同范本
- 制動(dòng)氣室市場(chǎng)分析及競(jìng)爭策略分析報(bào)告
- 一年級(jí)美術(shù)課后輔導(dǎo)方案-1
- 新法律援助基礎(chǔ)知識(shí)講座
- 《鍛造安全生產(chǎn)》課件
- 小學(xué)數(shù)學(xué)1-6年級(jí)(含奧數(shù))找規(guī)律專項(xiàng)及練習(xí)題附詳細(xì)答案
- 《同濟(jì)大學(xué)簡介》課件
- 《建筑攝影5構(gòu)》課件
- 機(jī)電安裝工程質(zhì)量控制
- 愛自己是終身浪漫的開始 心理課件
- 新房房屋買賣合同
- 地鐵出入口雨棚施工工藝
- 人工智能引論智慧樹知到課后章節(jié)答案2023年下浙江大學(xué)
評(píng)論
0/150
提交評(píng)論