




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
-6-1緒論1.1引言 本文的重點是基于Python的人臉識別技術(shù),該系統(tǒng)能夠完成人臉識別的工作,并利用相機獲取的圖像進行特征提取,從而構(gòu)建出一個特征庫。1.2選題背景及意義生物特征識別是利用計算機技術(shù),通過采集人的生物特征樣本進行人的身份識別。從1950年代起,心理學(xué)家們就開始了面部辨識,到了六十年代,逐漸發(fā)展成為一項重要的生物辨識技術(shù)。區(qū)別于指紋、虹膜等其他生物識別,人臉識別技術(shù)具有直觀、非接觸性、方便采集、交互性強、可擴展性的優(yōu)點,成為大數(shù)據(jù)時代背景下的生物特征識別中一個非常熱門的研究領(lǐng)域[1]。盡管近年來,面部識別技術(shù)已經(jīng)有了一定的進展,但是由于面部的姿態(tài)、表情、光線、遮擋、角度、分辨率等因素的存在,使得人臉識別的準確率和精度都受到影響。目前,傳統(tǒng)的人臉識別技術(shù)已經(jīng)不能解決各類復(fù)雜因素下的人臉識別問題,實際應(yīng)用面臨諸多挑戰(zhàn)。隨著深度學(xué)習(xí)的發(fā)展和廣泛應(yīng)用,人臉識別研究有了很大的突破,其自身適應(yīng)性、精確性和智能度得到很大提升[2]。本文從傳統(tǒng)人臉識別方法面臨的技術(shù)問題出發(fā),闡述深度學(xué)習(xí)理論及其在人臉識別中的應(yīng)用,并對未來的發(fā)展進行展望。1.3研究現(xiàn)狀1.3.1國內(nèi)現(xiàn)狀在我國,人工智能技術(shù)的發(fā)展相對滯后,發(fā)展速度相對較慢。但是隨著國家政策的傾向性,很大研究機構(gòu)以及頭部企業(yè)都開始逐漸的布局自己的AI實驗室,特別是在人臉識別領(lǐng)域,很大科研機構(gòu)和高校都成立相關(guān)的人臉識別研究小組進行技術(shù)的研究并逐步的取得了一定的成果。在這之中,中科院通過長期的研究研發(fā)出一個人臉信息比對系統(tǒng),作為一個歷史性的進步將人臉識別系統(tǒng)推到了奧運安保系統(tǒng)的應(yīng)用,實現(xiàn)了對門票持有者的信息檢測和核對功能,為奧運安保大系統(tǒng)提供了決策支持依據(jù)[3]。863計劃、國家科技支撐計劃、自然科學(xué)基金都撥出專款資助人臉識別的相關(guān)研究[4]。1.3.2國外現(xiàn)狀在麻省理工的AI實驗室中,布魯內(nèi)里在1992年[5]做了一個實驗,對以結(jié)構(gòu)特征為核心和以模板特征為核心的方法進行了識別性能的對比,最終給出了一個實驗結(jié)論:對于模板匹配而言其是優(yōu)于基于特征的方式的。這在很大程度上促進了基于模板的方法在人臉識別領(lǐng)域的發(fā)展和研究,使其逐漸成為主流的人臉識別技術(shù)[6]?;鶌W蓋蒂斯(Georghiades)等人提出的基于光照錐(IlluminationCones)模型的多姿態(tài)、多光照條件人臉識別方法是這一時期的重要成果之一,他們證明了一個重要結(jié)論:同一人臉在同一視角、不同光照條件下的所有圖像在圖像空間中形成一個凸錐——即光照錐[7]。為了從有限的不確定光線情況下的人臉圖像中得到光錐,他們還拓展了傳統(tǒng)的光度立體視覺方法,在朗博模型、凸表面和遠點等假定的情況下,利用不確定光線條件的7個相同視點圖像來恢復(fù)目標表面的三維形狀和表面反射系數(shù)(常規(guī)光度立體視覺可以根據(jù)3個已知的光照狀況來恢復(fù)目標表面的法向量方向),因此,可以很方便地將在這一角度下的任何光線狀況下的圖像進行合成,從而完成照明圓錐的計算。識別則通過計算輸入圖像到每個光照錐的距離來完成[8]。1.4研究目的面部識別是一種通過面部檢測與面部追蹤相比較來識別人體的一種生物識別技術(shù)。在一個比較復(fù)雜的場景中,利用人臉識別技術(shù)可以將一個人從大量的人臉中分離出來,不管是動的,還是靜止的,都能進行人臉的跟蹤和識別。與指紋、虹膜、聲音等生物特征相似,人臉識別也是不可復(fù)制的優(yōu)秀特征。其他生物識別技術(shù)需要專門配合采集的設(shè)備和數(shù)據(jù)才能完成識別任務(wù),而人臉識別技術(shù)就不需要那么多人來配合,它可以隱藏在任何角落。人臉識別不但具有靈活性,而且具有較高的識別精度。1.5實驗方法人隨著對面部特征的研究逐漸深入,人們對面向現(xiàn)實情況的面部特征的研究也越來越多,主要有四個方面:1、提出了多種人臉空間模型,其中線性判別分析是典型的線性建模方法,Kernel法是典型的非線性建模技術(shù),3D人臉識別技術(shù)是三維人臉識別技術(shù)的重要組成部分。2深入分析和研究影響人臉識別的因素,包括光照不變?nèi)四樧R別、姿態(tài)不變?nèi)四樧R別和表情不變?nèi)四樧R別等。3采用了新的特征表達,其中包含了局部描述器(GaborFace,LBPFace)以及深度學(xué)習(xí)算法。4利用新的數(shù)據(jù)源,例如基于視頻的人臉識別和基于素描、近紅外圖像的人臉識別。1.6論文結(jié)構(gòu)論文的設(shè)計內(nèi)容包括:可行性分析、需求分析、總體設(shè)計、詳細設(shè)計、系統(tǒng)測試。從設(shè)計系統(tǒng)最基礎(chǔ)的開始,關(guān)于整個系統(tǒng)進行設(shè)計與完成進行了具體的闡述。論文的組織架構(gòu)為:對文章的背景意義以及當(dāng)前人臉識別研究現(xiàn)狀和本文的研究方法進行介紹和簡單的分析。主要介紹了Python語言開發(fā)、人臉檢測、面部特征提取、特征分類等技術(shù)。對系統(tǒng)的可行性從經(jīng)濟和技術(shù)層面進行分析,從功能、性能兩個層面進行需求分析并給出運行環(huán)境??傮w設(shè)計,包括對人臉識別技術(shù)應(yīng)用的總體功能設(shè)計、系統(tǒng)的技術(shù)路線以及系統(tǒng)的處理流程。應(yīng)用實現(xiàn)。應(yīng)用測試??偨Y(jié)展望。1.7本章小結(jié)本章首先介紹了人臉識別的背景,然后根據(jù)國內(nèi)外的研究狀況,闡述了本文的研究目標和方法,提出了本文的結(jié)構(gòu)框架。
2相關(guān)技術(shù)概念2.1python簡介Python是一種古老的語言,它在機器學(xué)習(xí)和數(shù)據(jù)分析方面得到了迅速的發(fā)展。在編程方面,python和其它開發(fā)語言并沒有太大的不同,但它也有它自己的特點。python是一種動態(tài)的面向?qū)ο蟮恼Z言,隨著算力以及人工智能的發(fā)展,pyhton得到了迅猛的發(fā)展,已經(jīng)廣泛的用于各類程序開發(fā)設(shè)計種[9]。Python是一種很好的解釋性語言,其用途非常廣泛,比如后端、數(shù)據(jù)分析、數(shù)據(jù)挖掘、人工智能等,這些都可以通過python來實現(xiàn),而如今,越來越多的大型框架開始向python靠攏。自1991年python問世以來,一直以簡單、靈活呈現(xiàn)在開發(fā)人員面前,python開發(fā)快捷,通常一個java組完成的任務(wù),python也許一個人就可以完成,雖然其使用起來非常便捷性,但是性能問題一直為人詬病,所以通常其應(yīng)用場景是流量不大的情況。眾多的中小型公司還是很愿意使用python的,其開發(fā)成本相對較少。Python是當(dāng)今使用的最流行和最廣泛采用的編程語言之一。2008年,Python開發(fā)人員引入了該語言的新版本Python3.0,它與Python2不向后兼容,為Python軟件開發(fā)人員開啟了一個過渡階段。區(qū)別與兼容:py2中的int,長類型,沒有任何好處。在py3中,int是被統(tǒng)一的,為了兼容,必須把long轉(zhuǎn)換成int。py2中支持basestring(),py3不支持basestring()函數(shù),改用str()函數(shù)。py2中的字符串是Unicode編碼的字節(jié),在py3中澤使用str和bytes作為unicode進行編碼。4.py2中,<>和!=都可以表示不等于,py3廢除了<>,僅支持!=表示不等于。兼容方法:統(tǒng)一使用!=運算符。5.在py2中,最常用的方式就是執(zhí)行comp__()方法。但是py3刪除了comp__()方法和cmp()的內(nèi)建函數(shù)。6.py2可以對兩種數(shù)據(jù)類型的對象進行比較,結(jié)果不可預(yù)測,也沒有意義。py3修改了它,如果比較運算數(shù)的類型不一致,就會引發(fā)類型錯誤,諸如此類。2.2人臉檢測技術(shù)人臉識別是人臉識別的關(guān)鍵部分。但有諸多因素會影響其檢測精度,如光照和姿態(tài)等[10]。Dlib庫中有兩種類型的庫,分別是Dlib-CNN和dlib-HOG。前者是一種基于方向梯度直方圖(HOG)特征和滑動窗口的檢測器,后者則基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)對人臉進行檢測。從兩種檢測器的效果上來看,前者比后者準確,但需要更強大的算力來支持,在同樣配置和性能下,運行600*400圖片的計算,CNN檢測器卻性需要打給5秒;而HOG人臉檢測器卻僅僅用了0.25秒。本文使用dlib庫提供高精度人臉識別算法CNN人臉檢測器,其基于深度學(xué)習(xí)網(wǎng)絡(luò)ResNet-34實現(xiàn)。該網(wǎng)絡(luò)使用三百萬張照片訓(xùn)練最后生成的高質(zhì)量人臉檢測模型。源碼編譯安裝dlib后,可以通過在含有GPU的計算機上啟用CUDA以達到理想的速度。2.3面部特征提取由于人臉的特征按區(qū)域劃分為不同的分類,例如:局部、點等,因此,分類的分類也有很多種,例如:基于統(tǒng)計的、基于先驗的?;诮y(tǒng)計的方法是當(dāng)前得到廣泛使用的一種方法,能夠?qū)⒛繕诵畔⑦M行轉(zhuǎn)化和細分,將其與卷積神經(jīng)網(wǎng)絡(luò)進行結(jié)合,可以進一步提升檢測效率和精準度[13]?;谙闰炓?guī)則的方法能夠有效提升人臉檢測的精度,操作也比較簡單,根據(jù)之前相關(guān)人員的理解,以及經(jīng)驗進行提取,但要求圖像具有較高的清晰度,限制了其適用范圍[14]。2.4特征分類特征分類作為算法基礎(chǔ)數(shù)據(jù),在人臉識別中是非常重要的一環(huán),常見的分類器有SVM、LR等具有很好的精準度,但是很難進行實時的識別[15]。除了傳統(tǒng)的方法外還有一種廣泛被使用的就是CNN卷積神經(jīng)網(wǎng)絡(luò)。與傳統(tǒng)的方法相比較,卷積神經(jīng)網(wǎng)絡(luò)不需要復(fù)雜的特征處理和人為的干預(yù),同時具有很好的泛化能力[16]。隨著數(shù)據(jù)量的增加以及任務(wù)的復(fù)雜度增加,可以通過增加網(wǎng)絡(luò)層來實現(xiàn)更為復(fù)雜的特征分類和提取,具有很好的普適性。2.5卷積神經(jīng)網(wǎng)絡(luò)隨著計算機視覺技術(shù)的不斷發(fā)展,對于視覺任務(wù)而言,最有效的工具就是卷積神經(jīng)網(wǎng)絡(luò),它是人工神經(jīng)網(wǎng)絡(luò)的一種,包含卷積層、池化層、全連接層,是一種多層神經(jīng)網(wǎng)絡(luò),擅長處理圖像任務(wù)。隨著層次的增長,神經(jīng)網(wǎng)絡(luò)可以獲得更多的參數(shù),從而使特征學(xué)習(xí)變得更加詳細。本文所做的工作就是利用CNN的ResNet來構(gòu)造人臉識別模型,并利用殘差模塊構(gòu)造出任意深度的神經(jīng)網(wǎng)絡(luò)。人臉識別飛速發(fā)展,已廣泛應(yīng)用到很多領(lǐng)域。2.6本章小結(jié)本章將詳細介紹有關(guān)實現(xiàn)此系統(tǒng)的技術(shù)理念。主要內(nèi)容有Python、人臉識別、臉部特征抽取、特征分類等。
3可行性分析與需求分析3.1可行性分析技術(shù)可行性分析:面部識別技術(shù)是根據(jù)面部特征(例如面部特征、幾何特征)自動識別的一種生物識別技術(shù)。我們所說的面部識別,是指對人臉進行光學(xué)識別和確認的一種簡稱。人臉識別是通過攝像機或攝像機獲取包含臉部信息的圖像或視頻流,然后對圖像中的人臉進行檢測、追蹤,從而對所檢測到的人臉進行相應(yīng)的處理。經(jīng)濟可行性分析經(jīng)濟上的可行性,是指當(dāng)前軟件開發(fā)所能帶來的經(jīng)濟效益,以及所需的資本。在實踐中,它是否能夠提供具體的經(jīng)濟信息。從社會的總體發(fā)展來看,隨著社會的發(fā)展,各種硬件和軟件的發(fā)展都在飛速的發(fā)展,而網(wǎng)絡(luò)技術(shù)的普及也越來越普及,而人臉識別的大部分代碼都是免費的,例如cv2庫(OpenCV,opencv-python)以及opencv_contrib,傳統(tǒng)方法和深度學(xué)習(xí)方法都有,dlib基于C++的機器學(xué)習(xí)庫等等,所以此項目開發(fā)成本不高,具有經(jīng)濟可行性。社會可行性:隨著Internet的日益發(fā)展和擴大,相關(guān)得硬件價格也在降低,而隨著近幾年人工智能得快速發(fā)展,人臉識別系統(tǒng)得到了廣泛得應(yīng)用。通過面部識別,可以設(shè)置密碼,開關(guān),身份確認。借助于數(shù)字化時代得快速發(fā)展,人臉識別在未來肯定會有越來越多得發(fā)展空間,所以本次系統(tǒng)得設(shè)計是存在一定得社會意義得。3.2功能需求圖片上傳模塊:由于完成是臉部的辨識,后面的辨識要經(jīng)過演算法的訓(xùn)練,因此必須要將臉部的影像資料上傳,以便進行訓(xùn)練與比對。訓(xùn)練模塊:在第一步上傳了一張臉之后,就可以進行建模訓(xùn)練了,因此有了一個模組。上傳圖片人臉識別:在訓(xùn)練結(jié)束后,有兩種方法可以進行面部識別對比,一種是上傳照片進行比對。調(diào)用攝像頭識別:還可以通過攝像頭捕捉面部信息,進行身份驗證。3.3性能需求從本質(zhì)上來說,人臉識別系統(tǒng)就是一種人臉匹配系統(tǒng),但在實際應(yīng)用中,它的使用條件非常苛刻。首先,系統(tǒng)在運轉(zhuǎn)期間內(nèi)系統(tǒng)的響應(yīng)時間不能太久,這樣會造成應(yīng)用的不便,比如閘門或者身份驗證等。其次,因為這些信息都是敏感的,因此,系統(tǒng)的安全性是非常重要的。沒有了這些基本的能力,這個系統(tǒng)就不能用了,因為現(xiàn)在是一個信息化的時代,數(shù)據(jù)都要儲存在電腦里,為了保證數(shù)據(jù)的安全、保密和數(shù)據(jù)的準確性。3.4運行環(huán)境1.客戶端操作系統(tǒng):Windows102.開發(fā)環(huán)境:python3.83.Python庫:face_recognition庫、dlib庫4.開發(fā)工具:Pycharm3.5本章小結(jié)本章對系統(tǒng)的可行性和需求進行分析。針對可行性介紹了技術(shù)可行性和經(jīng)濟可行性。針對需求分析首先介紹了功能的需求分析然后針對系統(tǒng)的性能需求進行介紹,最后給出系統(tǒng)的開發(fā)和運行環(huán)境。
4總體設(shè)計4.1功能總體設(shè)計本論文所設(shè)計的人臉識別系統(tǒng),根據(jù)人臉識別的要求,在整個設(shè)計過程中,可以實現(xiàn)如下功能流程。圖4-1功能流程圖臉部的來源大致有三種:攝像頭采集、圖片上傳和視頻上傳。作為一個應(yīng)用實例,攝像機在獲取面部圖像后,對圖像進行逐幀采集,并對圖像進行分析。首先使用opencv-python模塊讀取圖片,接著對圖片進行人臉檢測和定位,獲取到人臉區(qū)域坐標后。為了避免光線、角度對圖像的特征提取帶來誤差,因此,接下來進行人臉對其的操作,人臉對齊使用了dlib庫的人臉預(yù)測器。然后通過對人臉特征值庫進行遍歷比對(csv格式),求出它的歐式距離,得到最小值,這里設(shè)定了0.4,也就是最小值min_dis小于0.4,就可以把這個人的臉和數(shù)據(jù)庫中的臉看成是一個人,輸出該人的姓名;若大于或等于0.4,則和庫中不是一個人,系統(tǒng)提示未知人臉。4.2技術(shù)路線本文人臉識別應(yīng)用的技術(shù)路線如圖4-2所示,分為圖像讀取技術(shù)、人臉檢測技術(shù)、人臉對齊技術(shù)、人臉表示技術(shù)和人臉匹配技術(shù)。下面將對技術(shù)路線的每一步設(shè)計進行詳細講解。圖4-2人臉識別技術(shù)的基本工作流程(1)圖片讀取(ImageDecode)使用Python的cv2庫(OpenCV,opencv-python)從底層讀取圖像并編碼轉(zhuǎn)化為數(shù)據(jù)集,opencv支持一系列預(yù)處理操作,例如對圖像的灰度化、二值化等,使得后續(xù)處理更加方便、準確。(2)人臉檢測(FaceDetection)從輸入的圖像中檢測到人臉區(qū)域,并返回人臉包圍矩形對應(yīng)的坐標[(x1,y1)(x2,y2)],通過數(shù)組切片操作即可剪切出需要的人臉。(3)人臉對齊(FaceAlignment)人臉對齊又叫人臉配準,是依據(jù)人臉特征點對人臉進行標準化處理的一種方法。人臉對齊主要將人臉中的eyes,mouth,noseandchin用特征點標記出來,使人臉區(qū)域的尺度和角度一致,減少特征值提取與人臉匹配過程中產(chǎn)生誤差。本文采用基于回歸樹的人臉對齊方法和級聯(lián)殘差回歸樹(GBDT)技術(shù),逐步實現(xiàn)了人臉的非正常形態(tài)恢復(fù)。(4)人臉表示(FaceRepresentation)通過對齊臉部和正規(guī)化的面部區(qū)域,求出特征矢量。一般情況下,同一個人在多次提取則會產(chǎn)生相似的特征向量,非同一個人則會提取出差別較大的兩組向量。本文使用ResNet-34網(wǎng)絡(luò),網(wǎng)絡(luò)對關(guān)鍵點編碼并輸出128維的人臉特征數(shù)據(jù)。(5)人臉匹配(FaceMataching)可以由兩個面部特征矢量的計算結(jié)果與歐氏距離公式(1)相匹配。距離越小,說明兩個人越相似。當(dāng)歐氏距離小于某一個值時(本文設(shè)置dis閾值為0.4),則可以認為他們是同一個人。(x1?y1以上即為人臉識別的核心算法的應(yīng)用技術(shù)路線,為了更好的呈現(xiàn)算法實現(xiàn)效果,本文使用Qt作為界面軟件設(shè)計對人臉識別的應(yīng)用做可視化展示,開發(fā)時借助外部工具QTDesigner和PyUIC。QTDesigner可對界面進行設(shè)計和制作,接著使用配置的PyUIC工具將設(shè)計的.ui文件轉(zhuǎn)化為python可運行的.py文件文件。4.3系統(tǒng)流程圖4-3系統(tǒng)流程圖圖像采集:可以分為選擇圖片,選擇視頻和調(diào)用攝像頭采集。對視頻或者圖像數(shù)據(jù)庫中的面部圖像進行,系統(tǒng)就需要通過豐富訓(xùn)練的人臉數(shù)據(jù)庫對照片,進行圖像預(yù)處理,解決拍攝角度不佳的問題,并對圖片進行適當(dāng)?shù)纳炜s變換,保證圖像的統(tǒng)一性,解決圖像大小不統(tǒng)一的問題,采用灰度變換解決光照環(huán)境及圖像清晰度的問題。人臉檢測:判定使用者所選檔案中是否包含臉部資訊,若無,則完成辨識。通過對人臉和非人臉區(qū)域的特征差進行定位,為下一步人臉區(qū)域的特征提取奠定基礎(chǔ)。面部特征和分析定位:利用最匹配的人臉識別算法(如:幾何特征識別法、PCA識別法、神經(jīng)網(wǎng)絡(luò)識別法、LHD算法等)來判斷人臉的存在。通過這些算法,可精準的在百萬種人臉中探測同一張臉,瞄準他們的定位。通過特征分析,一旦檢測出是同一張臉,就會將采集到的圖形進行處理,從而將其從背景中分離出來,恢復(fù)其人臉尺寸和表情神態(tài)。人臉匹配:數(shù)據(jù)庫中匹配人臉信息,此系統(tǒng)中的人臉數(shù)據(jù)庫為一個csv文件,csv文件的每一行對應(yīng)的人臉信息和128維的數(shù)據(jù)。人臉錄入:用戶選擇人臉錄入的時候也可以選擇照片或者調(diào)取攝像頭檢測人臉,若多次錄入人臉信息,則對其人臉的每次獲取到的數(shù)據(jù)求平均值存入csv人臉庫中。4.4本章小結(jié)本章首先對展開了人臉識別算法的應(yīng)用的總體功能進行設(shè)計,設(shè)置了人臉識別應(yīng)用的三種圖片采集的方法,設(shè)置了0.4的閾值。接下來對系統(tǒng)技術(shù)路線進行設(shè)計,分別介紹了圖像讀取技術(shù)、人臉檢測技術(shù)、人臉對齊技術(shù)、人臉表示技術(shù)和人臉匹配技術(shù)的應(yīng)用。最后介紹了人臉識別技術(shù)應(yīng)用的系統(tǒng)流程。5應(yīng)用實現(xiàn)5.1所需環(huán)境本文的開發(fā)環(huán)境如表5-1所示表5-1人臉識別應(yīng)用開發(fā)環(huán)境環(huán)境環(huán)境描述開發(fā)機開發(fā)主要聯(lián)想筆記本電腦,CPU:Intei7-8750HWindows10企業(yè)版GPU:RTX3050開發(fā)語言Python3.8.13開發(fā)工具VSCodePyCharm2021(社區(qū)版)表5-2則展示了人臉識別應(yīng)用的主要包或依賴,并對其應(yīng)用場景進行詳細的說明。其中用到的包主要有dlib19.19和OpenCV。表5-2人臉識別應(yīng)用主要的包或依賴包或依賴詳細描述dlib19.19人臉識別深度學(xué)習(xí)庫cv2(opencv_python-4.1.2)圖片編碼導(dǎo)入numpy-1.19.5人臉識別計算歐氏距離pandas-1.2.5讀取CSV(read_csv)PyQt5-5.15.5可視化展示界面本文人臉識別應(yīng)用的實現(xiàn)在Pycharm中開發(fā),應(yīng)用配置了兩個外部工具:QTDesigner和PyUIC。前者是PythonGUI設(shè)計工具,其程序使用Anaconda3自帶的designer.exe。工具PyUIC配置的命令如下:-mPyQt5.uic.pyuic$FileName$-o$FileNameWithoutExtension$.py5.2圖像讀取5.2.1讀取圖片文件圖片讀取與上傳作為一個基礎(chǔ)的輔助模塊。本文使用的是cv2的imread()方法。imread()方法可得到一個三維數(shù)組有每個像素點在BGR通道的灰度值的數(shù)據(jù)。如圖5-1所示,點擊選擇圖片圖標,即可觸發(fā)Windows彈出上傳圖片彈窗,選擇需要識別的人臉圖片即可。(支持*.jgp、*.jgep、*.png)圖5-1選取圖像文件圖片讀取上傳的核心代碼為:@staticmethoddefcv_imread(filePath):#讀取圖片#cv_img=cv2.imread(filePath)cv_img=cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)#imdecode讀取的是rgb,如果后續(xù)需要opencv處理的話,需要轉(zhuǎn)換成bgr,轉(zhuǎn)換后圖片顏色會變化#cv_img=cv2.cvtColor(cv_img,cv2.COLOR_RGB2BGR)iflen(cv_img.shape)>2:ifcv_img.shape[2]>3:cv_img=cv_img[:,:,:3]returncv_img5.2.2讀取視頻文件 讀取視頻文件的操作和讀取圖片類似,點擊視頻圖標選擇視頻文件即可(支持*.mp4、*.avi)。視頻的讀取用也為OpenCV庫,使用其cv2.VideoCapture(fileName)方法實現(xiàn)視頻的讀取。VideoCapture()中參數(shù)是0,表示打開筆記本的默認攝像頭,參數(shù)是視頻文件路徑則打開視頻文件。iffileName_choose!='':self.flag_timer="video"self.textEdit_video.setText(fileName_choose+'文件已選中')self.textEdit_video.setStyleSheet("background-color:transparent;\n""border-color:rgb(0,170,255);\n""color:rgb(0,170,255);\n""font:regular12pt\"華為仿宋\";")#self.label_display.setText('正在啟動識別系統(tǒng)...\n\nleading')QtWidgets.QAcessEvents()try:#初始化視頻流self.cap_video=cv2.VideoCapture(fileName_choose)except:print("[INFO]couldnotdetermine#offramesinvideo")else:self.textEdit_video.setText('視頻文件未選中')5.2.3調(diào)用攝像頭點擊左下角第三排攝像頭圖標即可觸發(fā)系統(tǒng)獲取攝像頭狀態(tài)信息,點擊開始運行即可運行讀取攝像頭中的人臉信息。在系統(tǒng)初始化時候,可對初始化屏幕畫面對象。self.cap=cv2.VideoCapture(self.CAM_NUM),后期需要渲染到界面上時調(diào)用即可,例如flag,img_rd=self.cap.read()#獲取畫面。界面和圖5-1類似,這里便不再贅述。5.3人臉檢測與特征提取本文使用dlib庫中的正向人臉檢測器進行人臉的檢測,用它來加載人臉所在的區(qū)域。人臉關(guān)鍵點預(yù)測器(shape_predictor_68_face_landmarks.dat)及采用ResNet網(wǎng)絡(luò)訓(xùn)練的人臉識別模型(dlib_face_recognition_resnet_model_v1.dat)。人臉特征提取的思路如下。首先,使用人臉正向檢測器檢測出人臉矩形,將結(jié)果送到人臉關(guān)鍵點預(yù)測器中標記人臉的68個關(guān)鍵點位,其中1~17標記臉部輪廓,18~27標記眉毛,28~36標記鼻子,37~48標記眼睛,49~68標記嘴巴,如圖5-2所示。其次,將圖像中68個關(guān)鍵點轉(zhuǎn)換為128D面部描述符。最后,將同一人所有圖像的128D面部描述符求均值并寫入csv文件中。人臉檢測和特征提取的核心代碼如下:
predictor=dlib.shape_predictor("assets/shape_predictor_68_face_landmarks.dat")
dlib.face_recognition_model_v1("assets/dlib_face_recognition_resnet_model_v1.dat")
#得到28D特征
defreturn_128d_features(path_img):
img_rd=io.imread(path_img)
img_gray=cv2.cvtColor(img_rd,cv2.COLOR_BGR2RGB)
faces=detector(img_gray,1)
#確??蓹z測到人臉信息
iflen(faces)!=0:
shape=predictor(img_gray,faces[0])
face_descriptor=face_pute_face_descriptor(img_gray,shape)
else:
face_descriptor=0
print("noface")
returnface_descriptor5.4人臉識別模塊完成人臉檢測與特征提取后,返回了人臉的特征點,在這一步中將它們保存在shape中。下面我們通過pute_face_descriptor()來計算特征向量。face_descriptor=self.face_reco_pute_face_descriptor(img_rd,shape)若識別后的目的是進行人臉錄入,那么系統(tǒng)將調(diào)用extract_features()函數(shù),提出特征存入feature_all.csv文件中,此處的CSV文件相當(dāng)于人臉識別的人臉特征數(shù)據(jù)庫。如圖5-3所示:圖5-3人臉特征數(shù)據(jù)的存儲若識別后的目的是人臉識別,那么將遍歷CSV中的人臉特征獲取特征值,獲取128維的特征向量,并分別遍歷計算待檢測照片特征值和CSV中的人臉數(shù)據(jù)的歐氏距離。其核心代碼如下:@staticmethoddefeuclidean_distance(feature_1,feature_2):#計算兩個128D向量間的歐式距離feature_1=np.array(feature_1)feature_2=np.array(feature_2)dist=np.sqrt(np.sum(np.square(feature_1-feature_2)))returndist最后依次計算歐氏距離篩選出計算結(jié)果中最小的歐氏距離,若其值小于閾值0.4,則顯示對應(yīng)的人名,否則匹配失敗。判斷歐氏距離的核心代碼如下:ifmin_dis<0.4:self.current_face_name[k]=self.face_name_exist[similar_person_num]self.label_score_dis.setText(str(round(min_dis,2)))5.5本章小結(jié)本章主要對系統(tǒng)核心模塊的實現(xiàn)進行介紹,其中對模型的訓(xùn)練和人臉的檢測識別模塊進行了詳細分析介紹。
6應(yīng)用測試6.1測試方法從針對系統(tǒng)的內(nèi)部結(jié)構(gòu)以及相關(guān)模塊實現(xiàn)的方面來著手,可以將測試方法分為兩大類,白盒測試和黑盒測試。黑盒測試:別名也有手動性功能測試或者以數(shù)據(jù)為載體的測試,都是在已經(jīng)了解清楚了系統(tǒng)功能后,設(shè)計測試用例進行的測試,目的在于看測試用例中用例是否可以完全通過。在具體的過程中,不在乎具體的實現(xiàn)邏輯,當(dāng)作一個黑盒子,只對其進行使用。主要的方法可以有以下幾種,邊界值分析、因果流程分析以及錯誤的推測等等。該測試方法僅限于程序外部,面向接口函數(shù)的測試,與窮舉法基本相同,要求測試者對產(chǎn)品的設(shè)計有足夠的理解,并設(shè)計出廣泛的測試案例。同時也需要有豐富的經(jīng)驗,知道那些地方容易出錯,或者說一般的合法非合法輸入有足夠的了解。白盒測試:也稱之為結(jié)構(gòu)的測試或者說是以邏輯為載體驅(qū)動,明確了解產(chǎn)品內(nèi)部流程,以測試的手段來確認是否按照產(chǎn)品說明書的流程執(zhí)行,這個情況下先不管其功能。是一種路徑窮舉的測試方法。測試人員需要對程序的內(nèi)部結(jié)構(gòu)進行查看,從邏輯流程未入口來測試,當(dāng)然和黑色測試一樣,窮舉法一樣的缺陷,就算測試完成,所有用例都通過還是可能會有遺漏的情況。6.2測試用例該平臺采用了黑盒的測試方法,沒有考慮到平臺的具體內(nèi)部構(gòu)造和源碼,而是根據(jù)用戶的實際情況,根據(jù)用戶的操作要求,編寫了相應(yīng)的測試案例,如6.1所示。表6.1人臉識別系統(tǒng)測試用例用例編號用例表述測試輸入預(yù)期結(jié)果實測結(jié)果TM01上傳圖片點擊上傳圖片上傳正常正常跳轉(zhuǎn)TM02模型訓(xùn)練上傳的圖片特征提取保存保存正常TM03人臉識別上傳圖片識別識別正常正常顯示TM04攝像頭識別檢測攝像頭識別成功顯示正常除此之外,收集到共計200張同學(xué)的照片,其中每名同學(xué)10張照片,將人臉圖片統(tǒng)一縮放為512×512大小,作為訓(xùn)練集進行數(shù)據(jù)模型訓(xùn)練。6.3測試結(jié)果樣本數(shù)據(jù)分組訓(xùn)練,經(jīng)過50輪的訓(xùn)練后,人臉識別測試結(jié)果如表6.2所示,輪數(shù)不斷增加的情況下,識別時間呈正態(tài)分布,最終趨于1100ms左右,意味著人臉識別的等待時間趨于1.1s,識別準確率最終穩(wěn)定在97%左右,識別測試效果良好。表6.2訓(xùn)練輪次與識別進去額度比較測試輪次1020304050識別時間(ms)11341345109811901110準確率(%)96.196.997.297.297.3通過上述測試的方式,對不同模塊的功能開展了有效測試,能夠及時掌握存在的問題并且查找到具體原因和發(fā)生部位。通過反復(fù)測試,平臺在一定程度上滿足了設(shè)計要求,運行流暢,用戶體驗良好。
7總結(jié)與展望7.1總結(jié)在老師的指導(dǎo)、同學(xué)的協(xié)助以及自己進行資料的搜集、開發(fā)知識的學(xué)習(xí)對本次畢業(yè)設(shè)計進行了完成??傮w上完成了要求。在實現(xiàn)過程中,對于常見的頁面開發(fā)和文件上傳等實現(xiàn)起來比較簡單,但是核心的業(yè)務(wù)邏輯人臉識別部分需要注意。人臉識別系統(tǒng)通過Dlib庫進行特征提取和人臉檢測,能夠部署在Windows、Linux、MacOS等常用的操作系統(tǒng),實現(xiàn)了自動化人臉識別。本系統(tǒng)成本低,操作簡單,便于部署,在實際應(yīng)用中有很大的實用價值。基于Dli
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村簡易買房合同范本
- 肉制品生產(chǎn)線建設(shè)項目可行性研究報告
- 個體股合同范例
- 農(nóng)戶出售種苗合同范本
- 2025年度辣椒種植與有機認證服務(wù)合同
- 2025年度產(chǎn)業(yè)園區(qū)投資戰(zhàn)略合作框架協(xié)議
- 2025年塑膠安定劑項目可行性研究報告
- 農(nóng)藥代加工合同范本
- 2025年度商鋪轉(zhuǎn)租合同電子版制作與審核規(guī)范
- 2025年度個人綠色能源設(shè)備借款合同
- 家庭急救知識(異物卡喉的急救)共45張課件
- 機臺異常處理規(guī)定
- 2021年蘇州市職業(yè)大學(xué)職業(yè)適應(yīng)性測試試題及答案解析
- DBJ∕T 13-253-2016 福建省耐腐蝕混凝土應(yīng)用技術(shù)規(guī)程
- 電鍍廢水中各種重金屬廢水處理反應(yīng)原理及控制條件
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter3 Linked Lists
- 《汽車文化》全套教案
- 會計英語專業(yè)詞匯全
- 拆除工程檢驗批質(zhì)量檢驗記錄
- 怎樣把握文章線索
- LED與金鹵燈對比(共4頁)
評論
0/150
提交評論