李穎聰 陳貝文 廖曉芳 朱皓霖 龔焯賢
摘要:人臉識(shí)別是目前較為流行的一種生物特征識(shí)別技術(shù),其應(yīng)用廣泛,常被應(yīng)用于門禁、移動(dòng)支付等方面。為了彌補(bǔ)其他生物特征識(shí)別技術(shù)在身份認(rèn)證方面的缺陷,發(fā)展人臉識(shí)別技術(shù),文章立足輕量以及實(shí)用的思想,開發(fā)了一套基于Python+OpenCV的人臉識(shí)別系統(tǒng)。該系統(tǒng)分為三個(gè)部分,分別是人臉錄入、人臉訓(xùn)練和人臉識(shí)別。文章將會(huì)對(duì)系統(tǒng)的架構(gòu)、開發(fā)系統(tǒng)所采用的技術(shù)等進(jìn)行詳細(xì)的介紹。
關(guān)鍵詞:人臉錄入;人臉訓(xùn)練;人臉識(shí)別;LBPH算法
中圖分類號(hào):TP391? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)18-0053-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
隨著社會(huì)的發(fā)展和科技的進(jìn)步,當(dāng)今世界對(duì)于快捷有效的自動(dòng)身份認(rèn)證有著迫切的需求。而生物特征識(shí)別技術(shù)剛好可以有效地解決身份認(rèn)證的問題。生物特征識(shí)別技術(shù)是通過采集人的生物特征樣本進(jìn)行人的身份識(shí)別。常見的生物特征識(shí)別技術(shù)有DNA識(shí)別、虹膜識(shí)別、指紋識(shí)別等[1]?;贒NA的身份驗(yàn)證是最為準(zhǔn)確的身份驗(yàn)證方法之一。通常情況下,每個(gè)體都具有獨(dú)一無二的DNA信息,基于此通過DNA身份驗(yàn)證可以準(zhǔn)確地識(shí)別出個(gè)體的身份。但是由于該方法采集和驗(yàn)證DNA信息所需的時(shí)間成本和金錢成本較高,因此該方法很難得到大規(guī)模的推廣與應(yīng)用。基于虹膜的身份驗(yàn)證具有唯一性和穩(wěn)定性,但是該方法所需的設(shè)備難以小型化,因此該方法在市面上很難得到推廣?;谥讣y的身份驗(yàn)證具有穩(wěn)定性和可靠性,但是其對(duì)環(huán)境的要求較高,手指的清潔度和完整性均會(huì)對(duì)識(shí)別的結(jié)果產(chǎn)生影響[2]。相較于上述的生物特征識(shí)別技術(shù),人臉識(shí)別技術(shù)具有快捷、隱蔽、非接觸等特點(diǎn)。人臉識(shí)別技術(shù)的特點(diǎn)使得人臉驗(yàn)證具有巨大的應(yīng)用潛力和研究?jī)r(jià)值。目前人臉識(shí)別技術(shù)應(yīng)用于我們身邊的各個(gè)領(lǐng)域,例如基于人臉識(shí)別的門禁、基于人臉識(shí)別的移動(dòng)支付、基于人臉識(shí)別的車站驗(yàn)票等[3-4]。為了彌補(bǔ)上述生物特征識(shí)別技術(shù)的不足,本文將基于Python+OpenCV設(shè)計(jì)一款人臉識(shí)別系統(tǒng)。該系統(tǒng)首先通過攝像頭采集人臉圖像并收集錄入者的身份信息,然后基于LBPH算法[5]對(duì)收集到的人臉進(jìn)行訓(xùn)練。人臉識(shí)別階段,系統(tǒng)通過調(diào)用攝像頭對(duì)識(shí)別者進(jìn)行人臉匹配,攝像頭先識(shí)別出畫面中的人臉,再將其人臉圖像與數(shù)據(jù)庫中的人臉信息進(jìn)行匹配,進(jìn)而確定其身份。
2 人臉識(shí)別技術(shù)的研究現(xiàn)狀
典型的傳統(tǒng)的人臉識(shí)別方法有基于模型的人臉識(shí)別方法、基于幾何特征的人臉識(shí)別方法、基于代數(shù)特征的人臉識(shí)別方法、基于局部保值映射的人臉識(shí)別方法、基于稀疏表示的人臉識(shí)別方法等。傳統(tǒng)的人臉識(shí)別方法雖然發(fā)展比較成熟,但是仍然存在一定的缺陷:一些傳統(tǒng)的人臉識(shí)別方法必須要有人為設(shè)定的特征作為幫助,但是人為設(shè)定的特征往往會(huì)給特征提取和識(shí)別過程帶來誤差;在沒有人為干預(yù)的情況下,傳統(tǒng)人臉識(shí)別方法往往不能自動(dòng)地從原始圖像中提取有用的特征;傳統(tǒng)人臉識(shí)別方法產(chǎn)生的特征被認(rèn)定為淺層特征,不能從原始圖像中獲取更加深入的高語義特征以及深度特征。由于非線性因素的影響,同時(shí)人臉識(shí)別自身的復(fù)雜性等條件的制約,傳統(tǒng)的人臉識(shí)別方法存在的這些缺陷,極大地降低了人臉識(shí)別的精度,因此需要更好的方法解決此類問題。
深度學(xué)習(xí)通過模擬人腦神經(jīng)系統(tǒng)來處理消息,能夠處理人臉識(shí)別中的復(fù)雜問題。在海量人臉數(shù)據(jù)時(shí)代,基于深度學(xué)習(xí)的人臉識(shí)別無論在速度還是準(zhǔn)確性方面都已經(jīng)取得了最好的效果,對(duì)深度學(xué)習(xí)的理論研究和人臉識(shí)別的實(shí)際應(yīng)用具有重要的意義。基于深度學(xué)習(xí)的人臉識(shí)別方法的流程主要包括了人臉預(yù)處理(人臉檢測(cè)、人臉對(duì)齊、標(biāo)準(zhǔn)化、數(shù)據(jù)增強(qiáng)等)、特征學(xué)習(xí)、特征比對(duì)等步驟,其中人臉識(shí)別的關(guān)鍵是特征學(xué)習(xí),如何提取強(qiáng)判別性和強(qiáng)魯棒性的特征是人臉識(shí)別的研究重點(diǎn)。本系統(tǒng)是在深度學(xué)習(xí)的基礎(chǔ)上進(jìn)行開發(fā)的。
3 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
3.1 系統(tǒng)設(shè)計(jì)
基于對(duì)人臉識(shí)別場(chǎng)景和應(yīng)用的了解后,對(duì)系統(tǒng)的結(jié)構(gòu)和內(nèi)容進(jìn)行了劃分與構(gòu)思。由于一般的系統(tǒng)設(shè)計(jì)都需要圖形化界面、系統(tǒng)功能以及相對(duì)應(yīng)的子系統(tǒng)。因此,我們基于Python的Tinker模塊設(shè)計(jì)了人臉識(shí)別的使用界面,并添加了人臉識(shí)別,人臉訓(xùn)練,人臉錄入以及視頻識(shí)別這四大功能。
1)使用界面。系統(tǒng)的使用界面采用單開窗口,即在當(dāng)前界面下進(jìn)行功能操作會(huì)跳轉(zhuǎn)到新的窗口,在新的窗口下完成該功能,這使得界面更加整潔,操作更加清晰。在使用界面窗口下會(huì)顯示當(dāng)前時(shí)間,并在下拉選項(xiàng)中有使用方法介紹和團(tuán)隊(duì)介紹。剩余的兩個(gè)功能選項(xiàng)可以讓用戶自由選擇操作,在完成當(dāng)前操作可以進(jìn)行后續(xù)的人臉識(shí)別功能,使用界面如圖1所示。
2)人臉錄入功能。在進(jìn)行人臉識(shí)別操作前需要完成對(duì)被識(shí)別人員的信息登記和錄入。在信息錄入部分,對(duì)于首次進(jìn)行信息錄入的人員,錄入信息填寫姓名處需要填寫英文字母縮寫。對(duì)于非首次進(jìn)行信息錄入的人員,重復(fù)進(jìn)行信息錄入會(huì)提示信息錄入失敗。錄入完信息后,系統(tǒng)將自動(dòng)采取被識(shí)別者的人臉圖像,并將其保存到數(shù)據(jù)庫中。人臉錄入以及采集過程如圖2所示。
3)人臉訓(xùn)練功能。人臉訓(xùn)練功能是基于LBPH算法對(duì)圖像進(jìn)行特征提取和識(shí)別。通過訓(xùn)練大量的圖片從而提高對(duì)圖像的識(shí)別的準(zhǔn)確率和速度。該功能的主要原理為將一個(gè)圖像分為若干個(gè)區(qū)域,對(duì)每一塊區(qū)域都進(jìn)行LBP特征提取,再將這些特征建立為直方圖。這樣操作的目的是縮減模型識(shí)別圖像所需要的時(shí)間。
4)人臉識(shí)別功能。人臉識(shí)別功能是系統(tǒng)的主要功能。它是將攝像頭抓拍到的人臉與人臉錄入收集到的存放到數(shù)據(jù)庫中的人臉進(jìn)行匹配,若在數(shù)據(jù)庫中找到與之匹配的人臉用綠框框識(shí)人臉并且標(biāo)注識(shí)別的信息;若在數(shù)據(jù)庫中未找到與之相匹配的人臉則用紅色框框識(shí)人臉并且標(biāo)注為unknownface(陌生人臉)。人臉識(shí)別過程如圖3、圖4所示。
5)視頻識(shí)別功能。除了對(duì)人像采集的識(shí)別,系統(tǒng)還可以通過導(dǎo)入視頻文件對(duì)視頻畫面中出現(xiàn)的人臉進(jìn)行識(shí)別偵測(cè),并且會(huì)自動(dòng)評(píng)判識(shí)別出的人臉的相似度。視頻識(shí)別結(jié)果如圖5所示。
3.2 系統(tǒng)配置信息
本人臉識(shí)別系統(tǒng)利用的是Python3語言編寫,OpenCV對(duì)應(yīng)的版本為3.4.1。使用的平臺(tái)為Anaconda 3.6版本以及Pythcharm x64位編程軟件。實(shí)驗(yàn)以及執(zhí)行的電腦環(huán)境系統(tǒng)為Windows10操作系統(tǒng),運(yùn)行內(nèi)存為4GB,CPU為Intel(R) Core(TM)i5-8265處理器,處理速度為1.6GHz。
3.3 系統(tǒng)采用技術(shù)介紹
本系統(tǒng)設(shè)計(jì)采用的是OpenCV,全稱Open Source Computer Vision Library,是一個(gè)開源的計(jì)算機(jī)視覺庫,可以從它的官網(wǎng)http://opencv.org免費(fèi)獲取,作為一款跨平臺(tái)的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,它可以運(yùn)行在Linux、Windows、Android以及Mac Os操作系統(tǒng)上。OpenCV的優(yōu)點(diǎn)在于它輕量級(jí)而且高效——通過一系列C函數(shù)和少量C++類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的多種通用算法。
OpenCV主要包含圖像處理、高層用戶交互、機(jī)器學(xué)習(xí)、目標(biāo)檢測(cè)以及視頻等多種模塊。其中,系統(tǒng)主要應(yīng)用于opencv_video、opencv_objdetect、opencv_imgpro等功能,圖像處理方面主要運(yùn)用了灰度圖轉(zhuǎn)換模塊,目標(biāo)檢測(cè)則運(yùn)用了Haar的各類特征檢測(cè),如對(duì)人眼,耳朵,鼻子以及對(duì)手的人體檢測(cè)。視頻模塊則是采用了目標(biāo)跟蹤、背景減除等方法來實(shí)現(xiàn)對(duì)視頻中提取檢測(cè)到的人臉圖像。
在本次人臉識(shí)別系統(tǒng)中,采用的是LBPH算法(局部二值模式法)。建立在LBPH基礎(chǔ)之上的人臉識(shí)別法基本思想如下:首先以每個(gè)像素為中心,判斷該像素與周圍像素灰度值大小的關(guān)系,并對(duì)其進(jìn)行二進(jìn)制編碼,從而獲取整幅圖像的LBP編碼圖像[2];再將LBP圖像分為gradx*grady個(gè)區(qū)域,獲取每個(gè)區(qū)域的LBP編碼直方圖[6],繼而得到整幅圖像的LBP編碼直方圖。通過比較不同人臉圖像的LBP編碼直方圖,達(dá)到人臉識(shí)別的目的,其優(yōu)點(diǎn)是不受光照、縮放、旋轉(zhuǎn)和平移的影響。
4 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
4.1 系統(tǒng)執(zhí)行整體架構(gòu)
基于輕量實(shí)用的考慮,該人臉識(shí)別系統(tǒng)分為用戶層、控制層以及執(zhí)行層。其中,用戶層主要通過用戶一系列的指令來執(zhí)行對(duì)應(yīng)的功能,并且從中獲取相對(duì)應(yīng)的反饋??刂茖又饕菍⒂脩魝鬟_(dá)的指令,傳送到下一層即執(zhí)行層進(jìn)行操作。執(zhí)行層則是執(zhí)行上一層提交的指令,然后將結(jié)果反饋給控制層。以上是本系統(tǒng)所執(zhí)行的整體架構(gòu)。
4.2 系統(tǒng)邏輯步驟
人臉識(shí)別系統(tǒng)主要分為三大結(jié)構(gòu):人臉錄入、人臉訓(xùn)練以及人臉識(shí)別。其整體的結(jié)構(gòu)邏輯步驟如圖6所示,在人臉識(shí)別系統(tǒng)首界面上選擇視頻識(shí)別或者人臉錄入后,便可進(jìn)行對(duì)應(yīng)選擇的后續(xù)的訓(xùn)練模式和人臉識(shí)別模式。
圖7為人臉錄入的邏輯步驟。首先,需要輸入錄入者的身份信息。信息錄入成功后,調(diào)用本地?cái)z像頭進(jìn)行人像采集。在此過程中,系統(tǒng)會(huì)將圖像轉(zhuǎn)換成灰度圖進(jìn)而簡(jiǎn)化矩陣,這將有利于提高運(yùn)算的速度,進(jìn)而更快地識(shí)別出圖像中的人臉。隨后將抓拍檢測(cè)到的人臉圖像,并與錄入的信息保存到數(shù)據(jù)庫中。完成錄入后便可執(zhí)行訓(xùn)練模式或繼續(xù)進(jìn)行人臉錄入。
圖8為人臉訓(xùn)練的邏輯步驟。開始訓(xùn)練前,系統(tǒng)將采樣的300張人臉圖像作為數(shù)據(jù)進(jìn)行圖像訓(xùn)練。若收集到的圖像少于300張,則訓(xùn)練失敗。若被抓拍的人臉達(dá)到所對(duì)應(yīng)的要求,則系統(tǒng)將進(jìn)行訓(xùn)練模式。首先加載抓取成功的圖像并進(jìn)行灰度轉(zhuǎn)化,將圖像矩陣簡(jiǎn)化,從而提高圖像的計(jì)算能力;再將其轉(zhuǎn)化為NumPy數(shù)組,并交給分類器進(jìn)行進(jìn)一步的處理。然后通過LBPH算法對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練,使機(jī)器更好地理解圖像的人臉,從而強(qiáng)化機(jī)器對(duì)人臉的識(shí)別。最后將訓(xùn)練的結(jié)果保存在相應(yīng)的文件中。
圖9為人臉識(shí)別的邏輯步驟。系統(tǒng)通過調(diào)用攝像頭對(duì)識(shí)別者進(jìn)行人臉匹配,識(shí)別出畫面中的人臉后,再將其人臉圖像與數(shù)據(jù)庫中的人臉信息進(jìn)行匹配,進(jìn)而確定其身份。若識(shí)別成功,則用綠框框選人臉并標(biāo)注出識(shí)別者的姓名;若識(shí)別失敗,則用紅框框選人臉并標(biāo)注為陌生人臉。
5 結(jié)束語
本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于Python+OpenCV的人臉識(shí)別系統(tǒng)。該系統(tǒng)可實(shí)現(xiàn)對(duì)人臉的輕松識(shí)別,其輕量便捷,使用簡(jiǎn)單易懂。方便移植的特點(diǎn)也使得系統(tǒng)能夠在各個(gè)場(chǎng)合上隨時(shí)應(yīng)用。該系統(tǒng)對(duì)硬件的要求不高,在大多數(shù)的電腦設(shè)備上都能快速使用到該系統(tǒng)的各個(gè)功能。通過設(shè)計(jì)該系統(tǒng)的人臉識(shí)別、人臉訓(xùn)練等功能,從而能夠滿足用戶在對(duì)人員進(jìn)出記錄或上班簽到等多種情景的需要,方便其管理。在該系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的過程中,也學(xué)習(xí)到了豐富的知識(shí)和經(jīng)驗(yàn)。
參考文獻(xiàn):
[1] 劉永信,李琳莉,巴雅日?qǐng)D.人臉識(shí)別方法綜述[J].內(nèi)蒙古大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,40(4):493-498.
[2] 李成勇,王莎,陳成瑞.基于OpenCV的人臉識(shí)別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].國外電子測(cè)量技術(shù),2021,40(11):168-172.
[3] 莊薪霖.人臉識(shí)別方法綜述[J].科技創(chuàng)新與應(yīng)用,2022,12(2):130-132.
[4] 劉衛(wèi)凱,郝雅倩,鄭晗,等.人臉識(shí)別綜述[J].信息記錄材料,2018,19(7):13-14.
[5] 王振宇.面向人臉識(shí)別的特征提取技術(shù)應(yīng)用研究[D].南京:東南大學(xué),2016.
[6] 宋俊芳,馬浩軒,趙海莉,等.基于Haar級(jí)聯(lián)分類器和LBPH算法的人臉識(shí)別[J].軟件,2021,42(4):45-47.
【通聯(lián)編輯:謝媛媛】