曾崇林 姚富光
摘 要 當(dāng)前正在開(kāi)發(fā)的面部識(shí)別技術(shù)廣泛用于安全、監(jiān)視、一般識(shí)別、訪問(wèn)等領(lǐng)域。如在搜索和救援失散兒童和提高身份識(shí)別效率方面發(fā)揮著重要作用。本文基于樹(shù)莓派的硬件基礎(chǔ),在Python軟件環(huán)境下,選擇了通過(guò)計(jì)算128D的特征值和128D向量間的歐氏距離的方法,并結(jié)合Adaboost算法、提取Haar特征的方法來(lái)提取人臉特征。開(kāi)發(fā)過(guò)程中用到的OpenCV級(jí)聯(lián)分類(lèi)器是通過(guò)人臉檢測(cè)算法進(jìn)行訓(xùn)練的,再加以通過(guò)積分圖方法來(lái)獲取完整的級(jí)聯(lián)分類(lèi)器結(jié)構(gòu),最后,開(kāi)發(fā)了一個(gè)實(shí)現(xiàn)人臉識(shí)別功能的智能終端??赏度胄⌒蛨?chǎng)所例如課堂簽到,考試身份驗(yàn)證,上班打卡,防盜鎖等諸多領(lǐng)域。
關(guān)鍵詞 人臉識(shí)別;OpenCV;AdaBoost;分類(lèi)器;樹(shù)莓派
引言
當(dāng)今社會(huì)中,面部識(shí)別技術(shù)變得越來(lái)越重要,我們迫切需要更方便用戶的識(shí)別,生物技術(shù)正在成為信息處理和信息產(chǎn)業(yè)的一個(gè)動(dòng)態(tài)領(lǐng)域和重要的方向。受2020年年初爆發(fā)的全球性肺炎疫情,人們?cè)诠矆?chǎng)合需要進(jìn)行身份識(shí)別和體溫檢測(cè),但是人與人之間的接觸又是十分危險(xiǎn)的。如果人臉識(shí)別智能終端開(kāi)發(fā)成熟能夠投入到社會(huì)中,就會(huì)大大提高身份識(shí)別的效率并且可以很大程度上保障市民的生命安全。
基于這個(gè)時(shí)代大背景,設(shè)計(jì)了一個(gè)基于OpenCV的人臉識(shí)別系統(tǒng)。該系統(tǒng)能夠廣泛應(yīng)用與各種場(chǎng)合下,移動(dòng)方便,操作簡(jiǎn)單,使用靈活,還可以彌補(bǔ)傳統(tǒng)安保行業(yè)的安全、方便等方面的缺失。該系統(tǒng)可保障識(shí)別數(shù)據(jù)的實(shí)時(shí)性,真正做到安全、方便和直觀的人臉識(shí)別系統(tǒng),從而進(jìn)一步提高公司、倉(cāng)庫(kù)、家庭、學(xué)校等地的安保水平和管理穩(wěn)定性[1]。
1系統(tǒng)設(shè)計(jì)
1.1 系統(tǒng)整體設(shè)計(jì)
該系統(tǒng)的整體設(shè)計(jì)是以python語(yǔ)言為基礎(chǔ)開(kāi)發(fā)的,運(yùn)用到了如OpenCV、DLIB等開(kāi)發(fā)包,以實(shí)現(xiàn)單個(gè)驅(qū)動(dòng)樣品中的面部識(shí)別,并具有更友好的UI界面和優(yōu)化的識(shí)別速度。首先進(jìn)行面部認(rèn)知,并試驗(yàn)閱讀面孔集的過(guò)程,檢測(cè)面孔,提取面孔身份矢量,存儲(chǔ)面孔身份矢量,標(biāo)識(shí)單個(gè)測(cè)試面板和打印標(biāo)識(shí)結(jié)果。標(biāo)識(shí)界面初始化,加載各種參數(shù)模型,手動(dòng)選擇單個(gè)面部測(cè)試圖表,根據(jù)人體面部檢測(cè)器openCV檢測(cè)人體面部,從人臉特征矢量中提取,計(jì)算十二個(gè)特征點(diǎn)之間的距離,檢測(cè)人臉標(biāo)簽中最小距離的標(biāo)簽,以及輸出面部識(shí)別結(jié)果,圖1顯示了該系統(tǒng)的組織結(jié)構(gòu)。
面部檢測(cè)包括檢測(cè)面部特征,并在某些情況下定位眼睛、鼻子、耳朵和眉毛等面部特征,從而能夠準(zhǔn)確地定位臉部和人臉的其他部分。一般情況下,人臉檢測(cè)是通過(guò)相關(guān)技術(shù)進(jìn)行的,這些技術(shù)將要檢測(cè)的人臉圖像劃分為一種人臉圖像模式(“檢測(cè)到的人臉組成部分”)和一種非人臉圖像模式。
該人臉識(shí)別系統(tǒng)的設(shè)計(jì)以樹(shù)莓派為基礎(chǔ),加以數(shù)據(jù)庫(kù)、OpenCV庫(kù)以及顯示屏。使用本套系統(tǒng)之前需要通過(guò)攝像頭識(shí)別人臉并將人臉樣本保存到人臉庫(kù)中,即數(shù)據(jù)的采集和保存。當(dāng)有人的臉部出現(xiàn)在攝像頭之下,就會(huì)自動(dòng)捕捉人臉,將識(shí)別到的人臉與人臉庫(kù)中的樣本進(jìn)行比對(duì),如果人臉庫(kù)中存在此人的人臉樣本就會(huì)輸出該人臉?biāo)鶎?duì)應(yīng)的相關(guān)信息,如賬號(hào)、姓名等。若無(wú)上述現(xiàn)象,則證明人臉庫(kù)中不存在該對(duì)象[2-4]。
圖1? 系統(tǒng)設(shè)計(jì)結(jié)構(gòu)圖
1.2 系統(tǒng)硬件設(shè)計(jì)
將樹(shù)莓派專(zhuān)用攝像頭用白色排線連接到樹(shù)莓派的開(kāi)發(fā)板上,再將樹(shù)莓派通過(guò)USB接口和AMI轉(zhuǎn)換器與顯示屏連接成功,將所需的鼠標(biāo)鍵盤(pán)通過(guò)USB線連接到樹(shù)莓派上。硬件框架大概基本搭建完成,可以進(jìn)行環(huán)境的配置和系統(tǒng)的開(kāi)發(fā)了[5]。
1.3 系統(tǒng)軟件設(shè)計(jì)
(1)系統(tǒng)開(kāi)發(fā)所需軟件環(huán)境
1)開(kāi)發(fā)所需要軟件資源:win32 DiskImager,SDFormatter,樹(shù)莓派鏡像文件,樹(shù)莓派官方Linux系統(tǒng),PyCharm,python 3.8。
2)開(kāi)發(fā)工具選擇。本次設(shè)計(jì)所用的開(kāi)發(fā)工具是PyCharm 2020.1 x64,python 3.8,Pycharm 2020.1 X64 Pycharm。
(2)軟件運(yùn)行環(huán)境的搭建
1)燒錄系統(tǒng);
2)配置樹(shù)莓派wifi和遠(yuǎn)程桌面;
3)安裝Qt、QtCreator、圖形化遠(yuǎn)程桌面、PyCharm,python 3.8;
4)安裝開(kāi)發(fā)所需要的庫(kù)[6-8]。
2系統(tǒng)實(shí)現(xiàn)
2.1 系統(tǒng)核心代碼
if len(self.faces) != 0
# 獲取當(dāng)前捕獲到的圖像的所有人臉的特征,存儲(chǔ)到 features_cap_arr
features_cap_arr = []
for i in range(len(self.faces)):
shape = self.predictor(self.img, self.faces[i])
features_cap_arr.append(self.face_rec.compute_face_descriptor(self.img, shape))
# 遍歷捕獲到的圖像中所有的人臉
for k in range(len(self.faces)):
# 人員信息列表
# 先默認(rèn)不認(rèn)識(shí),是 unknown
name_namelist.append(“unknown”)
# 每個(gè)捕獲人臉的名字坐標(biāo)
the positions of faces captured
pos_namelist.append(tuple([self.faces[k].left(), int(
self.faces[k].bottom() + (self.faces[k].bottom() - self.faces[ k].top()) / 4)]))