基于Python和openCV的人臉識別研究與實現(xiàn)_第1頁
基于Python和openCV的人臉識別研究與實現(xiàn)_第2頁
基于Python和openCV的人臉識別研究與實現(xiàn)_第3頁
基于Python和openCV的人臉識別研究與實現(xiàn)_第4頁
基于Python和openCV的人臉識別研究與實現(xiàn)_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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本設計的目

5、的、意義及應達到的技術要求1 HYPERLINK l bookmark10 1.2本設計在國內外的發(fā)展概況及存在的問題1 HYPERLINK l bookmark12 1.3本設計應解決的主要問題2 HYPERLINK l bookmark14 2本設計2 HYPERLINK l bookmark16 2.1各功能介紹3 HYPERLINK l bookmark18 2.1.1主界面3 HYPERLINK l bookmark20 2.1.2數(shù)據(jù)收集及訓練4 HYPERLINK l bookmark22 2.1.3人臉識別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設計原理及方案選擇6 HYPERLINK l bookmark30 2.2.1人臉識別技術6 HYPERLINK l bookmark32 2.2.2本設計使用的haar分類器7 HYPERLINK l bookmark34 haar-like特征7 HYPERLINK l bookmark36 haar特征計算一積分圖8 HYPERLINK l bookmark38 特征值計算8 HYPERLINK l bookmark40 級聯(lián)分類器9 HYP

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

26、算的話,需要消耗大量的時間和資源,但是有積分圖之后計算區(qū)域F的像素和就可以直接通過點的值去計算,如: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)這樣計算之后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)通過積分圖計算的方式每個特征區(qū)域就都可以通過很簡單的計算得到,大大提升了計算特征值的效率,同時也提高了檢測目標的速度。不同的特征在同一個

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

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

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

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

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

32、以調用不同的檢測器。環(huán)境搭建人臉識別系統(tǒng)自然需要攝像頭,本設計是基于python+opencv的開發(fā)實現(xiàn)所以首先需要搭建python的環(huán)境。首先安裝python3.7,現(xiàn)在已經有了python3.8,但是在我實際的使用中,發(fā)現(xiàn)一些在python3.7中可以進行的操作在python3.8中無法進行。安裝好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)境時使用的是pip安裝,但是pip因為源文件在國外,所以下載速度太慢而且容易有異常,經過查閱資料我配置了清華的鏡像文件,如圖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進行下載安裝了,安裝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印弋時就in:丸就il昭關時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同時還需要python圖像處理包pillow和opencv擴展包分別如圖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的時候已經自動裝上了,這樣目前需要文件程序都已經安裝好了。系統(tǒng)設計與實現(xiàn)程序設計人臉識別,首先需要能夠檢測出人臉,上文中已經較為詳細的介紹了haar特征的原理,這里直接調用了haarcas

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

43、cascade_frontalface_alt2.xml對人臉進行檢測,檢測到人臉之后會在人臉上畫出方框,同時從攝像頭獲得的圖像中按幀讀取圖片,并將圖片轉化為灰度圖片,以User.id.編號.jpg的形式格式命名保存在Facedata文件夾中,方便分類器的特征值獲取。為了節(jié)約時間,本設計中獲取的是200個樣本,要提高精確度可適當增多獲取樣本數(shù)量,但是會增加時間,代碼如圖4.1:whileTrue:S從攝像頭讀取圖片EucesE,iing:=cap.readit轉対頁度圉片gray=cv2.cvtColor(img,cv2.COLOR_BG-R.2CLAY)斗檢測人臉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)#民持畫面的持續(xù)。k=cv2.waitKey(1)ifk=27:fl通過emu犍退出攝像treakelifcount=200:fl潯到2CO個樣本后退出掲像breakfl關闈攝像頭cap.release()cv

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

46、然后會重新新建一個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?)#轉化為刼度圖像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躺卵鴨滬正在訓練過程需要一些時冃請稍慨)faces,ids=g

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

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

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

51、,若依然沒有讀取到符合要求的數(shù)據(jù),就會循環(huán)讀取face_trainer文件夾中的.yml文件,若讀取到符合的.yml文件則不會繼續(xù)再讀取下一個.yml文件,并顯示出當前人臉的數(shù)據(jù),同時以(100-置信度)的形式表示正確可能性在攝像頭窗口顯示出來。當攝像頭上讀取到其他人不與當前的.yml文件數(shù)據(jù)相符的人臉的時候,系統(tǒng)會繼續(xù)往后讀取.yml文件,重新開始循環(huán)讀取的過程。識別進行是可通過按Esc按鍵退出,實現(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衣達到一定羞信度則輸出界無匹配輸出unknow,計數(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人臉識別實現(xiàn)數(shù)據(jù)刪除、查詢在設計的開始,我都是直接刪除數(shù)據(jù)文件,沒有考慮到需要在程序中刪除數(shù)據(jù),后來在程序完成之后才想到在實際運用中數(shù)據(jù)需要更新的,有新數(shù)據(jù)加入就一定需要能夠刪除數(shù)據(jù),但是在查閱資料之后沒有找到一種能夠方便的操作.yml文件的方法。所以我改變了數(shù)據(jù)的結構,由于.yml文件中的數(shù)據(jù)操作起來不方便,所以在之前的數(shù)據(jù)收集時,我便將每個人臉數(shù)據(jù)制作為了一個單獨的.yml文件,同時將數(shù)據(jù)的id在列

55、表中的序號和其對應.yml文件的文件名相對應,這樣在刪除數(shù)據(jù)時,可同時將列表中的id和其對應的.yml文件一起刪除,系統(tǒng)中就不在存在該數(shù)據(jù)了,刪除數(shù)據(jù)代碼實現(xiàn)如圖4.5:coimt1ivliileTrue:rootg-askst-iingC刪B余目標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=無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、詢全部數(shù)據(jù),實現(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調用豹尢()方法,Entry中的內咨義取出來ifvar=,orvatisNone;skLOwin.o(1七_己=ino,nessage=清輸幾數(shù)堀)return.len(nam.e)=0;showinfo(title=,inf,nessage=?暫無數(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七_己=mfo1-7jnessage=?暫無數(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ù)的安全和完整就需要權限的分配,不能讓無權限的人隨意的對系統(tǒng)的數(shù)據(jù)進行添加和刪除,所以引入了管理員系統(tǒng),本設計中的管理員系統(tǒng)很簡單,引入參數(shù)OK,初始為0沒有管理員權限。在需要數(shù)據(jù)操作

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論