基于Python和openCV的人臉識(shí)別研究與實(shí)現(xiàn)_第1頁(yè)
基于Python和openCV的人臉識(shí)別研究與實(shí)現(xiàn)_第2頁(yè)
基于Python和openCV的人臉識(shí)別研究與實(shí)現(xiàn)_第3頁(yè)
基于Python和openCV的人臉識(shí)別研究與實(shí)現(xiàn)_第4頁(yè)
基于Python和openCV的人臉識(shí)別研究與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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)介

1、基于Python和openCV的人臉識(shí)別研究與實(shí)現(xiàn)摘要人臉識(shí)別技術(shù)(FaceRecognitionTechnology)是對(duì)輸入的圖像或者視頻進(jìn)行判斷是否存在人臉,若存在人臉,則獲取該人臉的特征數(shù)據(jù),計(jì)算特征值,并將人臉數(shù)據(jù)與已有的人臉數(shù)據(jù)進(jìn)行比較,從而得出該人臉的身份信息。人臉識(shí)別技術(shù)相對(duì)于其他生物特征識(shí)別技術(shù)而言,具有更加快捷方便的特性,用戶不需要特意或者直接與設(shè)備接觸,設(shè)備便可自行獲取數(shù)據(jù)。但同時(shí),人臉識(shí)別技術(shù)和其他生物識(shí)別技術(shù)相比,更容易被環(huán)境的因素干擾從而出現(xiàn)錯(cuò)誤,需要人為干預(yù)以及大量的數(shù)據(jù)支撐。目前,人臉識(shí)別技術(shù)在國(guó)內(nèi)外的各中環(huán)境中都被廣泛使用。關(guān)鍵詞:人臉識(shí)別;生物特征識(shí)別技術(shù);

2、特征值ResearchandimplementationoffacerecognitionbasedonPythonandopencvAbstractFacerecognitiontechnologyistojudgewhetherthereisafaceintheinputimageorvideo.Ifthereisaface,thefeaturedataofthefacewillbeobtained,thefeaturevaluewillbecalculated,andthefacedatawillbecomparedwiththeexistingfacedatatogettheident

3、ityinformationoftheface.Comparedwithotherbiometrictechnologies,facerecognitiontechnologyismoreconvenientandfast.Usersdonotneedtocontactwiththedeviceintentionallyordirectly,andthedevicecanobtaindatabyitself.Butatthesametime,comparedwithotherbiometrictechnology,facerecognitiontechnologyismorevulnerabl

4、etoenvironmentalinterferenceanderrors,whichrequireshumaninterventionandalargenumberofdatasupport.Atpresent,facerecognitiontechnologyhasbeenwidelyusedinvariousscenesathomeandabroad.Keywords:Facerecognition;biometrics;eigenvalues目錄TOC o 1-5 h z HYPERLINK l bookmark6 1前言1 HYPERLINK l bookmark8 1.1本設(shè)計(jì)的目

5、的、意義及應(yīng)達(dá)到的技術(shù)要求1 HYPERLINK l bookmark10 1.2本設(shè)計(jì)在國(guó)內(nèi)外的發(fā)展概況及存在的問(wèn)題1 HYPERLINK l bookmark12 1.3本設(shè)計(jì)應(yīng)解決的主要問(wèn)題2 HYPERLINK l bookmark14 2本設(shè)計(jì)2 HYPERLINK l bookmark16 2.1各功能介紹3 HYPERLINK l bookmark18 2.1.1主界面3 HYPERLINK l bookmark20 2.1.2數(shù)據(jù)收集及訓(xùn)練4 HYPERLINK l bookmark22 2.1.3人臉識(shí)別4 HYPERLINK l bookmark24 2.1.4刪除數(shù)據(jù)、查

6、詢數(shù)據(jù)4 HYPERLINK l bookmark26 2.1.5管理員登錄登出以及修改密碼5 HYPERLINK l bookmark28 2.2設(shè)計(jì)原理及方案選擇6 HYPERLINK l bookmark30 2.2.1人臉識(shí)別技術(shù)6 HYPERLINK l bookmark32 2.2.2本設(shè)計(jì)使用的haar分類器7 HYPERLINK l bookmark34 haar-like特征7 HYPERLINK l bookmark36 haar特征計(jì)算一積分圖8 HYPERLINK l bookmark38 特征值計(jì)算8 HYPERLINK l bookmark40 級(jí)聯(lián)分類器9 HYP

7、ERLINK l bookmark42 2.2.3LBPH訓(xùn)練識(shí)別103環(huán)境搭建12 HYPERLINK l bookmark44 4系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)13 HYPERLINK l bookmark46 4.1程序設(shè)計(jì)13 HYPERLINK l bookmark48 4.2數(shù)據(jù)收集訓(xùn)練14 HYPERLINK l bookmark50 4.3人臉識(shí)別15 HYPERLINK l bookmark52 4.4數(shù)據(jù)刪除、查詢17 HYPERLINK l bookmark54 4.5管理員登錄、登出和密碼管理18 HYPERLINK l bookmark56 4.6主程序頁(yè)面19 HYPERLINK

8、l bookmark58 4.7程序打包20 HYPERLINK l bookmark60 4.8遇到的問(wèn)題及解決20 HYPERLINK l bookmark62 4.9存在問(wèn)題和改進(jìn)方向21 HYPERLINK l bookmark64 4.9.1人臉識(shí)別的技術(shù)21 HYPERLINK l bookmark66 4.9.2程序中存在的問(wèn)題21 HYPERLINK l bookmark68 5系統(tǒng)測(cè)試22 HYPERLINK l bookmark70 5.1程序啟動(dòng)22 HYPERLINK l bookmark72 5.2功能測(cè)試23 HYPERLINK l bookmark74 5.2.1

9、管理員測(cè)試23 HYPERLINK l bookmark76 5.2.2數(shù)據(jù)收集訓(xùn)練測(cè)試24 HYPERLINK l bookmark78 5.2.3人臉識(shí)別測(cè)試265.2.4查詢和刪除數(shù)據(jù)測(cè)試266結(jié)論29 1前言人臉識(shí)別技術(shù)(FaceRecognitionTechnology)是一種生物特征識(shí)別技術(shù)。生物識(shí)別技術(shù)是指通過(guò)計(jì)算機(jī)與光學(xué)、聲學(xué)、生物傳感器和生物統(tǒng)計(jì)學(xué)原理等高科技手段密切結(jié)合,利用人體固有的生理特性(如指紋、臉象、虹膜等)和行為特征(如筆跡、聲音、步態(tài)等)來(lái)進(jìn)行個(gè)人身份的鑒定,人臉識(shí)別技術(shù)即是通過(guò)獲得人類面部的特征進(jìn)行身份鑒定的技術(shù)。其主要功能包括人臉檢測(cè),人臉追蹤以及人臉比對(duì),

10、即在動(dòng)態(tài)場(chǎng)景與復(fù)雜背景中判斷是否有面像存在并分離出這些面像,進(jìn)行動(dòng)態(tài)目標(biāo)跟蹤,同時(shí)在面像庫(kù)中搜索人臉數(shù)據(jù)從而對(duì)檢測(cè)到的人臉進(jìn)行身份鑒定。目前,人臉識(shí)別技術(shù)在門禁、監(jiān)控、相機(jī)等各種場(chǎng)景和環(huán)境下都有廣泛的使用。1.1本設(shè)計(jì)的目的、意義及應(yīng)達(dá)到的技術(shù)要求人臉識(shí)別技術(shù)是一項(xiàng)現(xiàn)代人工智能技術(shù)中的的熱門研究領(lǐng)域,它為人類社會(huì)發(fā)展的快速、便捷、安全等方面提供了保障。在當(dāng)今社會(huì)中,從工作刷臉簽到到購(gòu)物刷臉支付再到公安刑偵,人臉識(shí)別技術(shù)都扮演了極其重要的角色。在這樣的實(shí)際背景下,人臉識(shí)別技術(shù)的研究的重要性也就不言而喻了。在本設(shè)計(jì)中,主要實(shí)現(xiàn)人臉識(shí)別技術(shù)中的人臉檢測(cè)追蹤,人臉信息錄入以及人臉身份識(shí)別等功能,最終可

11、達(dá)到一對(duì)一實(shí)時(shí)人臉信息識(shí)別的效果,實(shí)際運(yùn)用中,準(zhǔn)確率可達(dá)75%作用。1.2本設(shè)計(jì)在國(guó)內(nèi)外的發(fā)展概況及存在的問(wèn)題人臉識(shí)別技術(shù)是各個(gè)科技發(fā)達(dá)國(guó)家都在全力研究的技術(shù)之一。人臉識(shí)別系統(tǒng)的研究大致在1960年左右開(kāi)始進(jìn)行。八十年代后,隨著計(jì)算機(jī)科學(xué)技術(shù)和光學(xué)成像技術(shù)的進(jìn)步,人臉識(shí)別技術(shù)也得到了提高。在九十年代后期,人臉識(shí)別技術(shù)進(jìn)入了實(shí)際應(yīng)用的初級(jí)階段。進(jìn)入二十一世紀(jì)后,人臉識(shí)別技術(shù)有了質(zhì)的飛躍,如今已經(jīng)在各個(gè)已經(jīng)在政府、軍隊(duì)、銀行、娛樂(lè)、電子商務(wù)、安全防務(wù)的那個(gè)領(lǐng)域有了較為深入的應(yīng)用。人臉識(shí)別技術(shù)是發(fā)展和使用為人類生活產(chǎn)生了深遠(yuǎn)的影響,它的普及對(duì)于人類提高工作效率、鞏固安保措施、遏制犯罪行動(dòng)等有極大的幫

12、助。在人臉識(shí)別技術(shù)帶給人類便捷的同時(shí),人臉識(shí)別技術(shù)也有一些弊端,首先在技術(shù)方面,人臉識(shí)別技術(shù)相對(duì)于其余的生物特征檢測(cè),更容易受到環(huán)境的影響出現(xiàn)誤差而造成損失,一些人臉識(shí)別系統(tǒng)表示識(shí)別準(zhǔn)確率高達(dá)98%以上,但是這些數(shù)據(jù)更多的是實(shí)驗(yàn)室數(shù)據(jù),在實(shí)際應(yīng)用中幾乎難以實(shí)現(xiàn),甚至一些系統(tǒng)出錯(cuò)率高達(dá)35%,如何提高準(zhǔn)確率是人臉識(shí)別技術(shù)還需要深入解決的問(wèn)題。除了技術(shù)層面,人臉識(shí)別技術(shù)還有一個(gè)道德層面的問(wèn)題存在,這源于人臉識(shí)別技術(shù)的一個(gè)優(yōu)勢(shì)無(wú)接觸檢測(cè)。人臉識(shí)別技術(shù)是不需要人刻意去接觸設(shè)備的,這也意味著可以在被檢測(cè)者未知的情況是對(duì)被檢測(cè)者進(jìn)行人臉信息識(shí)別,如果是這種情況,那么人臉識(shí)別技術(shù)是否就是侵犯了人類的隱私權(quán)和

13、肖像權(quán)。同時(shí)還有數(shù)據(jù)表示,人臉識(shí)別技術(shù)在實(shí)際使用中,膚色越黑,識(shí)別率越低,在黑色人種中的使用,出錯(cuò)率甚至達(dá)到了35%,與此同時(shí),又是數(shù)據(jù)表明,目前的人臉識(shí)別數(shù)據(jù)庫(kù)中有75%左右的數(shù)據(jù)是男性,80%以上來(lái)自于白色人種。以上的研究使得人臉識(shí)別技術(shù)的使用在道德方面是否存在種族歧視、性別歧視等問(wèn)題上令人擔(dān)憂。本設(shè)計(jì)應(yīng)解決的主要問(wèn)題目前,人臉識(shí)別技術(shù)已經(jīng)較為成熟,在國(guó)內(nèi)外的各種場(chǎng)景中均有應(yīng)用。本設(shè)計(jì)將人臉檢測(cè)數(shù)據(jù)收集、人臉識(shí)別以及數(shù)據(jù)管理集成為一個(gè)系統(tǒng)。主要實(shí)現(xiàn)快速的進(jìn)行人臉數(shù)據(jù)收集,實(shí)時(shí)進(jìn)行一對(duì)一人臉檢測(cè),人臉數(shù)據(jù)的管理以及查詢,便于管理人員對(duì)數(shù)據(jù)進(jìn)行管理,同時(shí),普通的用戶可以自主進(jìn)行識(shí)別的操作。2本

14、設(shè)計(jì)本設(shè)計(jì)是基于Python和opencv的人臉識(shí)別系統(tǒng)的開(kāi)發(fā),使用python+opencv調(diào)用計(jì)算機(jī)的攝像頭設(shè)備獲取圖像,在使用opencv提供的人臉檢測(cè)分類器對(duì)獲得的圖像中的人臉進(jìn)行識(shí)別和數(shù)據(jù)獲取。同時(shí),使用Python的標(biāo)準(zhǔn)TkGUI工具包的接口Tkinterz制作程序的用戶操作界面,最終呈現(xiàn)主程序界面效果如圖2.1所示:圖2.1程序主界面各功能介紹本次人臉識(shí)別系統(tǒng)的設(shè)計(jì)包括數(shù)據(jù)收集及訓(xùn)練功能,人臉識(shí)別功能,刪除數(shù)據(jù)功能,查詢數(shù)據(jù)功能,以及登錄、登出管理員和更改密碼功能。其中,數(shù)據(jù)收集及訓(xùn)練,刪除數(shù)據(jù)以及查詢數(shù)據(jù)需要管理員權(quán)限,而登錄管理員需要密碼,登錄后登錄管理員按鈕會(huì)更換為修改密碼

15、。主界面進(jìn)入程序首先是主界面,并且沒(méi)有管理員權(quán)限。程序開(kāi)始后會(huì)先判斷是否有數(shù)據(jù),如無(wú)數(shù)據(jù)進(jìn)行部分操作時(shí)會(huì)直接提示當(dāng)前無(wú)數(shù)據(jù),如圖2.1.1所示:圖2.1.1無(wú)數(shù)據(jù)主界面設(shè)置有六個(gè)按鈕,每一個(gè)按鈕對(duì)應(yīng)一個(gè)函數(shù),點(diǎn)擊按鈕可調(diào)用不同功能,在無(wú)管理員權(quán)限時(shí)點(diǎn)擊數(shù)據(jù)收集及訓(xùn)練、刪除數(shù)據(jù)、查詢數(shù)據(jù)時(shí),會(huì)提示暫無(wú)管理員權(quán)限,如圖2.1.2所示:圖2.1.2無(wú)權(quán)限數(shù)據(jù)收集及訓(xùn)練登錄管理員之后可以進(jìn)行數(shù)據(jù)收集和訓(xùn)練的操作,點(diǎn)擊按鈕之后系統(tǒng)會(huì)首先要求輸入id,判斷id有效且不重復(fù)之后可進(jìn)行人臉數(shù)據(jù)收集,這里檢測(cè)人臉使用的是opencv提供的分類器haarcascade_frontalface_alt2.xml進(jìn)行

16、人臉檢測(cè)數(shù)據(jù)收集,其中的算法和原理在下文中介紹。為了節(jié)省空間,在數(shù)據(jù)收集完成并制作為.yml數(shù)據(jù)文件之后,會(huì)刪除掉之前的圖像文件。最后將存入的數(shù)據(jù)id保存到list.npy文件中,方便之后的查找刪除操作。本次的人臉識(shí)別系統(tǒng)設(shè)計(jì),將每一個(gè)人臉數(shù)據(jù)單獨(dú)存放為一個(gè).yml文件,比起所有數(shù)據(jù)都加入同一個(gè)數(shù)據(jù)文件中,刪除和查找操作更方便和清晰。人臉識(shí)別人臉識(shí)別功能是本系統(tǒng)中不需要管理員權(quán)限可直接運(yùn)行的功能,開(kāi)啟功能后,程序調(diào)用計(jì)算機(jī)的攝像頭,同樣通過(guò)分類器haarcascade_frontalface_alt2.xml檢測(cè)圖像中的人臉及獲取人臉數(shù)據(jù),同時(shí)計(jì)算機(jī)讀取已有的數(shù)據(jù),將已有數(shù)據(jù)與攝像頭上實(shí)時(shí)獲取

17、到的人臉數(shù)據(jù)進(jìn)行對(duì)比,當(dāng)對(duì)比結(jié)果判斷出是已有的人臉時(shí),在圖像上顯示出該人臉的信息,并顯示判斷正確的可能性,如圖2.1.3所示:圖2.1.3人臉識(shí)別最后可以按esc退出人臉識(shí)別模塊。刪除數(shù)據(jù)、查詢數(shù)據(jù)這兩項(xiàng)操作需要管理員權(quán)限。查詢數(shù)據(jù)時(shí),可輸入id,查看數(shù)據(jù)是否存在,也可直接查看所有已存在的id,在系統(tǒng)沒(méi)有錄入任何數(shù)據(jù)時(shí),會(huì)直接提示暫無(wú)數(shù)據(jù)。刪除數(shù)據(jù)時(shí),獲得管理員權(quán)限后,可以輸入需要?jiǎng)h除的數(shù)據(jù)的id,操作之后會(huì)同時(shí)刪除數(shù)據(jù)文件和列表中的id,若無(wú)該id,則直接返回?zé)o此id,如圖2.1.4所示:圖2.1.4刪除無(wú)效管理員登錄登出以及修改密碼在剛剛打開(kāi)程序,進(jìn)入系統(tǒng)時(shí)是任何人都是沒(méi)有獲得管理員權(quán)限的

18、,需要點(diǎn)擊登錄管理員按鈕獲得,點(diǎn)擊登錄管理員之后需要輸入密碼進(jìn)行驗(yàn)證,如圖2.1.5所示:tkX數(shù)匙集mi豔wt圖2.1.5登錄管理員輸入密碼登錄管理員后,可進(jìn)行數(shù)據(jù)管理操作,同時(shí)登錄管理員按鈕更改為修改密碼按鈕如圖2.1.6所示:圖2.1.6登錄管理員后按鈕變?yōu)樾薷拿艽a此時(shí)可以修改密碼。在管理員進(jìn)行管理操作完成之后,需要點(diǎn)擊登出管理員關(guān)閉管理員權(quán)限,修改密碼按鈕恢復(fù)為登錄管理員按鈕,同時(shí)管理操作無(wú)法再進(jìn)行。設(shè)計(jì)原理及方案選擇人臉識(shí)別技術(shù)人臉識(shí)別的實(shí)質(zhì)是依靠計(jì)算機(jī)圖像處理技術(shù)從輸入的媒體中提取人臉的特征點(diǎn),再依靠生物統(tǒng)計(jì)學(xué)的原理進(jìn)行數(shù)學(xué)模型的分析和建立,作為人臉特征模板。在檢測(cè)時(shí),使用已建立的

19、人臉特征模板和被檢測(cè)者的人臉中提取出的特征進(jìn)行特征對(duì)比分析,根據(jù)分析結(jié)果得出相似度,判斷是否為同一個(gè)人。人臉識(shí)別的方法有很多種,比如:根據(jù)人臉幾何特征進(jìn)行識(shí)別的方法:幾何特征是指人臉上的器官如眼睛,鼻子,嘴巴等之間的距離等幾何關(guān)系。這種方法的識(shí)別的速度快比較快,占用內(nèi)存資源較小,但是識(shí)別率比較低?;谔卣髂?PCA)的人臉識(shí)別:這種方法是將人臉從三維的空間通過(guò)投影降維到二維空間,將這些投影作為用于識(shí)別的特征矢量。這種識(shí)別的方式要求相對(duì)更多的樣本用于訓(xùn)練,這是基于圖像灰度的特征統(tǒng)計(jì)?;谏窠?jīng)網(wǎng)絡(luò)的人臉識(shí)別:神經(jīng)網(wǎng)絡(luò)的輸入包含降低分辨率的人臉圖像,局部的自相關(guān)函數(shù)、局部紋理的二階矩等。同樣需要大量

20、的訓(xùn)練樣本。彈性圖匹配的人臉識(shí)別:這個(gè)方法將人臉使用屬性拓?fù)鋱D代替,拓?fù)鋱D上的任意一點(diǎn)都包含特征向,用來(lái)記錄周圍的信息,在匹配時(shí)允許畫(huà)面存在彈性,對(duì)存在表情改變的識(shí)別中有較好效果。同時(shí)這種方法對(duì)于同一人臉只需要單個(gè)樣本訓(xùn)練即可。線段Hausdorff距離的人臉識(shí)別:這種方法是將人臉的灰度圖像劃分為不同的線段集,不需要線段集之間線段的進(jìn)行一一的對(duì)應(yīng),只通過(guò)兩個(gè)線段集之間的距離來(lái)識(shí)別人臉。這個(gè)方法可以在不同光照和不同的狀態(tài)的情況下進(jìn)行較為準(zhǔn)確的識(shí)別,但是對(duì)于存在大表情變化的識(shí)別效果不佳。支持向量機(jī)的人臉識(shí)別:這是統(tǒng)計(jì)模式識(shí)別領(lǐng)域的一個(gè)新熱點(diǎn),總的來(lái)說(shuō)就是將一個(gè)低維的線性不可分問(wèn)題轉(zhuǎn)化為一個(gè)高維的線

21、性可分問(wèn)題。這種方法需要很多的的訓(xùn)練樣本,并且支持向量機(jī)訓(xùn)練時(shí)間長(zhǎng),目前在實(shí)際使用中還不太可能。222本設(shè)計(jì)使用的haar分類器OpenCV提供了多個(gè)檢測(cè)器,安裝OpenCV后即可使用。檢測(cè)器的內(nèi)容主要包括Haar-like特征、積分圖方法、AdaBoost、級(jí)聯(lián)。Haar分類器算法使用haar-like特征進(jìn)行人臉檢測(cè),使用積分圖對(duì)haar-like特征求值進(jìn)行加速,使用AdaBoost算法來(lái)進(jìn)行強(qiáng)分類器的訓(xùn)練,用以區(qū)分人臉和非人臉,最后使用篩選的方式將強(qiáng)分類器級(jí)聯(lián)到一起,提高準(zhǔn)確率。haar-like特征Haar(哈爾)特征的特征模板由邊緣特征、線性特征、中心特征和對(duì)角線特征組合而成。特征

22、模板內(nèi)由黑色和白色兩種矩形組成,特征原型如圖221所示:圖221矩形模板模板特征值等于白色矩形部分的像素和與和黑色的矩形部分的像素和的差。這些矩形特征能簡(jiǎn)單的對(duì)臉部的一些特征進(jìn)行描述,比如:臉部的顏色相對(duì)于眼睛的更淺,鼻子比兩邊的顏色更淺等等。對(duì)于圖2.2.1上的a、b、d特征數(shù)值的計(jì)算,和對(duì)c的計(jì)算公式分別為公式2.2.1和公式222v=S白-工黑(2.2.1)v=S白-2*工黑(2.2.2)在c的特征計(jì)算中將黑色部分像素和乘以2,是為了讓兩種矩形部分中像素?cái)?shù)目相等。我們希望計(jì)算當(dāng)把矩形放到人臉區(qū)域時(shí)得到的特征值和計(jì)算放到非人臉區(qū)域得到的特征值之間的差距越大越好,這樣就可以用來(lái)更加明顯的分辨

23、出是否是人臉。使用特征相較于單獨(dú)使用像素點(diǎn)有更加優(yōu)越的性能,更快的計(jì)算速度。矩形特征值受矩形特征模板的類型、位置和大小的影響。矩形特征在圖像上的位置、大小都可以改變的,這使得即使矩形的檢測(cè)窗口非常小也會(huì)產(chǎn)生大量的矩形特征,比如在一個(gè)24*24像素大小的檢測(cè)窗口中,可以得到的矩形特征數(shù)量就能高達(dá)16萬(wàn)個(gè)。要計(jì)算如此龐大數(shù)量的特征,就要靠haar分類器的另一個(gè)核心了。haar特征計(jì)算一積分圖積分圖,顧名思義是一種使用積分的思想進(jìn)行計(jì)算的方式。通過(guò)積分圖,圖像只需要被完整的讀取一遍即可求出所有位置的像素,這種算法將計(jì)算圖像特征值的效率進(jìn)行了很大程度的提升。積分圖是將圖像從起點(diǎn)開(kāi)始到各個(gè)點(diǎn)所圍成的矩形

24、區(qū)域的像素值的和作為一個(gè)數(shù)組保存下來(lái),當(dāng)需要計(jì)算其中一個(gè)部分的像素之和時(shí)可直接在數(shù)組中搜索,不用再重新進(jìn)行累加計(jì)算。積分圖構(gòu)建如圖2.2.2所示:積分圖每個(gè)點(diǎn)的計(jì)算方式是這個(gè)點(diǎn)的值ii(i,j)等于這個(gè)點(diǎn)左上角方向上的每一個(gè)像素的值之和,比如在2.2.2中點(diǎn)1的值等于A區(qū)域的像素值之和,點(diǎn)4的值等于區(qū)域A和區(qū)域D的像素值之和,點(diǎn)6的值等于區(qū)域A到F的像素值之和。每個(gè)像素區(qū)域像素值為f(i,j),則每個(gè)點(diǎn)的值為式2.2.3:班J力二工斗町)昨理d.、(2.2.3)構(gòu)建積分圖時(shí),先采用每行累加的方式進(jìn)行,即式2.2.4:s(i,j)=s(i,j-1)+f(i,j)(2.2.4)在計(jì)算每個(gè)點(diǎn)的值,每

25、個(gè)點(diǎn)的值等于當(dāng)行的累計(jì)值加上上一行該列點(diǎn)的值,如式2.2.5所示:ii(i,j)=s(i,j)+ii(i-1,j)(2.2.5)這種計(jì)算方法,目標(biāo)圖像只需要遍歷一遍之后便可得到每個(gè)點(diǎn)的值。特征值計(jì)算通過(guò)構(gòu)建積分圖,接下來(lái)的特征值計(jì)算可以減少很多的工作量,從而提升效率。構(gòu)建好積分圖之后,需要計(jì)算特征值的時(shí)候就不再需要去求區(qū)域像素和,直接用點(diǎn)進(jìn)行計(jì)算即可,如圖2.2.3:圖2.2.3計(jì)算特征值在圖2.2.3中將區(qū)域E和區(qū)域F作為一個(gè)矩形,計(jì)算它的特征值時(shí),需要用F區(qū)域像素值減去E區(qū)域像素值,若沒(méi)有積分圖時(shí),需要逐個(gè)計(jì)算區(qū)域F和區(qū)域E的像素值,但是一次檢測(cè)中有大量這樣的特征值需要計(jì)算,每次都這樣去計(jì)

26、算的話,需要消耗大量的時(shí)間和資源,但是有積分圖之后計(jì)算區(qū)域F的像素和就可以直接通過(guò)點(diǎn)的值去計(jì)算,如:F區(qū)域像素和,式2.2.6:S(F)=ii(6)-ii(5)-ii(3)+ii(2)(2.2.6)同理,式2.2.7:S(E)=ii(5)-ii(4)-ii(2)+ii(1)(2.2.7)這樣計(jì)算之后EF矩形區(qū)域特征值,式2.2.8:S(f)-S(E)=ii(6)-ii(5)-ii(3)+ii(2)-(ii(5)-ii(4)-ii(2)+ii(1)(2.2.8)通過(guò)積分圖計(jì)算的方式每個(gè)特征區(qū)域就都可以通過(guò)很簡(jiǎn)單的計(jì)算得到,大大提升了計(jì)算特征值的效率,同時(shí)也提高了檢測(cè)目標(biāo)的速度。不同的特征在同一個(gè)

27、的樣本中計(jì)算會(huì)出現(xiàn)不同的結(jié)果,這樣的結(jié)果就可以區(qū)分出人臉是否存在,或者人臉上的眼睛鼻子嘴巴等器官的位置。不同模板計(jì)算出來(lái)的結(jié)果差異越大,效果也好。由于這樣計(jì)算出來(lái)的特征值上下幅度較大不利于比較,所以檢測(cè)器中還會(huì)對(duì)特征值進(jìn)行歸一化處理,處理后的數(shù)據(jù)再與閾值比較得出最后的結(jié)果,即人臉的存在與否。級(jí)聯(lián)分類器每一個(gè)輸入的樣品中都有非常多的特征值,要通過(guò)這些特征值準(zhǔn)確的檢測(cè)和識(shí)別出人臉就需要使用級(jí)聯(lián)分類器了,只有通過(guò)級(jí)聯(lián)分類器的每一次判斷,最后才會(huì)認(rèn)定為檢測(cè)出人臉或者識(shí)別出人臉。級(jí)聯(lián)分類模型是樹(shù)狀結(jié)構(gòu),如圖2.2.4所示:杏決通過(guò)圖2.2.4級(jí)聯(lián)分類器每一個(gè)stage都是一個(gè)強(qiáng)分類器,只有目標(biāo)依次通過(guò)了

28、每一個(gè)強(qiáng)分類器時(shí),才認(rèn)為通過(guò)此次的檢測(cè),強(qiáng)分類器對(duì)于負(fù)樣本的檢測(cè)效率非常高,能夠很大程度的檢測(cè)出負(fù)樣本,在任何一個(gè)分類器檢測(cè)為負(fù)樣本都會(huì)結(jié)束本次檢測(cè),后面的強(qiáng)分類器不再檢測(cè),從而提高檢測(cè)效率。一個(gè)圖像樣本中,非目標(biāo)的區(qū)域會(huì)占很大的比例,換句話說(shuō),一個(gè)圖像中很多的檢測(cè)區(qū)域都屬于負(fù)樣本,在第一個(gè)分類器時(shí)就會(huì)被否決,通過(guò)這種方式,避免了很多不必要的資源浪費(fèi)。每一個(gè)強(qiáng)分類器是由若干個(gè)弱分類器通過(guò)一定的策略組合在一起,一個(gè)弱分類器是一個(gè)和圖2.2.4相差無(wú)幾的決策樹(shù),其中,只擁有一個(gè)haar-like特征的弱分類器稱為最基本的弱分類器,它的決策樹(shù)只有一層,稱為樹(shù)樁(stump)。另外,每個(gè)特征對(duì)于檢測(cè)結(jié)

29、果的影響是不同,所以在分類器在檢測(cè)特征時(shí)會(huì)對(duì)特征進(jìn)行加權(quán)運(yùn)算。首先會(huì)篩選出若干個(gè)優(yōu)秀的特征值,作為最優(yōu)弱分類器,然后傳給AdaBoost進(jìn)行訓(xùn)練。通過(guò)訓(xùn)練得出特征的最優(yōu)閾值,使得這個(gè)弱分類器對(duì)所有的訓(xùn)練樣本的分類誤差最低。2.2.3LBPH訓(xùn)練識(shí)別設(shè)計(jì)中采用LBPH(LocalBinaryPatternsHistograms)局部二進(jìn)制編碼直方圖進(jìn)行人臉訓(xùn)練和識(shí)別,在使用haar分類器檢測(cè)出人臉后,用局部二進(jìn)制編碼直方圖獲得該人臉的特征并進(jìn)行訓(xùn)練,訓(xùn)練后可以得到圖像數(shù)據(jù)和圖像對(duì)應(yīng)的標(biāo)簽。LBPH進(jìn)行人臉識(shí)別的基本思想大致是將每個(gè)像素作為中心,計(jì)算該像素和其附近的像素灰度值的大小關(guān)系,再將這個(gè)關(guān)

30、系以二進(jìn)制進(jìn)行編碼,比該像素灰度值小的像素點(diǎn)編的為0,比該像素灰度值大像素點(diǎn)的為1,這樣就可以得到對(duì)整個(gè)圖像進(jìn)行LBP編碼的圖像;接著將LBP圖像劃為若干個(gè)部分,分別得到每個(gè)部分的LBP編碼直方圖,這樣就得到了整個(gè)圖像的LBP編碼直方圖,最后經(jīng)過(guò)比較不同的人臉圖像的LBPH達(dá)到人臉識(shí)別的目的,原始編碼示意圖如2.2.5所示:圖2.2.5原始LBP示意圖在原始LBP出現(xiàn)后,編碼方式不斷地優(yōu)化改進(jìn),又有了圓形LBP,如圖2.2.6:圓形LBP在原始LBP的基礎(chǔ)上將原本的3*3鄰域擴(kuò)大到了任意鄰域,用圓形取代原有的正方形,在半徑內(nèi)允許有任意數(shù)量個(gè)的像素點(diǎn)。OpenCV正是采用的這種圓形LBP算子。本

31、設(shè)計(jì)就是調(diào)用了OpenCV提供的haarcascade_frontalface_alt2.xml檢測(cè)器,通過(guò)攝像頭收集圖像樣本使用局部二進(jìn)制編碼直方圖進(jìn)行對(duì)檢測(cè)器檢測(cè)出的人臉進(jìn)行特征訓(xùn)練,訓(xùn)練完成后保存為.yml文件數(shù)據(jù)。使用時(shí),通過(guò)實(shí)時(shí)讀取攝像頭的畫(huà)面,檢測(cè)出畫(huà)面上的人臉,再用LBP算子求出該人臉的特征,最后調(diào)用predict函數(shù),這個(gè)函數(shù)返回兩個(gè)值,一是識(shí)別出的人臉的標(biāo)簽,二是置信度評(píng)分。算法有置信度評(píng)分閾值,置信度評(píng)分是用來(lái)表示目標(biāo)與模版中的差距,當(dāng)置信度的值為0時(shí)表示完美匹配,置信度的值小于50時(shí),可以認(rèn)為識(shí)別效果較好。此外Opencv還提供有其他的haar檢測(cè)器,在不同的檢測(cè)需求下可

32、以調(diào)用不同的檢測(cè)器。環(huán)境搭建人臉識(shí)別系統(tǒng)自然需要攝像頭,本設(shè)計(jì)是基于python+opencv的開(kāi)發(fā)實(shí)現(xiàn)所以首先需要搭建python的環(huán)境。首先安裝python3.7,現(xiàn)在已經(jīng)有了python3.8,但是在我實(shí)際的使用中,發(fā)現(xiàn)一些在python3.7中可以進(jìn)行的操作在python3.8中無(wú)法進(jìn)行。安裝好python3.7后檢查是否安裝成功,如圖3.1:P:python3.7ScriptspythonPython3.7.0(v3.7.0:lbf9cc5093nJun272018,04:06:47)MSCv.191432bit(Intel)Typehelp,copyright/;creditsor

33、license/yformoreinforma圖3.1檢查python安裝接著繼續(xù)安裝opencv,我在搭建環(huán)境時(shí)使用的是pip安裝,但是pip因?yàn)樵次募趪?guó)外,所以下載速度太慢而且容易有異常,經(jīng)過(guò)查閱資料我配置了清華的鏡像文件,如圖3.2:D:pythonS.7ScriptsD:python3?ScTipconfigsetglobalindexurlhttps:/pypitunxtsi口呂hua.Edu-cn/isiEplieWritingtoC:User3方逸杰AppDataRoamiiip邛卩邙iniYduareusingpipversion.10.0.Ij,howeverversion

34、19.3.1isavailableYoushouldconsiderupgradingviathepython:pipinstall一lajpgr-depip-command,.圖3.2配置pip鏡像文件接著就可以快速穩(wěn)定的使用pip進(jìn)行下載安裝了,安裝opencv,如圖3.3:10.TUB234kB/sD:WythonS.呂p:python3TScri:ptwj?ij?instsi.ll.oparCV-pythooCol1ectingnpeiiTV-py-t.bionDuwnloadin百hiips/fil85,pyt-honhostedr口璀/口孔c.k鷗日89/609a4c8f13dcO

35、d29aO2dsE8&ddb310d7bO33aCl5d642O.i23Bdd84.ic5b4a6l/opencvjython-4,hZ印弋時(shí)就in:丸就il昭關(guān)時(shí)urnsMMBHMlHanBMilHMnHHMmMI24_b153lb/3匸口1lEctingmu呼y=l.14.E(.fromoperCV-python)Download!nghttps:/fil&s.pythonhqst&d-oTg/packages/ce/ad/2eE8f36b56i64f7DcO8lb32fa5512dacedf120Q5ccbOe2d30Cid44dccl215/numpy-l17生-聞3?-cp3?m-w

36、i門迄耶hl(L0TUB)ioox!Ittnst-allinsGDllectedpaokj.ses:nunpy,operiCV-pythunTheectiptf2pyrisinstailedin?d:Eiyt.hon3r7ScriptEwhichisnotonPlTH,ConsideraddingthisdirectDrytoPATHor?ifyouprefertosipressthiswarn!ng:use-no-wirD-scriptlocationPSuccessfullyinstallednwyl.17.4openCV-python-lr1,2.3(口ijareusingpipvers

37、i口10.0.1,howeverveision19.3.1isavailable.nfoushould口asiderupgradingviathe3python-m.pipinstal1upgradepipeomnimd-圖3.3安裝OpenCV同時(shí)還需要python圖像處理包pillow和opencv擴(kuò)展包分別如圖3.4和圖3.5:L8NSLHB/sI:python3.7ScriptspipinstallpillowLookinginindexes:/sinleCollectingpi1lewDOTnloadinghttp呂:pypi.luna.tsinghua.ediLcn/packase

38、s/4b/SS/&a35-f7aele436209a97c92fecfilclab7d.70b4a0646139b420cbceciblde6/Pi:L才乩2即笛-切貯皿-酬出氐whl(1.S1LB)J.?.;IInstallinEucillectedpackages:pillSuccessfullyinstalLsdpillow-621Iouareusingpipversion10,0.1,how日丫日匸version19r3,1is-availablBrfoushoaldconsidergradingvithepython-mpipinstallupgradepipmnuniRrLcL圖3

39、.4安裝pillowgp37m-win32rwhlI.邊4VE.1D:pythnn3匚fipt兮Apdpinslalopen匸-心口ntrib-pythanEEEOR:unknown百cinimandinstal-nuaLybeyoumearitrLnslairvD:pythoD3匚installpBn.C7-contrib-pythonLankinsinindex日s:https:/i/ptltuna,tsinghiumduccfsiniplBCallsctLDgophtlCV-contrib-pythonDownloadinghttps:/pypi,tuna,tsinshuaredu.GJ

40、i/paGkages/9E/91/373186bD2947bbc9|ta630775005150602dfe3384dDe77247f9ab|iC|721(1grciaEJK.jmntidb_pyUiarr41P1.Requirementalreadysat-Lsfied:nunpy-=1-14,5inInst員Lliri百colleetedpackages:openCV-contrib_pythonSuccessfullyinstaLiedopanCV-cnntrib-pythnn-4.1.L26Vonareusingfiifiversion10,0,Lboweverversion19,3,

41、1isavailableTotishouldconsiderupgradingviathepython-iufiifiinstallupgradeiii*coromand,I-rk._.H:pythd去71ibsite-packages(froiTioperLCVcontrib_python)(lr17,4)圖3.5安裝OpenCV-contrib-pythonnumpy之類的python包在安裝python的時(shí)候已經(jīng)自動(dòng)裝上了,這樣目前需要文件程序都已經(jīng)安裝好了。系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)程序設(shè)計(jì)人臉識(shí)別,首先需要能夠檢測(cè)出人臉,上文中已經(jīng)較為詳細(xì)的介紹了haar特征的原理,這里直接調(diào)用了haarcas

42、cade_frontalface_alt2.xml檢測(cè)器。在設(shè)計(jì)開(kāi)始時(shí),我是先開(kāi)始實(shí)現(xiàn)各個(gè)功能,在各個(gè)功能都大致完成之后在寫(xiě)的主程序,再在主程序中調(diào)用各個(gè)功能。在功能和調(diào)用都沒(méi)有問(wèn)題之后開(kāi)始制作用戶操作頁(yè)面,最后添加的管理員登錄以及一些細(xì)小的優(yōu)化數(shù)據(jù)收集訓(xùn)練首先我實(shí)現(xiàn)的是調(diào)用攝像頭進(jìn)行人臉數(shù)據(jù)的收集及訓(xùn)練數(shù)據(jù)功能。這個(gè)功能的實(shí)現(xiàn)思路是:在有管理員的條件下,首先輸入需要錄入者的id信息,這里要求不能與已有的id重復(fù),也不能輸入空白。在符合要求之后將輸入的id存入主程序中提供的列表中,并將列表保存到本地,在之后的使用中,若未刪除該id和對(duì)應(yīng)的人臉數(shù)據(jù),該id可一直存在;接著打開(kāi)攝像頭,使用haar

43、cascade_frontalface_alt2.xml對(duì)人臉進(jìn)行檢測(cè),檢測(cè)到人臉之后會(huì)在人臉上畫(huà)出方框,同時(shí)從攝像頭獲得的圖像中按幀讀取圖片,并將圖片轉(zhuǎn)化為灰度圖片,以User.id.編號(hào).jpg的形式格式命名保存在Facedata文件夾中,方便分類器的特征值獲取。為了節(jié)約時(shí)間,本設(shè)計(jì)中獲取的是200個(gè)樣本,要提高精確度可適當(dāng)增多獲取樣本數(shù)量,但是會(huì)增加時(shí)間,代碼如圖4.1:whileTrue:S從攝像頭讀取圖片EucesE,iing:=cap.readit轉(zhuǎn)対頁(yè)度圉片gray=cv2.cvtColor(img,cv2.COLOR_BG-R.2CLAY)斗檢測(cè)人臉faces=ace_det.

44、ect.or.def.ect.Mu.ltzlScale(gray,1.3,50for(z,y,v,h)infaces:cv2.rectanle(img,(s,y)?(s+w,y+w)3(255,Cl,Cl)count+=1Ji傑存囹樓cv2.linarite(Facedata/User.+占七r(face_xd)?+sx(count)?.jcv2.insho-wfimagen,iing)#民持畫(huà)面的持續(xù)。k=cv2.waitKey(1)ifk=27:fl通過(guò)emu犍退出攝像treakelifcount=200:fl潯到2CO個(gè)樣本后退出掲像breakfl關(guān)闈攝像頭cap.release()cv

45、2dewtroyAlL聊indowE()圖4.1數(shù)據(jù)獲取收集好需要用于訓(xùn)練的圖片之后就可以開(kāi)始訓(xùn)練了。首先導(dǎo)入收集到的圖片所在的文件夾Facedata,調(diào)用haarcascade_frontalface_alt2.xml和局部二進(jìn)制編碼直方圖進(jìn)行圖片中的人臉檢測(cè)和特征數(shù)據(jù)的獲取與訓(xùn)練,將訓(xùn)練好的數(shù)據(jù)存放在face_trainer文件夾中,這里因?yàn)闆](méi)有找到合適的方式能夠在后續(xù)處理.yml文件,所以我將每個(gè)人臉數(shù)據(jù)都訓(xùn)練為一個(gè)單獨(dú)的.yml文件,這樣在后續(xù)需要?jiǎng)h除時(shí)可以直接將文件刪除。考慮到每次訓(xùn)練都需要大量的圖片,若不處理會(huì)占用大量的儲(chǔ)存空間,所以在訓(xùn)練完成后會(huì)將Facedata文件夾整個(gè)刪除,

46、然后會(huì)重新新建一個(gè)Facedata文件夾供下次使用。最后將添加id后的列表列表保存到本地。代碼如圖4.2:reegnizer=cv2afaceLBPHFaceReegnixe匸_ereate(.1detector=gy2Casca.deClas1sifisr(hastcascads_outslface_alt2zn.1)defgetlmagesJindLabc1s(.path):insgePaths=os.path.jQin(pathPf)forfinos.liatdir(path.)jHjamforimageFartlimimaseFaths:PIL_ingInage-open(imaEeP

47、ath).convert(:L?)#轉(zhuǎn)化為刼度圖像iiTLg_iiijjTip7=nparray(PIL_ing?dint9)face3ajip1es.append(iiLg-iiumpyy:y十d蠱十v)idsappend(.id)id=int(ds.dath.sp1it.(inasePat.h)-1.split(J1)facesdetectordetectMultiSeale(ing_n.uitpy.Jfar7,u?h)infaces-returnface3:iiiplesBidsshDviiifc.(t.itle=info?3躺卵鴨滬正在訓(xùn)練過(guò)程需要一些時(shí)冃請(qǐng)稍慨)faces,ids=g

48、etInasesAniiLabeIs(patli)redognizertraiii(.accaparray(ids、)recognizervrite(c?face_11ainer;:11rainer?(face_id)+:,yril7)sLioviiifof.t-it1e=inf0?m曰呂呂注ge=訓(xùn)|錨兗咸.1os.mlidirFaced.ata)iTL-np-array(najie.)np.savefList,npynJ卑保存列表shutilrmtrseCFactdata)圖4.2數(shù)據(jù)訓(xùn)練人臉識(shí)別在人臉識(shí)別時(shí)同樣需要進(jìn)行人臉檢測(cè),所以在開(kāi)始運(yùn)行之前需要先引入haar分類器和LBPH進(jìn)行檢測(cè)

49、和特征提取。因?yàn)榭紤]到人臉識(shí)別的過(guò)程是需要占用內(nèi)存資源的,但是如果系統(tǒng)中本身是沒(méi)有數(shù)據(jù)的,這時(shí)候再去運(yùn)行人臉識(shí)別的話就浪費(fèi)了內(nèi)存資源,所以在選擇程序的人臉識(shí)別功能的開(kāi)始,會(huì)首先判斷是系統(tǒng)里是否已經(jīng)存在了數(shù)據(jù),如果有數(shù)據(jù)就繼續(xù)接下來(lái)的程序,打開(kāi)攝像頭。如果沒(méi)有數(shù)據(jù)的話,就會(huì)跳出當(dāng)前無(wú)數(shù)據(jù)!的提示,然后中斷本次的所有操作,返回主程序的界面,實(shí)現(xiàn)代碼如下圖4.3:count=-1Len(names)=0;err=Tk()err.withdrau/()shoinf0(11.16=,info?,jn.essage=,前無(wú)數(shù)tE!?)returrjforcoinrange(leiitrLes):ifnam

50、esEcoisnotNone:count=cobreakGount.=-1andco=(len(names)-1):err=Tk()errwithdrwOshoiiFinf(t11-16=info,Jiie35age=?當(dāng)前無(wú)數(shù)據(jù)!)return圖4.3判斷是否有數(shù)據(jù)在判斷為有數(shù)據(jù)之后,會(huì)打開(kāi)攝像頭,導(dǎo)入第一個(gè)yml文件,進(jìn)行人臉檢測(cè),檢測(cè)出人臉后在人臉上畫(huà)框。同時(shí),獲取攝像頭得到的人臉的特征,將其與第一個(gè).yml文件中的數(shù)據(jù)對(duì)比,若沒(méi)有得到結(jié)果或者得到了置信度高于50的結(jié)果,則認(rèn)為該.yml文件中的數(shù)據(jù)與這個(gè)人臉的特征數(shù)據(jù)不對(duì)應(yīng),即本次的識(shí)別失敗,緊接著立刻讀取下一個(gè).yml文件中的特征數(shù)據(jù)

51、,若依然沒(méi)有讀取到符合要求的數(shù)據(jù),就會(huì)循環(huán)讀取face_trainer文件夾中的.yml文件,若讀取到符合的.yml文件則不會(huì)繼續(xù)再讀取下一個(gè).yml文件,并顯示出當(dāng)前人臉的數(shù)據(jù),同時(shí)以(100-置信度)的形式表示正確可能性在攝像頭窗口顯示出來(lái)。當(dāng)攝像頭上讀取到其他人不與當(dāng)前的.yml文件數(shù)據(jù)相符的人臉的時(shí)候,系統(tǒng)會(huì)繼續(xù)往后讀取.yml文件,重新開(kāi)始循環(huán)讀取的過(guò)程。識(shí)別進(jìn)行是可通過(guò)按Esc按鍵退出,實(shí)現(xiàn)代碼如圖4.4:wMleTrue:ift!=1andok!=1:recognizer=cv2.face.LBPHFaceRecognLzer_creat-e()st=3fsce_trsiner/

52、trains+str(count)+.recognizerread(st)ret,lmg=cam.,read0gray=cv2.cvrtColorcv2.COLOR_BGR2GRAT)faces=face匚amuade.deteuisMu1七iScale(gray,scaleFact-or=12,m.irLNeighbors=5,m.iiLSize=(int(minW),int(ninH)for(k?y,%h.)infaces:cv2.rectangle(img,(k,y),(jj十屮,了十h),(0,255,Cl),2)linuin,conf1dence=recognrzer.predrc七

53、(grayy:y+hrx:x+w)coniden.ce50:idnum=namescoimtcanfidence=0喘f口匚mat(roundU00-confidence)cv2.pu.tTest(nstr(idnujn)n(m+5ny-5)nfcnt?1,(0?Cl,255cm2.putT亡(:Lmg,str(confidence),(x十5,y+h-5)?font,1,(ok=L衣達(dá)到一定羞信度則輸出界無(wú)匹配輸出unknow,計(jì)數(shù)回歸-1elifcount=(len(nam.es)-l):count=-1else:count=count+lok=0breakcount=-1;count=0

54、ifnam.escountisnotNone:k=0t=0else:七=1breakcv2.imshowcajitera,in)k=cv2.waitKey(10)ifk=27;break圖4.4人臉識(shí)別實(shí)現(xiàn)數(shù)據(jù)刪除、查詢?cè)谠O(shè)計(jì)的開(kāi)始,我都是直接刪除數(shù)據(jù)文件,沒(méi)有考慮到需要在程序中刪除數(shù)據(jù),后來(lái)在程序完成之后才想到在實(shí)際運(yùn)用中數(shù)據(jù)需要更新的,有新數(shù)據(jù)加入就一定需要能夠刪除數(shù)據(jù),但是在查閱資料之后沒(méi)有找到一種能夠方便的操作.yml文件的方法。所以我改變了數(shù)據(jù)的結(jié)構(gòu),由于.yml文件中的數(shù)據(jù)操作起來(lái)不方便,所以在之前的數(shù)據(jù)收集時(shí),我便將每個(gè)人臉數(shù)據(jù)制作為了一個(gè)單獨(dú)的.yml文件,同時(shí)將數(shù)據(jù)的id在列

55、表中的序號(hào)和其對(duì)應(yīng).yml文件的文件名相對(duì)應(yīng),這樣在刪除數(shù)據(jù)時(shí),可同時(shí)將列表中的id和其對(duì)應(yīng)的.yml文件一起刪除,系統(tǒng)中就不在存在該數(shù)據(jù)了,刪除數(shù)據(jù)代碼實(shí)現(xiàn)如圖4.5:coimt1ivliileTrue:rootg-askst-iingC刪B余目標(biāo)ypgmpt-nane?inialvaluc=、if:shcivinfcif.t-it-leinfo?message11curf?)elifgisNone:it亡七urnelse:forcdinrange(.leu(.names.:1.):ifg=najne3co:BRJUTtucobreakifciiiUiit=-l:rdutwit-lidrav

56、(.Jshuiiito(+it-1e?Lntci11?nessage=無(wú)1比id)coutinueelse:namescoijnt=NunBifcciunt=(1hrt.najTLSsj-1.i:delnaiiescoxmtst=,facerainer七1曰i:n曰工-+si:r)-l-mynLOE,aremij./e三七jrdtwitlidrairt.Jshowinfo(tit1e=?info?3n曰殆工g8=刪除慮攻|)iTL=npBarray(najues)npB=?3/eC.?1istaiipy?、m)衣棵存列表圖4.5刪除數(shù)據(jù)數(shù)據(jù)查詢只需要輸入需要確定是否存在的數(shù)據(jù)即可,也可以直接查

57、詢?nèi)繑?shù)據(jù),實(shí)現(xiàn)如圖4.6:win.geonetryr200 x60-1-500+125w)entry=tk.Entry(vin,wid.th=20)ent-ry.grid(row=0,coLujiui=03colunuispail=2,paix=5)defchange_st.ate(name):var=entry,get()fl調(diào)用豹尢()方法,Entry中的內(nèi)咨義取出來(lái)ifvar=,orvatisNone;skLOwin.o(1七_(dá)己=ino,nessage=清輸幾數(shù)堀)return.len(nam.e)=0;showinfo(title=,inf,nessage=?暫無(wú)數(shù)據(jù)、return

58、.foriinrange(len(aajne):ifvar=rL3JneLi:shoinfo(tit1亡=info1,jnessage=,存在該id/)returnelifi=(len(najne)-l):shonfinfoCtit1亡=info?,me5sage=n不存在該id/)returndefa.lldata(riajiie):iflen(nam.e)=0:showinfo七_(dá)己=mfo1-7jnessage=?暫無(wú)數(shù)據(jù)、return.shoinf(title=?info1?messag:e=naiae)button1=tkButton(ivin,teKt=確定,coimnand.=L

59、ambda:ch.aiige_state(name)but-t-on1.grid(r071!=0;.colnnm=4)but.t.on2=tkButton(ivin,teKt=,jconunand=Lambda:alldata(name)but-七cin2.gr:Ld(r口1=I,colujim=0?colujimspan=3?pads=5)圖4.6查詢數(shù)據(jù)管理員登錄、登出和密碼管理系統(tǒng)中既然有數(shù)據(jù)操作,要保證數(shù)據(jù)的安全和完整就需要權(quán)限的分配,不能讓無(wú)權(quán)限的人隨意的對(duì)系統(tǒng)的數(shù)據(jù)進(jìn)行添加和刪除,所以引入了管理員系統(tǒng),本設(shè)計(jì)中的管理員系統(tǒng)很簡(jiǎn)單,引入?yún)?shù)OK,初始為0沒(méi)有管理員權(quán)限。在需要數(shù)據(jù)操作

60、時(shí)點(diǎn)擊管理員登錄輸入密碼就可以獲得管理員權(quán)限,將OK值變?yōu)?,管理員密碼以文本形式存放在電腦中,登錄時(shí)打開(kāi)文本驗(yàn)證密碼。在登錄管理員后,主程序頁(yè)面的管理員登錄按鈕隨即變?yōu)樾薷拿艽a按鈕,這時(shí)候可以修改密碼,修改后的密碼存入password.txt文件。登出管理員將OK的值變?yōu)?.在需要的管理員權(quán)限的功能中都會(huì)驗(yàn)證OK的值。實(shí)現(xiàn)代碼如下圖4.7:defadministrator(OK):iitporttkintergthdefpassvord(OK):wintkTk0.win-gcometryC20Oz50+6UU275A,)口aszvord口StrinsViir()e-tk.Entry(wint

溫馨提示

  • 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)論