人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

四川師范大學(xué)本科畢業(yè)設(shè)計(jì)人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)學(xué)生姓名院系名稱計(jì)算機(jī)科學(xué)學(xué)院專業(yè)名稱軟件工程班級(jí)學(xué)號(hào)指導(dǎo)教師完成時(shí)間2016年5月10日人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)內(nèi)容摘要:本設(shè)計(jì)旨在開(kāi)發(fā)一個(gè)從靜態(tài)圖像中檢測(cè)人臉及對(duì)檢測(cè)到的人臉圖像進(jìn)行歸一化的軟件系統(tǒng),具體內(nèi)容包括:1.學(xué)習(xí)OpenCV庫(kù)函數(shù)的調(diào)用和內(nèi)在原理及相關(guān)編程環(huán)境,掌握使用該庫(kù)的庫(kù)函數(shù)和接口。在學(xué)習(xí)過(guò)程中了解人臉圖像歸一化的目和歸一化的主要內(nèi)容與方法。制定了本設(shè)計(jì)采用的歸一化方案,編程實(shí)現(xiàn)歸一化算法,實(shí)現(xiàn)一個(gè)基于OpenCV的人臉檢測(cè)和圖像歸一化系統(tǒng)。2.研究了人臉檢測(cè)原理和算法,學(xué)習(xí)了OpenCV內(nèi)部封裝的人臉人眼檢測(cè)的算法原理。自己編程實(shí)現(xiàn)了一種基于人類皮膚顏色特征的人臉檢測(cè)算法并對(duì)人眼檢測(cè)方法中的灰度投影法進(jìn)行了學(xué)習(xí)和改進(jìn)。實(shí)現(xiàn)了手動(dòng)定位人眼在圖像中的位置,然后根據(jù)雙眼位置進(jìn)行人臉圖像旋轉(zhuǎn)和裁剪的歸一化方法。3.本文首先概述人臉檢測(cè)研究背景、人臉檢測(cè)的必要性、現(xiàn)狀及發(fā)展趨勢(shì)。然后介紹了OpenCV人臉檢測(cè)算法和膚色人臉檢測(cè)算法的原理和數(shù)學(xué)模型。之后對(duì)本設(shè)計(jì)實(shí)現(xiàn)的人臉檢測(cè)和裁剪系統(tǒng)的總體設(shè)計(jì)方案和詳細(xì)設(shè)計(jì)方案進(jìn)行了論述。最后利用KNN最近鄰分類器,對(duì)歸一化前后的人臉圖像進(jìn)行了人臉識(shí)別實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果顯示,利用本系統(tǒng)可以有效地進(jìn)行人臉檢測(cè)和歸一化,歸一化步驟可以提高人臉識(shí)別率。關(guān)鍵詞:OpenCV人臉檢測(cè)膚色人眼檢測(cè)人臉歸一化ThedesignandimplementationoffacedetectionandcuttingsystemAbstract:Thispaperaimsatdevelopafacedetectionandanormalizationsystem.LearningTheOpenCV(anopencomputervisionlibrary)andtheprogrammingenvironment,masteringthelibrary’sfunctionsandinterface.Getthepurposeofnormalizingandlearnsomeimportantmethodandalgorithm.Aschemeabouttheimplementonthissystemshouldbemade.ThenimplementthedetectionsystembaseonOpenCVlibrary,andfinishanormalizationalgorithmbymyself.IlearnsomeinternalencapsulationbasedonOpenCVbyresearchingsamefacedetectionalgorithmofOpenCV.DuringthestudyIearnedtheimportantoffaceDetection.SoIplantoimplementonedetectionalgorithmbaseonskincolorandimprovethehumaneyeLocationmethodnamedgray-levelprojectionmethod.Themanualpositioningofthehumaneyepositionwascompleted,andthenrotatingandcuttingaccordingtothebinocularlocation.FirstofallIwillgiveabriefdescribethehistory,presentsituationandthetrendoffacedetectioninthefutureInthepaper.ThentheprincipleandmathematicalmodeloftwokindsoffacedetectionalgorithmsbasedonOpenCVandskincolormustbeexplained.Afterthatthispapertalkabouttheoveralldesignofthesystemdesignanddetaildesignofthissystem.Finally,usethenearestneighborclassifier,recognizethebeforeandafternormalizedfaceimage.theexperimentprovesthattheafternormalizedfacerecognitionratehigherthantheotherone.Keywords: OpenCVfacedetectionskincoloreyeLocationnormalization目錄118781概述 1127271.1研究目的和意義 1314141.2研究背景 1130121.2.1國(guó)內(nèi)現(xiàn)狀 1279981.2.2國(guó)外現(xiàn)狀 11301.3文章的結(jié)構(gòu) 2318682預(yù)備知識(shí)及原理說(shuō)明 2121112.1人臉檢測(cè)定義 335212.2人臉特點(diǎn)和人臉開(kāi)檢測(cè)的意義 330942.2.1人臉的自然特性 322522.2.2進(jìn)行人臉檢測(cè)與裁剪必要性 375502.3一些常用的人臉檢測(cè)技術(shù) 4105212.3.1基于顯性特征人臉檢測(cè) 4109152.3.2基于隱式特征人臉檢測(cè) 4298602.4本章小結(jié) 5142613XFace系統(tǒng)總體設(shè)計(jì) 593333.1XFace系統(tǒng)設(shè)計(jì) 5124943.1.1XFace系統(tǒng)框圖 5303773.2功能說(shuō)明 5318313.2.1讀取顯示文件 5239963.2.2人臉檢測(cè) 6147693.2.3檢測(cè)結(jié)果歸一化 6243453.2.4歸一化結(jié)果保存 6220093.3本章小結(jié) 6172164XFace系統(tǒng)詳細(xì)設(shè)計(jì) 6123234.1XFace系統(tǒng)總體設(shè)計(jì) 630734.1.1XFace系統(tǒng)流程 637804.1.2XFace系統(tǒng)的功能模塊 724544.2XFace系統(tǒng)算法詳細(xì)描述 8320584.2.1OpenCV人臉檢測(cè)法詳細(xì)描述 8280804.2.2膚色檢測(cè)模型詳細(xì)描述 1248914.2.3歸一化算法詳細(xì)描述 14296064.3XFace系統(tǒng)詳細(xì)設(shè)計(jì) 18154.3.1XFace系統(tǒng)關(guān)鍵類 18121394.3.2XFace系統(tǒng)重要數(shù)據(jù)結(jié)構(gòu) 19183024.4章小結(jié) 20248305XFace系統(tǒng)實(shí)現(xiàn) 20129935.1OpenCV人臉檢測(cè)模塊實(shí)現(xiàn) 20226265.1.1EmguCV概述 20301275.1.2EmguCV封裝OpenCV 2057405.1.3EmguCV安裝 2283815.1.4OpenCV人臉定位 22309475.2膚色人臉檢測(cè)模塊實(shí)現(xiàn) 2353955.2.1二值化圖像得到人臉候選區(qū) 23298995.2.2候選膚色區(qū)域篩選 2446685.3歸一化實(shí)現(xiàn) 24142865.3.1灰度投影法定位人眼 24292745.3.2旋轉(zhuǎn)人臉圖像 2646375.3.3裁剪歸一化。 2643655.4本章小結(jié) 26215776XFace系統(tǒng)運(yùn)行 27313316.1系統(tǒng)運(yùn)行 27268426.2XFace系統(tǒng)對(duì)人臉識(shí)別率的提高。 28109006.3本章小結(jié) 28285967總結(jié)與展望 28113537.1總結(jié) 2844887.2展望 2948838致謝 2913280參考文獻(xiàn) 30人臉檢測(cè)與裁剪系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1概述1.1研究目的和意義人臉檢測(cè)(FaceDetection)就是查找圖像中人臉的位置,大小及數(shù)量REF_Ref755\w\h[1]。裁剪就是將檢測(cè)到的人臉進(jìn)行旋轉(zhuǎn)亮度等歸一化方法來(lái)得到可以用于計(jì)算機(jī)人臉識(shí)別的標(biāo)準(zhǔn)化人臉圖像樣本,研究人臉檢測(cè)和裁剪的目的是為了更好的進(jìn)行人臉識(shí)別。意義一:在自拍美圖、人臉識(shí)別、無(wú)人駕駛、人工智能等技術(shù)被廣泛用于生活的背后始終有一個(gè)默默無(wú)聞的技術(shù)在支撐著他們的發(fā)展,那就是人臉的檢測(cè)。人臉檢測(cè)與識(shí)別的關(guān)系就好比人在處理眼睛看到的對(duì)象一樣我們先需要對(duì)看到的對(duì)象進(jìn)行分類然后才能在該類下了解它的具體特性。同樣首先我們需要人臉檢測(cè)來(lái)幫助弄清楚對(duì)象是什么類,然后才可以知道它的具體內(nèi)容。意義二:人臉檢測(cè)可以降低對(duì)人臉樣本的采樣的環(huán)境要求,想象一下如果我們?yōu)榱俗R(shí)別某人而需要他或她在鏡頭前表情僵硬的一動(dòng)也不動(dòng)的才能采集到滿足要求的人臉。與能從一張隨便拍攝的圖片就能檢測(cè)到人臉的采樣條件而言,人臉檢測(cè)在降低采樣環(huán)境上著實(shí)起到了很大作用。1.2研究背景1.2.1國(guó)內(nèi)現(xiàn)狀從全球的人臉識(shí)別市場(chǎng)發(fā)展來(lái)看,中國(guó)現(xiàn)在正處于巔峰時(shí)刻。如今從事人臉識(shí)別的公司有200家。今年中科院人臉識(shí)別團(tuán)隊(duì)將人臉識(shí)別技術(shù)運(yùn)用于鐵路安全檢測(cè)系統(tǒng)這是應(yīng)用上取得的一大進(jìn)步。徐州市人事考試辦公室也首次應(yīng)用了人臉識(shí)別技術(shù)機(jī)考防范及排查替考還有目前支付寶已經(jīng)在某些移動(dòng)端上也能完成刷臉支付了。學(xué)術(shù)上微軟亞洲研究院視覺(jué)計(jì)算組同美國(guó)ImageNet計(jì)算機(jī)視覺(jué)組織進(jìn)行挑戰(zhàn)。微軟亞洲研究院視覺(jué)計(jì)算組的研究員們憑借深層神經(jīng)網(wǎng)絡(luò)技術(shù)的最新突破,以絕對(duì)優(yōu)勢(shì)獲得圖像分類、圖像定位以及圖像檢測(cè)全部三個(gè)主要項(xiàng)目的冠軍REF_Ref2522\w\h[2]。同時(shí),在另一項(xiàng)圖像識(shí)別挑戰(zhàn)賽MSCOCO中同樣取得了很好的成績(jī),擊敗了來(lái)自企業(yè)、學(xué)界和研究機(jī)構(gòu)的眾多參賽者REF_Ref2522\w\h[2]。相信在將來(lái)人臉檢測(cè)技術(shù)會(huì)越來(lái)越多的應(yīng)用到生活場(chǎng)景中。我很幸運(yùn)的選擇了人臉檢測(cè)歸一化系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)作為本次的畢業(yè)選題。1.2.2國(guó)外現(xiàn)狀最早的二維圖像的統(tǒng)計(jì)模式識(shí)別開(kāi)始于20世紀(jì)50年代。最早的三維機(jī)器視覺(jué)的研究始于60年代。1977年,MIT人工智能實(shí)驗(yàn)室正式開(kāi)設(shè)”computervision”課程。全球性的研究熱潮于80年代開(kāi)始,不久computervision獲得了巨大發(fā)展,該領(lǐng)域的各種新概念、新理論不斷出現(xiàn)。目前在海外,機(jī)器視覺(jué)人臉檢測(cè)系統(tǒng)在很多方面已經(jīng)得到了普遍的應(yīng)用,而且其產(chǎn)品在很多行業(yè)中有著舉足輕重的地位。目前大多數(shù)應(yīng)用集中在半導(dǎo)體及電子行業(yè)。可以這樣說(shuō)computervision現(xiàn)在國(guó)內(nèi)與國(guó)外對(duì)于人臉檢測(cè)計(jì)算機(jī)視覺(jué)方面研發(fā)成果處于并駕齊驅(qū)、不相上下的地步。1.3文章的結(jié)構(gòu)本文共為八個(gè)主要部分:概述,這章主要說(shuō)明了人臉檢測(cè)和裁剪系統(tǒng)的必要性和重要性,主要從市場(chǎng)和發(fā)展前景來(lái)論述為什么進(jìn)行人檢測(cè)和裁剪的研究。預(yù)備知識(shí)和原理說(shuō)明,如同只有站在巨人的肩膀上才能看的更遠(yuǎn)才能一樣,要更好的了解這項(xiàng)技術(shù)就必須要了解一些準(zhǔn)備知識(shí)??傮w設(shè)計(jì),主要使用結(jié)構(gòu)圖來(lái)說(shuō)明本人臉檢測(cè)與裁剪系統(tǒng)包括的主要功能。詳細(xì)設(shè)計(jì),用功能模塊圖來(lái)說(shuō)明系統(tǒng)的工作流程和重要算法原理,并通過(guò)系統(tǒng)主要數(shù)據(jù)結(jié)構(gòu)和關(guān)鍵類介紹系統(tǒng)詳細(xì)設(shè)計(jì)是如何實(shí)現(xiàn)的。系統(tǒng)實(shí)現(xiàn),本章對(duì)Emgucv進(jìn)行了概要描述,主要實(shí)現(xiàn)了OpenCV、膚色定位人臉區(qū)域和對(duì)檢測(cè)到人臉進(jìn)行歸一化功能。系統(tǒng)運(yùn)行及歸一化對(duì)識(shí)別率的影響實(shí)驗(yàn),說(shuō)明人臉檢測(cè)和裁剪系統(tǒng)在對(duì)靜態(tài)圖像檢測(cè)歸一化歸一方面所做的工作??偨Y(jié)篇,對(duì)該系統(tǒng)進(jìn)行了綜合評(píng)述??偨Y(jié)系統(tǒng)做到了什么,同時(shí)還提出了一些系統(tǒng)可能存在的不足及系統(tǒng)沒(méi)做到什么和對(duì)系統(tǒng)改進(jìn)期望。致謝,對(duì)所有幫助我的人和組織表示感謝。最后是本文所參考的各種國(guó)內(nèi)外有價(jià)值的論文、圖書(shū)、期刊、和網(wǎng)絡(luò)技術(shù)博客資料列表。2預(yù)備知識(shí)及原理說(shuō)明在開(kāi)發(fā)人臉檢測(cè)與裁剪系統(tǒng)之前我們必須要了解一些關(guān)于人臉檢測(cè)的預(yù)備知識(shí)。比如了解什么是人臉檢測(cè)及人臉檢測(cè)定義,還需要了解為何進(jìn)行檢測(cè)和裁剪及這樣做的意義。同時(shí)還應(yīng)該了解一些關(guān)于現(xiàn)在常用的一些檢測(cè)技術(shù)。2.1人臉檢測(cè)定義人臉檢測(cè):在實(shí)際中人臉檢測(cè)主要用來(lái)預(yù)先處理需要進(jìn)行人臉識(shí)別的圖像,它的主要任務(wù)就是在圖像中準(zhǔn)確標(biāo)定出人臉的位置和大小。人臉檢測(cè)就是把人臉圖像中包含的眾多的特征,如結(jié)構(gòu)的特征、直方圖的特征、人臉顏色的特征、及Haar特征等對(duì)檢測(cè)人臉有用的信息挑出來(lái),并利用這些特征實(shí)現(xiàn)人臉檢測(cè)REF_Ref2663\w\h[3]。2.2人臉特點(diǎn)和人臉開(kāi)檢測(cè)的意義2.2.1人臉的自然特性人臉和人的其它生物特征一樣從出生就會(huì)伴其一生,人臉的唯一性和難復(fù)制性為身份鑒別提供了必要的前提。因?yàn)槿绻F(xiàn)實(shí)中存在兩張完全相同的人臉那么人臉識(shí)別就無(wú)法進(jìn)行判斷。與其它類型的生物識(shí)別比較人臉識(shí)別還具有:直接性:就是指和人類辨別人一樣主要是通過(guò)人臉來(lái)區(qū)別,而不需要進(jìn)行種種轉(zhuǎn)換運(yùn)算。非接觸性:用戶不需要像采集指紋那樣需要和設(shè)備直接接觸就才能獲取圖像;并發(fā)性:在同一張圖片或者圖像中我們可以同時(shí)檢測(cè)多個(gè)人臉;唯一性:這是我們可以根據(jù)人臉達(dá)到識(shí)別身份的必要前提。每個(gè)人的臉具有與他人不同的特點(diǎn)而這些是唯一的,不會(huì)存在兩個(gè)目標(biāo)臉可以是完全相同的。2.2.2進(jìn)行人臉檢測(cè)與裁剪必要性意義一:我們知道圖像對(duì)于計(jì)算機(jī)而言就是一串一串二進(jìn)制數(shù)而且他的保存十分耗費(fèi)資源。針對(duì)安全監(jiān)測(cè)視頻圖像中無(wú)人的景象是無(wú)用的,那么人臉檢測(cè)則可以在檢測(cè)到人臉時(shí)才對(duì)圖像進(jìn)行存儲(chǔ)這樣既節(jié)約資源又可以提高圖像的有用性。意義二:在自拍美圖、人臉識(shí)別、無(wú)人駕駛、人工智能等技術(shù)被廣泛用于生活的背后始終有一個(gè)默默無(wú)聞的技術(shù)在支撐著他們的發(fā)展,那就是人臉的檢測(cè)。沒(méi)有人臉檢測(cè)技術(shù)的支持不會(huì)有計(jì)算機(jī)人臉識(shí)別的產(chǎn)生。人臉檢測(cè)與識(shí)別的關(guān)系就好比人在處理眼睛看到的對(duì)象一樣我們先需要對(duì)看到的對(duì)象進(jìn)行分類然后才能在該類下了解它的具體特性。同樣首先我們需要人臉檢測(cè)來(lái)幫助弄清楚對(duì)象是什么類,然后才可以知道它的具體內(nèi)容。意義三:人臉檢測(cè)可以降低人臉識(shí)別前對(duì)人臉樣本的采樣條件,想象一下如果我們?yōu)榱俗R(shí)別某人而需要他或她在鏡頭前表情僵硬的一動(dòng)也不動(dòng)的才能采集到滿足要求的人臉。與能從一張隨便拍攝的圖片就能檢測(cè)到人臉的采樣條件而言,人臉檢測(cè)在降低采樣環(huán)境上著實(shí)起到了很大作用。2.3一些常用的人臉檢測(cè)技術(shù)2.3.1基于顯性特征人臉檢測(cè)所謂基于顯性特征人臉檢測(cè)是指人肉眼就可以采集出來(lái)的的特征而不需要進(jìn)行各種處理的特征,如五官結(jié)構(gòu),人臉皮膚顏色,面部輪廓等五官分布法是根據(jù)人臉五官雙眼、眉毛、耳朵、鼻子、嘴巴在人臉的位置分布規(guī)則對(duì)圖像進(jìn)行掃描來(lái)檢測(cè)人臉?;谀w色的人臉檢測(cè)是指膚色在去除亮度的色度空間內(nèi)具有內(nèi)聚性我們可以根據(jù)對(duì)大量膚色統(tǒng)計(jì)發(fā)現(xiàn)膚色會(huì)內(nèi)聚到某個(gè)范圍內(nèi)從而可以幫助我們將皮膚區(qū)域同其他背景中分離出來(lái)。其優(yōu)點(diǎn)是檢測(cè)快速原理簡(jiǎn)單而且具有姿態(tài)不變性?;趯?duì)稱性的人臉檢測(cè)我們知道正面人臉長(zhǎng)寬比會(huì)在一定范圍內(nèi),而超過(guò)這個(gè)范圍是人臉的概率比較小可以不予考慮?;陲@性特征的檢測(cè)算法復(fù)雜度低檢測(cè)效率高。但同時(shí)也會(huì)有相當(dāng)高的檢誤率但總的來(lái)說(shuō)基于顯示特征的人臉檢測(cè)方法是比較容易實(shí)現(xiàn)的。2.3.2基于隱式特征人臉檢測(cè)隱式特征的方法就是預(yù)先讓分類器對(duì)大量的人臉和非人臉樣本對(duì)進(jìn)行學(xué)習(xí),然后再用學(xué)習(xí)好的分類器檢測(cè)一個(gè)新人臉看是否為人臉。如果送檢人臉通過(guò)分類器的所有檢測(cè),則確認(rèn)為人臉?lè)駝t不是人臉。典型例子有以下幾種:基于人工神經(jīng)網(wǎng)絡(luò)的方法人工神經(jīng)網(wǎng)絡(luò)和人自身處理信號(hào)的過(guò)程類似大致過(guò)程為:當(dāng)大腦或者感受器接收到某個(gè)來(lái)自外界的刺激,神經(jīng)細(xì)胞就通神經(jīng)結(jié)構(gòu)將信息傳遞到其他細(xì)胞然后在到其他細(xì)胞就這樣將刺激迅速通過(guò)處理傳到其他神經(jīng)細(xì)胞REF_Ref9847\w\h[4]。這樣一條通路就是一個(gè)信息處理的通路。整個(gè)神經(jīng)網(wǎng)絡(luò)系統(tǒng)是由無(wú)數(shù)個(gè)相互關(guān)聯(lián)的神經(jīng)細(xì)胞組成,構(gòu)成一強(qiáng)大的高精度的信號(hào)處理機(jī)REF_Ref9847\w\h[4]。不過(guò)信號(hào)不是隨機(jī)選擇下一個(gè)神經(jīng)元來(lái)傳遞信息,而是基于人在成長(zhǎng)過(guò)程中長(zhǎng)期累積的分類信息有條件的選擇路徑。受這種思想啟發(fā)人工神經(jīng)網(wǎng)絡(luò)算法就是要模擬人類神經(jīng)的既成分類機(jī)制以此達(dá)到對(duì)待檢測(cè)樣本的檢測(cè)?;谧涌臻g的方法子空間學(xué)習(xí)大意是指通過(guò)映射,實(shí)現(xiàn)從高維度特征向低維度特征空間的映射,是一種經(jīng)典的思想。就好比你拿到了一組具有很多信息數(shù)據(jù)要對(duì)其做分類,然而數(shù)據(jù)分布在一個(gè)高維空間中,不太方便處理,維度太高導(dǎo)致采用的分類模型的復(fù)雜度也相應(yīng)增高,最終導(dǎo)致分類模型容易出問(wèn)題。從而導(dǎo)致問(wèn)題無(wú)法解決,但是,數(shù)據(jù)中往往存在一些特性使得這個(gè)問(wèn)題又有了可以解決的希望,比如數(shù)據(jù)其實(shí)分布在高維空間的一個(gè)子空間中,你拿到的高維數(shù)據(jù)其實(shí)是子空間中有效數(shù)據(jù)加上高維無(wú)效數(shù)據(jù),而這個(gè)子空間的維度數(shù)其實(shí)一般不那么大,那么找出這個(gè)子空間,就能保證盡量不丟失信息又能降低數(shù)據(jù)維度,在這個(gè)子空間中做訓(xùn)練,就可以變得比較容易。2.4本章小結(jié)本章我們可以清楚知道什么是人臉檢測(cè)以及人臉檢測(cè)為何會(huì)如此的有用以及證明了我們很有必要對(duì)其進(jìn)行探究學(xué)習(xí),同時(shí)我們還大致明白人臉檢測(cè)的顯性特征檢測(cè)方法及隱性特征檢測(cè)方法的優(yōu)缺點(diǎn)。3XFace系統(tǒng)總體設(shè)計(jì)3.1XFace系統(tǒng)設(shè)計(jì)3.1.1XFace系統(tǒng)框圖如圖3.1是XFace人臉檢測(cè)系統(tǒng),包含以膚色檢測(cè)法為指導(dǎo)的膚色檢測(cè)模塊和基于OpenCV圖像處理庫(kù)檢測(cè)算法原理的OpenCV人臉檢測(cè)模塊,同時(shí)還實(shí)現(xiàn)了基于灰度投影法的自動(dòng)定位人眼和手動(dòng)定位人眼的歸一模塊。圖3-1XFace系統(tǒng)框圖XFace系統(tǒng)的運(yùn)行是從讀取文件開(kāi)始的,然后我們對(duì)打開(kāi)的圖片加載到檢測(cè)模塊檢測(cè)得到人臉,然后就可以對(duì)檢測(cè)到的人臉進(jìn)行歸一化處理最后保存處理結(jié)果到文件。3.2功能說(shuō)明3.2.1讀取顯示文件讀取文件是系統(tǒng)運(yùn)行的第一步,我選擇用C#的System.Windows.Forms.OpenFileDialog類實(shí)例化對(duì)象進(jìn)行圖片路徑的選取。我設(shè)置該對(duì)象的Filter讓可供選擇的文件僅限于如Jpg、bmp、png等圖片文件。用Bitmap對(duì)象來(lái)加載選擇文件的圖片數(shù)據(jù)。然后顯示該圖片到界面。3.2.2人臉檢測(cè)人臉檢測(cè)就是將讀取顯示到界面的圖片文件加載到OpenCV人臉檢測(cè)功能模塊去或者是以膚色檢測(cè)法為基礎(chǔ)的人臉檢測(cè)模塊去。該模塊如果檢測(cè)到了人臉就返回人臉位置信息加載到數(shù)據(jù)模型中。否者就不會(huì)返回任何信息。我們隊(duì)數(shù)據(jù)模型進(jìn)行讀取有數(shù)據(jù)就顯示結(jié)果。無(wú)數(shù)據(jù)則顯示未檢測(cè)到任何結(jié)果的信息提示。3.2.3檢測(cè)結(jié)果歸一化檢測(cè)結(jié)果歸一化是將檢測(cè)到的人臉歸一化到大小一致眼睛處于同一水平線上的圖片,這是設(shè)計(jì)XFace系統(tǒng)的最終目的。我們可以選擇人臉檢測(cè)結(jié)果來(lái)進(jìn)行人臉歸一化。在選取需要?dú)w一化的檢測(cè)人臉后我們就可以執(zhí)行自動(dòng)歸一和手動(dòng)歸一了;歸一結(jié)果會(huì)顯示到界面并根據(jù)用戶是否對(duì)歸一化結(jié)果滿意來(lái)進(jìn)行下一步操作。即用另外一種歸一方法還是保存結(jié)果。3.2.4歸一化結(jié)果保存我們進(jìn)行人臉檢測(cè)歸一化是為了能為人臉識(shí)別提供標(biāo)準(zhǔn)的人眼處于同一水平的可靠的識(shí)別人臉樣本,保存對(duì)于整個(gè)系統(tǒng)勢(shì)必是不可或缺的。我們根據(jù)用戶提供的保存路徑先判斷文件是否存在,如果存在提示是覆蓋文件還是放棄保存,如果文件不存在則直接保存文件。3.3本章小結(jié)通過(guò)本章我們可以了解人臉檢測(cè)系統(tǒng)裁剪系統(tǒng)每個(gè)模塊是如何協(xié)同工作的為下一步的詳細(xì)設(shè)計(jì)奠定良好基礎(chǔ)。4XFace系統(tǒng)詳細(xì)設(shè)計(jì)4.1XFace系統(tǒng)總體設(shè)計(jì)4.1.1XFace系統(tǒng)流程如圖4.1XFace系統(tǒng)包括四個(gè)功能模塊:讀取圖片文件、檢測(cè)人臉、歸一化人臉、然后保存結(jié)果。圖4-1XFace系統(tǒng)工作流程4.1.2XFace系統(tǒng)的功能模塊圖4-2讀取文件模塊圖圖4-3人臉檢測(cè)模塊圖4-4歸一化模塊圖4-5保存文件模塊4.2XFace系統(tǒng)算法詳細(xì)描述4.2.1OpenCV人臉檢測(cè)法詳細(xì)描述圖4-6OpenCV人臉檢測(cè)功能圖OpenCVhaar分類器的建立:OpenCV的haar積分圖人臉?lè)诸惼魇腔赼daboost算法對(duì)人臉haar特征進(jìn)行學(xué)習(xí)建立起來(lái)的。Haar分類器算法的要點(diǎn)如下:①使用Haar特征做檢測(cè)。②使用積分圖(IntegralImage)對(duì)Haar特征求值進(jìn)行加速。③使用AdaBoost算法對(duì)弱分類區(qū)訓(xùn)練得到區(qū)分人臉和非人臉能力更強(qiáng)的強(qiáng)分類器。④使用級(jí)聯(lián)方法把強(qiáng)分類器堆疊級(jí)聯(lián)到一起形成級(jí)聯(lián)分類器,提高準(zhǔn)確率。Haar特征Haar特征用法,就是在人臉檢測(cè)過(guò)程中將他視為一個(gè)子窗口在檢測(cè)區(qū)域內(nèi)不斷滑動(dòng)。對(duì)于每個(gè)位置的每個(gè)一種特征都會(huì)有一個(gè)與之對(duì)應(yīng)的特征值,將這些計(jì)算出來(lái)的值代入預(yù)先訓(xùn)練好的級(jí)聯(lián)分類器。如果特征通過(guò)這些分類器則我們就判定該區(qū)域是人臉,否則該區(qū)域不是人臉區(qū)域。下面是Viola提出的Haar特征REF_Ref9267\w\h[5]。圖4-7haar特征圖REF_Ref9267\w\h[5]下面是Lienhart提出的Haar特圖4-8新haar特征圖REF_Ref9267\w\h[5]將任意一種haar特征矩形放到人臉樣本所在區(qū)域內(nèi),對(duì)于特征覆蓋的人臉區(qū)用白色區(qū)域?qū)?yīng)的人臉像素值和減去特征黑色區(qū)域覆蓋的人臉像素和得到的像素值我們稱之為人臉特征值REF_Ref23362\w\h[7]。而如將這個(gè)特征覆蓋到非人臉區(qū)域,那么計(jì)算出的值應(yīng)該和覆蓋到人臉區(qū)域得到的特征值不一樣,其實(shí)非人臉區(qū)域特征值與人臉區(qū)域得出的特征值區(qū)別越大越有利于我們區(qū)分出人臉來(lái)REF_Ref17664\w\h[8]。最終為了達(dá)到好的區(qū)分效果增加區(qū)分度,我們通過(guò)使用多種haar特征計(jì)算特征值然后將他們疊加在一起得到一個(gè)區(qū)分度更大的特征值。Haar分類器在2001年,Viola和Jones發(fā)表了《RapidObjectDetectionusingaBoostedCascadeofSimpleFeatures》REF_Ref11561\w\h[5]和《RobustReal-TimeFaceDetection》兩本經(jīng)典著作REF_Ref14667\w\h[6]。在這兩本著作中詳細(xì)介紹了haar特征和haar分類器?,F(xiàn)在我們知道haar分類器就是利用人臉的haar特征值和adaboost算法訓(xùn)練得到弱分類器,由弱分類器組合成強(qiáng)分類器,再由強(qiáng)分類器分層疊加形成級(jí)聯(lián)分類器。弱分類器對(duì)于20000張人臉樣本圖像和20000張非人臉樣本圖像,一個(gè)如4.9圖左邊中a型haar特征在每個(gè)個(gè)位置上都會(huì)取得20000個(gè)正樣本特征值和20000個(gè)負(fù)樣本特征值。在這40000個(gè)特征值中會(huì)存在一個(gè)值能夠最好區(qū)分出人臉和人非人臉樣本。那么我們就選擇該特征值對(duì)應(yīng)的haar特征作為一個(gè)弱分類器。圖4-9最優(yōu)弱分類器原理圖如何選擇一個(gè)特征值達(dá)到對(duì)該種特征分類效果好的閥值?對(duì)a型特征得到的40000個(gè)特征值進(jìn)行排序。計(jì)算每個(gè)特征值對(duì)應(yīng)的分類正確率。每一個(gè)特征值會(huì)對(duì)應(yīng)一個(gè)分類的正確率,我們選擇分類正確率最大的特征值E所對(duì)應(yīng)的特征得到最優(yōu)弱分類器。同樣對(duì)于B型特征我們也可以找到一個(gè)最優(yōu)弱分類器。強(qiáng)類器強(qiáng)分類器的誕生需要循環(huán)多輪得出,我們?nèi)⊙h(huán)次數(shù)為N具體操作如下:對(duì)訓(xùn)練樣本集U,共M個(gè)樣本,其中一部分正樣本和負(fù)樣本;N為訓(xùn)練的最大循環(huán)次數(shù);2.初始化樣本權(quán)重為1/M,即為訓(xùn)練樣本的一個(gè)初始概率分布;3.第一次選擇M個(gè)樣本的某一個(gè)特征,得到第一個(gè)最優(yōu)弱分類器4.提高上一輪中被誤判的樣本的權(quán)重;5.選入新的特征特進(jìn)行新一輪的訓(xùn)練得到一個(gè)新的弱分類器。6.經(jīng)過(guò)N次步驟4和5的執(zhí)行就得到N個(gè)弱分類器。7.最后對(duì)N個(gè)弱分類器組合就可以得到一個(gè)強(qiáng)分類器。級(jí)聯(lián)分類器我們將訓(xùn)練出多個(gè)強(qiáng)分類器按照一定規(guī)則的組合,最終形成正確率可以滿足人臉實(shí)際需求的分類器。圖4-10級(jí)聯(lián)分類器原理圖級(jí)聯(lián)分類器級(jí)聯(lián)方法是,將一定數(shù)量的強(qiáng)分類器一般20個(gè)就夠了從分類能力弱排列到分類能力強(qiáng)的經(jīng)過(guò)訓(xùn)練使每個(gè)強(qiáng)分類器都有較高檢測(cè)率,而誤識(shí)率可以放低,根據(jù)錯(cuò)誤率F=每層錯(cuò)誤率相乘而得,檢測(cè)率D=每層的檢測(cè)率相乘而得。級(jí)聯(lián)分類器就是在給定級(jí)聯(lián)分類器錯(cuò)誤率和識(shí)別率反過(guò)來(lái)計(jì)算每層強(qiáng)分類器的錯(cuò)誤率和識(shí)別率。積分圖對(duì)于一個(gè)Haar特征在一個(gè)窗口中如何排列可更好的體現(xiàn)人臉的特征,這是未知的,只有通過(guò)訓(xùn)練才能了解到所以在訓(xùn)練之前我們需要窮舉所有特征。對(duì)于每一個(gè)矩形樣本,對(duì)于他里面的任何一個(gè)子窗口圖像,毫無(wú)疑問(wèn)都是需要計(jì)算特征值的那么我們知道對(duì)于一個(gè)24*24的區(qū)域就有16萬(wàn)個(gè)左右的特征值然而對(duì)于大多數(shù)的人臉圖尺寸會(huì)遠(yuǎn)大于24*24所以運(yùn)算量可想而知是多大。積分圖之所以被廣泛采用就在于積分圖只遍歷一次圖像就可得出圖像中所有區(qū)域像素和這對(duì)提高了圖像特征值的計(jì)算效率很有幫助。它是用一點(diǎn)的值表示該點(diǎn)p(i,j)與坐標(biāo)原點(diǎn)形成的矩形的所有像素和積分圖構(gòu)建算法:1)用s(i,j)表示行方向的累加和,初始化s(i,-1)=0;2)用Sij(i,j)表示一個(gè)積分圖像,初始化Sij(-1,i)=0;3)掃描圖像,計(jì)算每個(gè)點(diǎn)P(i,j)行方向的像素f(i,j)累加和得到s(i,j)和積分圖像Sij(i,j)的值s(i,j)=s(i,j-1)+f(i,j)Sij(i,j)=Sij(i-1,j)+s(i,j)4)經(jīng)過(guò)對(duì)圖像一遍的掃描,積分圖像Sij就構(gòu)造好了。對(duì)于一個(gè)已經(jīng)運(yùn)算完的積分圖,圖中任何矩形框的像素和就都可以通過(guò)簡(jiǎn)單加法和減法運(yùn)算得到。如圖:圖4-11積分圖設(shè)D的四個(gè)頂點(diǎn)分別為1,2,3,4則D的像素和可以表示為Dsum=Sij(1)+Sij(3)-(Sij(2)+Sij(4));4.2.2膚色檢測(cè)模型詳細(xì)描述圖4.12膚色人臉檢測(cè)細(xì)化圖HSV顏色空間HSV模型圖4-13Hsv模型圖色調(diào)H所謂的顏色的色調(diào)其實(shí)指的是圖像中畫(huà)面色彩的大致顏色而H色調(diào)(Hue)是用角度來(lái)進(jìn)行度量的,它的取值范圍為0°~360°REF_Ref21426\w\h[9]。飽和度S飽和度S表示顏色與光譜色的接近程度比如說(shuō)一種顏色,可以看成是某種光譜顏色與白色按照一定比例混合而成的結(jié)果REF_Ref21426\w\h[9]。如果某種光譜顏色在總體中占的比例大,那么這種顏色顯現(xiàn)程度就高,同時(shí)顏色的飽和度就會(huì)越高。飽和度高,在顏色上表現(xiàn)就是顏色深而艷。明度V明度表示顏色明亮的程度,對(duì)于發(fā)光物體,明度值與發(fā)光體的光亮程度成正比;對(duì)于非光源物體,明暗度就是指物體的透射或反射能力的強(qiáng)度。通常取值范圍為0%到100%取值越大也就越明亮REF_Ref21426\w\h[9]。RGB與HSV的聯(lián)系直觀的看,只需要把以RGB三維坐標(biāo)的中軸線為軸線的立方體立起來(lái)的,將他扁平化,就能形成HSV空間模型了REF_Ref21426\w\h[9]。V只選取了RGB的一個(gè)最大分量與強(qiáng)度無(wú)直接關(guān)系而RGB則能反映光照強(qiáng)度(或灰度)的變化。v=max(r,g,b)。由RGB到HSV顏色空間轉(zhuǎn)換的偽代碼如下:Input(R,G,B);varV=Max(R,G,B); ifV=0 thenS=0;Else thenS=[V-Min(R,G,B)]/V;IfV=R thenH=60*(G-B)/(V-Min(R,G,B));IfV=G thenH=120+60*(B-R)/(V-Min(R,G,B);IfV=B thenH=240+60*(R-G)/(V-Min(R,G,B));IfH<0 thenH+=360;Output(H,S,V);4.2.3歸一化算法詳細(xì)描述圖4-13自動(dòng)歸一化模塊細(xì)化圖圖4-14手動(dòng)歸一化模塊細(xì)化圖自動(dòng)人眼定位灰度投影法REF_Ref30616\w\h[11]:由人臉的人眼位置特征將人臉部雙眼區(qū)域縮小到兩個(gè)小區(qū)域。然后根據(jù)灰度圖像在人眼區(qū)域像素和會(huì)低于非人眼區(qū)域從而定位人眼坐標(biāo);根據(jù)在圖像預(yù)處理與匹配方法研究REF_Ref30616\w\h[11]中人眼定位方法。我們經(jīng)過(guò)對(duì)五官定位得到大致矩形人眼位置記為左眼所在框(x1,y1,x2,y2)右眼所在框(x3,y1,x4,y2)。然后進(jìn)行掃描獲得像素最小的區(qū)域。取該區(qū)域的中心就是眼睛位置。如圖4.15所示:從圖可看到對(duì)區(qū)域(x1,y1,x2,y2)進(jìn)行分割對(duì)每個(gè)小格子進(jìn)行像素求和p(x,y)最終找到像素最小矩形塊將該中心當(dāng)做人臉左眼。同理對(duì)區(qū)域(x3,y1,x4,y2)可以找出右眼。圖4-15自動(dòng)定位人眼圖圖像旋轉(zhuǎn)圖4-16圖像旋轉(zhuǎn)模型圖如圖4.16中我們以P0(x0,y0)為旋轉(zhuǎn)中心建立坐標(biāo)系,p2(x2,y2)為旋轉(zhuǎn)后的點(diǎn),我們需要計(jì)算旋轉(zhuǎn)前的點(diǎn)p1(x1,y1)線p0p1與線p0p2夾角為Ap0p2與X軸夾角為B線段p0p1=p0p2的長(zhǎng)記作r;由于旋轉(zhuǎn)過(guò)程不會(huì)改變線段長(zhǎng)r。我們通過(guò)下面的公式推導(dǎo)得出p1(x1,y1)在圖片中的坐標(biāo)。我們根據(jù)三角函數(shù)公式(4.1)(4.2)(4.3)(4.4) (4.1)(4.2)(4.3)(4.4)將(4.1)展開(kāi)得到(4.5):(4.5)將(4.2)展開(kāi)得到(4.6):(4.6)將(4.3)(4.4)帶入(4.5)得到(4.7):(4.7)將(4.3)(4.4)帶入(4.6)得到(4.8):(4.8)最終結(jié)果:(4.9)(4.10)由于現(xiàn)在坐標(biāo)系的原點(diǎn)是P0也就是人臉左眼位置點(diǎn),現(xiàn)在計(jì)算得到的坐標(biāo)都是相對(duì)于P0點(diǎn)因此還要還原到原來(lái)的坐標(biāo)系,那么最終的結(jié)果就是: (4.9) (4.10)如上計(jì)算可得到旋轉(zhuǎn)后圖像中每個(gè)點(diǎn)p(x,y)在原圖的位置p’(x,y)由于旋轉(zhuǎn)p’(x,y)可能不是整數(shù)點(diǎn)而且有可能超出原圖范圍就取存在值作為該點(diǎn)的像素值如果點(diǎn)不在原圖范圍內(nèi)則賦值為255。雙線性插值雙向性插值根據(jù)距離點(diǎn)p(x,y)距離越小而對(duì)該點(diǎn)值影響越大來(lái)進(jìn)行插值。同時(shí),由旋轉(zhuǎn)后圖像坐標(biāo)計(jì)算出來(lái)的原圖像坐標(biāo)往往不是整數(shù),為了保證旋轉(zhuǎn)效果,進(jìn)行雙線性插值。雙線性插值就是對(duì)一點(diǎn)進(jìn)行X方向和Y兩個(gè)方向進(jìn)行變量的線性插值,分別對(duì)每個(gè)變量線性插值就得到最終的插值結(jié)果。圖4-18雙線性插值圖在X方向上插入R1,R2值如公式(4.11)(4.12): 公式(4.11) 公式(4.12)在Y方向插值(4.3)如下: 公式(4.13)簡(jiǎn)化后得到(4.4)如下 公式(4.14)旋轉(zhuǎn)后點(diǎn)p2(x2,y2)對(duì)應(yīng)的像素值f(x,y)我們根據(jù)公式(4.14)計(jì)算可以得到。圖像裁剪在旋轉(zhuǎn)后圖像中,以左眼Leye(x,y)做基準(zhǔn)兩眼間距離為D標(biāo)準(zhǔn)找到人臉矩形左上角的點(diǎn)leftUP(x-0.5D,y-0.5D)。然后以leftUp點(diǎn),寬2D,長(zhǎng)2D構(gòu)造矩形,裁剪得到歸一化人臉即為一個(gè)2D*2D的矩形人臉框;如圖4.19:圖4-19人臉裁剪模型圖通過(guò)流程圖4.13或者圖4.14我們可以清晰的看到。經(jīng)過(guò)對(duì)圖片的處理可以得到人眼,然后對(duì)該圖片進(jìn)行以左眼為旋轉(zhuǎn)中心的人臉圖像旋轉(zhuǎn),就可以使得雙眼處于同一水平,最后按比例裁剪人臉就完成了人臉幾何歸一化。在第六章可以看到歸一化前后人臉對(duì)比圖。4.3XFace系統(tǒng)詳細(xì)設(shè)計(jì)4.3.1XFace系統(tǒng)關(guān)鍵類圖4-20系統(tǒng)關(guān)系圖圖4-21系統(tǒng)重要類的圖圖4.18是人臉檢測(cè)裁剪系統(tǒng)的一些重要關(guān)聯(lián)關(guān)系圖。4.19是XFace系統(tǒng)關(guān)鍵類。根據(jù)MVC架構(gòu)我將XFace系統(tǒng)分為三層。Model層實(shí)現(xiàn)類是圖的AllFaces類與AllImg類主要對(duì)數(shù)據(jù)進(jìn)行封裝用于顯示。View層是顯示數(shù)據(jù)層主要對(duì)應(yīng)了上圖的XFace類。Controller層就是從model層取得數(shù)然后傳遞個(gè)view層對(duì)應(yīng)上圖的Xface類。最底層的兩個(gè)類DetectFunc類與Helper類則是人臉檢測(cè)用到的靜態(tài)函數(shù)庫(kù)與用于顯示提示的靜態(tài)string庫(kù);4.3.2XFace系統(tǒng)重要數(shù)據(jù)結(jié)構(gòu)圖4-22系統(tǒng)重要數(shù)據(jù)結(jié)構(gòu)圖如圖所示,是XFace系統(tǒng)中的重要的數(shù)據(jù)結(jié)構(gòu)類每個(gè)結(jié)構(gòu)的分析如下:Rect結(jié)構(gòu):包括一個(gè)點(diǎn)和一個(gè)Size分別對(duì)應(yīng)與檢測(cè)得到人臉矩形框的左上角和size;Face結(jié)構(gòu):包括了rectface和一個(gè)eyes[2];分別對(duì)應(yīng)檢測(cè)得到一張臉與臉的兩個(gè)眼睛;AllFaces結(jié)構(gòu):包括一個(gè)List<Face>對(duì)應(yīng)于一張圖片上檢測(cè)得到的所有人臉;Image結(jié)構(gòu):有imageName、ImageData、leye、reye、imgsize分別對(duì)應(yīng)檢測(cè)結(jié)果圖的圖片名、圖片像素?cái)?shù)據(jù)、圖片中左眼右眼位置,和圖片大小。AllImgs結(jié)構(gòu):對(duì)應(yīng)所有需要顯示的結(jié)果圖。4.4章小結(jié)本章我們介紹了OepnCV人臉檢測(cè)原理,膚色檢測(cè)原理,人臉歸一化原理。并對(duì)系統(tǒng)進(jìn)行MVC架構(gòu),進(jìn)行詳細(xì)設(shè)計(jì)了Face、AllFaces、Image、AllImgs四個(gè)數(shù)據(jù)結(jié)構(gòu)類,接下來(lái)就可以編碼實(shí)現(xiàn)XFace系統(tǒng)了;5XFace系統(tǒng)實(shí)現(xiàn)5.1OpenCV人臉檢測(cè)模塊實(shí)現(xiàn)5.1.1EmguCV概述我們將EmguCV3.1看作是Opencv的.net版本是由OpenCV封裝而成是一個(gè)跨平臺(tái)的圖像處理庫(kù)。封裝使得OPenCV的函數(shù)能對(duì).net環(huán)境下的C#,VB,IronPyThon等語(yǔ)言進(jìn)行支持。它很能夠在Linux,MacOSX以及一些手機(jī)平臺(tái)上如Android設(shè)備iPhone,iPod,iPad上運(yùn)行REF_Ref25936\w\h[12]。EmguCV優(yōu)點(diǎn):.跨平臺(tái),支持多語(yǔ)言;.提供泛型顏色和度的圖片類Image<color,depth>;.自動(dòng)內(nèi)存管理機(jī)制;.XML序列化圖片;.直接支持圖片類和OpenCV函數(shù)調(diào)用;5.1.2EmguCV封裝OpenCV從圖5.3可以看出第一層是基礎(chǔ)層,它包括了枚舉類型,結(jié)構(gòu)體類型和圖片處理函數(shù)它們的命名空間直接從Opencv封裝而來(lái)。第二層是上層封裝它充分體現(xiàn)了.net框架的優(yōu)點(diǎn)將各種類融合在一起.圖5-1Emgucv封裝結(jié)構(gòu)圖REF_Ref25936\w\h[12]下圖是一些Emgucv與Opencv結(jié)構(gòu)體的對(duì)照。圖5-2Emgucv與Opencv結(jié)構(gòu)體的對(duì)照?qǐng)DREF_Ref25936\w\h[12]下圖是.net框架結(jié)構(gòu)體與Opencv結(jié)構(gòu)體對(duì)照。圖5-3.net框架結(jié)構(gòu)體與Opencv結(jié)構(gòu)體對(duì)照REF_Ref25936\w\h[12]這里簡(jiǎn)潔的介紹了EmguCV,我們應(yīng)該明白為什么選擇它來(lái)做開(kāi)發(fā)。那么接下來(lái)就人我們看一下如何安裝EmguCV。5.1.3EmguCV安裝EmguCv安裝,我們到/projects/emgucv/下載最新版本的emgucv安裝包加壓后打開(kāi).exe文件開(kāi)始安裝到Windows。統(tǒng)配置環(huán)境配置,打開(kāi)系統(tǒng)配置環(huán)境變量在Path上加上...\emgucv3.1\emgucv-windesktop282\bin\X64;添加引用,我們把上述路徑下的.dll文件復(fù)制到項(xiàng)目debug文件目錄下。完成上述操作后就打開(kāi)vs2012創(chuàng)建新工程向解決方案資源管理器添加前面拷貝到debug文件下的dll到引用。到此我們可以用emgucv庫(kù)進(jìn)行開(kāi)發(fā)了。如果某個(gè)程序需要用到Emgucv的內(nèi)庫(kù)則在該程序的開(kāi)始添加UsingXXX即可。5.1.4OpenCV人臉定位實(shí)現(xiàn)代碼:publicModel.AllFacesGetAllFacs(System.Drawing.Bitmapimage){Model.AllFacesmaf=newModel.AllFaces();System.Drawing.Rectangle[]facerectangles=HelpFaceDetect.DetectFunc.DetectFaceUseOpencv(image);if(facerectangles.Length>0){for(inti=0;i<facerectangles.Length;i++){Model.AllFaces.Faceface=newModel.AllFaces.Face();face.Position.Leftup=facerectangles[i].Location;face.Position.Size=facerectangles[i].Size;//獲取每個(gè)人臉的眼睛位置System.Drawing.Bitmapfaceimg=newImage<Bgr,byte>(image).Copy(facerectangles[i]).Bitmap;List<Rectangle>eyerectangles=HelpFaceDetect.DetectFunc.DetectEyesUseOPencv(faceimg,facerectangles[i].Location);if(eyerectangles.Count==2){face.Eyes[0].Leftup=eyerectangles[0].X>eyerectangles[1].X?eyerectangles[1].Location:eyerectangles[0].Location;face.Eyes[1].Leftup=eyerectangles[0].X<eyerectangles[1].X?eyerectangles[1].Location:eyerectangles[0].Location;if(face.Eyes[0].Leftup.X==eyerectangles[0].X){face.Eyes[0].Size=eyerectangles[0].Size;face.Eyes[1].Size=eyerectangles[1].Size;}else{face.Eyes[0].Size=eyerectangles[1].Size;face.Eyes[1].Size=eyerectangles[0].Size;}}maf.FaceList.Add(face);}returnmaf;}else{thrownewException(AppService.Helper.faceDetectResultMesg);}}5.2膚色人臉檢測(cè)模塊實(shí)現(xiàn)5.2.1二值化圖像得到人臉候選區(qū)參考論文發(fā)現(xiàn)在HSV空間H的值在范圍9-50可以分辨出亞洲人皮膚。而在RGB顏色空間下有滿足不等式(R-G>10)&&(G-B)>5的像素點(diǎn)就可以判定為膚色點(diǎn)。然后我們將是膚色點(diǎn)的像素值設(shè)定為255非膚色像素點(diǎn)設(shè)置值為0。實(shí)現(xiàn)源碼如下:if((Rf-Gf>10)&&Gf-Bf>5){srcImg.Data[i,j,0]=255;srcImg.Data[i,j,1]=255;srcImg.Data[i,j,2]=255;if(9<=H&&H<=50){srcImg.Data[i,j,0]=255;srcImg.Data[i,j,1]=255;srcImg.Data[i,j,2]=255;}else{srcImg.Data[i,j,0]=0;srcImg.Data[i,j,1]=0;srcImg.Data[i,j,2]=0;}}else{srcImg.Data[i,j,0]=0;srcImg.Data[i,j,1]=0;srcImg.Data[i,j,2]=0;}}}SrcImg=srcImg;}這里二值化的方法采用了RGB顏色空間和Hsv顏色空間的組合方法其中用于判斷的閥值是參考一種基于膚色分割的人臉檢測(cè)方法REF_Ref2285\w\h[14]的文獻(xiàn)。5.2.2候選膚色區(qū)域篩選對(duì)于一般人臉二值化圖像的面積要大于20*20=400可以排除一些小的區(qū)域。由于人臉幾何特征存在人臉比例范圍在0.8-2.5范圍可以篩選出人臉。源碼如下:#region獲取候選膚色區(qū)域privatestaticList<Rectangle>getfaceCandidateRect(Image<Gray,byte>BlackWhitesrcImg){List<Rectangle>candidateRectList=newList<Rectangle>();//Image<Gray,byte>candidateImg=newImage<Gray,byte>(BlackWhitesrcImg.Size);using(VectorOfVectorOfPointcontours=newVectorOfVectorOfPoint()){//找到所有連通域contoursCvInvoke.FindContours(BlackWhitesrcImg,contours,null,Emgu.CV.CvEnum.RetrType.Tree,Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple,newPoint(0,0));intcount=contours.Size;//遍歷contours根據(jù)面積判斷是否舍棄for(inti=0;i<count;i++){using(VectorOfPointcontour=contours[i])using(VectorOfPointapproxContour=newVectorOfPoint()){//多邊形曲線逼近CvInvoke.ApproxPolyDP(contour,approxContour,CvInvoke.ArcLength(contour,false)*0.05,true);if(CvInvoke.ContourArea(approxContour,false)>400)//onlyconsidercontourswithareagreaterthan100{RectanglerectCandidate=CvInvoke.BoundingRectangle(approxContour);//根據(jù)人臉特征比例篩選if(2.5>=((float)rectCandidate.Height/rectCandidate.Width)&&((float)rectCandidate.Height/rectCandidate.Width)>0.8)candidateRectList.Add(rectCandidate);}}}}returncandidateRectList;}#endregion 本算法是基于人臉長(zhǎng)和寬比例在[0.8-2.5]范圍特征REF_Ref4839\w\h[13]來(lái)篩選人臉區(qū)域和基于經(jīng)驗(yàn)的數(shù)據(jù)人臉面積一般大于20*20像素來(lái)排除非人臉。5.3歸一化實(shí)現(xiàn)5.3.1灰度投影法定位人眼根據(jù)上面描述的自動(dòng)歸一。該方法利用了在人眼區(qū)域會(huì)存在局部灰度值最低從而定位人眼。從而得到雙眼位置用于旋轉(zhuǎn)圖像。實(shí)現(xiàn)源碼:#region自動(dòng)定位人眼privatestaticPointF[]autoLocateEye(Image<Gray,byte>OrGrayImg){//【0】左眼【1】右眼PointF[]twoeyes=newPointF[2];intx1=OrGrayImg.Width/4,x2=OrGrayImg.Width/2,x3=x2,x4=x2+x1;inty1=OrGrayImg.Height/4,y2=OrGrayImg.Height/2;intWstep=(x2-x1)/5;inthstep=(y2-y1)/5;//縱向掃描矩形(x1,x2,y1,y2)(x3,x4,y1,y2)得到twoeyes.Yfloatmingh=255*(x2-x1)*(y2-y1),mingw=255*(x2-x1)*(y2-y1);for(inth=y1;h<=y2;h+=hstep){for(intw=x1;w<=x2;w+=Wstep){floatgh=0.0f;for(intk=0;k<hstep;k++)for(intl=0;l<Wstep;l++)gh+=OrGrayImg.Data[h+k,w+l,0];//[10,10]區(qū)域的像素和if(gh<=mingh){twoeyes[0].Y=h+hstep/2;//得到左眼Y;twoeyes[0].X=w+Wstep/2; //得到左眼Xmingh=gh;}}}mingh=255*10000;mingw=255*10000;for(inth=y1;h<=y2;h+=hstep){for(intw=x3;w<=x4;w+=Wstep){floatgh=0.0f;for(intk=0;k<hstep;k++)for(intl=0;l<Wstep;l++)gh+=OrGrayImg.Data[h+k,w+l,0];//小矩形像素和if(gh<=mingh){twoeyes[1].Y=h+hstep/2;//得到右眼Y;twoeyes[1].X=w+Wstep/2;mingh=gh;}}}returntwoeyes;}#endregion從我多次進(jìn)行的檢測(cè)結(jié)果得出結(jié)論:本方法需要預(yù)先根據(jù)對(duì)人臉顯性特征來(lái)對(duì)人眼劃分區(qū)域如果預(yù)分區(qū)出錯(cuò)就會(huì)導(dǎo)致算法嚴(yán)重錯(cuò)誤。比如對(duì)于某些人臉處于圖片邊緣或者人眼并未處于劃分出來(lái)的區(qū)域會(huì)出現(xiàn)檢測(cè)錯(cuò)誤。目前還未想到好的解決方案。對(duì)于定位失敗的人臉,現(xiàn)在只能通過(guò)手動(dòng)選取人眼來(lái)達(dá)到歸一化。5.3.2旋轉(zhuǎn)人臉圖像為了使的兩眼處于同一水平我們把人臉圖像繞左眼所在點(diǎn)旋轉(zhuǎn)人臉。實(shí)現(xiàn)偽代碼:Begin(算法開(kāi)始)InputLeye,Reye,SrcImg(輸入?yún)?shù))getAngle(Leye,Reye)(獲取旋轉(zhuǎn)角度)Reotate(Leye,SrcImg)(旋轉(zhuǎn)圖片)OutPut(SrcImg);(輸出結(jié)果)5.3.3裁剪歸一化。根據(jù)左眼裁剪旋轉(zhuǎn)后的人臉并歸一化到相同尺寸,目的在于可以得到眼睛在同一水平線上大小相同的去掉會(huì)干擾人臉識(shí)別的無(wú)關(guān)區(qū)域。裁剪偽代碼:Begin(算法開(kāi)始)InputSrcImg,Leye,Distance(輸入?yún)?shù))getRectangle(Leye,Distance)(獲得人臉矩形)Img=SrcImg

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論