徐建峰,孫浩,陸萍,董虎勝
(蘇州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院,蘇州 215009)
考勤簽到是企事業(yè)單位日常管理的重要組成部分,當(dāng)前常用的考勤方式有簽名、點名、刷卡簽到、指紋識別等。其中簽名與點名的效率很低,數(shù)據(jù)統(tǒng)計匯總也相當(dāng)麻煩;采用刷卡的方式需要額外攜帶磁卡;采用了生物特征識別技術(shù)的指紋簽到仍存在可被復(fù)制的問題。與上述考勤簽到方式相比,人臉作為人的另一種生物特征,具有很強的外觀穩(wěn)定性與個體差異性,是實現(xiàn)身份驗證的最理想的方式,考勤時也無需攜帶其他額外物品,具有方便、直觀、易于普及等優(yōu)點。
本文基于深度卷積神經(jīng)網(wǎng)絡(luò)設(shè)計開發(fā)了一款人臉識別會議考勤管理系統(tǒng),該系統(tǒng)采用了多任務(wù)卷積神經(jīng) 網(wǎng) 絡(luò)(Multi- Task Convolutional Neural Network,MTCNN)[1]+深度殘差網(wǎng)絡(luò)(Residual Network,ResNet)[2]的人臉檢測與識別模型,使用OpenCV 對視頻流數(shù)據(jù)進(jìn)行處理,實現(xiàn)了對單位部門、員工、會議、參會等信息的管理,能夠方便地進(jìn)行人臉注冊、人臉識別、考勤簽到與數(shù)據(jù)匯總處理等工作,能夠有效地滿足小型單位或部門的會議考勤需求。
本文設(shè)計開發(fā)的人臉識別會議考勤簽到系統(tǒng)采用了PyQT 開發(fā)圖形用戶界面,使用了第三方包Py?MySQL 連接MySQL 數(shù)據(jù)庫實現(xiàn)人員、會議及考勤信息的存儲與檢索,在人臉識別模塊中使用了MTCNN 與ResNet 實現(xiàn)了多人實時人臉檢測與人臉識別,在考勤記錄分析與數(shù)據(jù)導(dǎo)出時分別使用了QtChart 與xlswings第三方庫。
人臉識別會議考勤系統(tǒng)由人員管理、會議管理、人臉識別考勤、考勤記錄統(tǒng)計分析四個主要模塊組成。其中人員管理模塊除了實現(xiàn)對員工編號、姓名、部門、職務(wù)等人員基本信息的管理外,還包括人臉圖像注冊、部門與職務(wù)的管理等功能;在會議管理模塊中可以對會議進(jìn)行安排,主要包含會議時間、會議時間、會議地點、會議主題與參會人員等信息;人臉識別考勤模塊的主要功能是調(diào)用人臉識別引擎從攝像頭捕捉到的視頻流中識別參會人員的身份,同時記錄考勤時間信息;在考勤記錄統(tǒng)計分析模塊中,能夠根據(jù)指定的日期范圍檢索出個人、部門與單位全體人員的出勤信息,并自動繪制出相關(guān)的統(tǒng)計分析圖表。
在工作流程上,考勤管理員登錄系統(tǒng)后需要首先錄入本單位各部門信息、職務(wù)信息及工作人員的基本信息,在注冊人臉圖像時即可以通過攝像頭現(xiàn)場拍攝一張正面照片,也可以使用員工提供的指定大小的電子版?zhèn)€人證件照。系統(tǒng)在每次啟動時都將會檢測注冊員工的照片信息,如果發(fā)現(xiàn)有員工沒有照片將會彈出警告信息。在員工信息錄入后,考勤管理員即可安排會議,設(shè)置會議時間、主題、地點與參會人員,系統(tǒng)將自動為每個參會人員添加待參會的記錄,參會人員可在系統(tǒng)參數(shù)設(shè)置的考勤時間范圍通過刷臉完成簽到,系統(tǒng)會自動實現(xiàn)考勤記錄的添加。
人臉檢測是對人臉進(jìn)行識別與處理的基礎(chǔ),其目標(biāo)是從視頻流中檢測并定位出人臉圖像,返回人臉邊界框(Bounding box)坐標(biāo)及人臉特征點的坐標(biāo)。本文選用了當(dāng)前使用比較廣泛的MTCNN 網(wǎng)絡(luò)作為人臉檢測的模型,MTCNN 不僅能夠檢測出畫面中的人臉,還具有人臉對齊的功能,能夠幫助尋找出人的眼睛、嘴與鼻子位置。MTCNN 中含有 P-Net、R-Net 和 O-Net 三層級聯(lián)的網(wǎng)絡(luò)結(jié)構(gòu)。一層都在對輸入作卷積運算處理后進(jìn)行邊界框回歸(Bounding box regression)與非極大值抑制(Non-Maximal Suppression,NMS)處理,在經(jīng)過P-Net 處理后獲得 24×24 大小的特征圖(feature map);然后送入第二層R-Net 網(wǎng)絡(luò)獲得48×48 大小的特征圖;最后通過第三層O-Net 處理后獲得人臉邊界框及面部標(biāo)簽輸出。MTCNN 中 P-Net、R-Net 和 O-Net 的具體網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。
MTCNN 網(wǎng)絡(luò)接收的輸入是將原始圖像作不同尺度縮放后獲得的圖像金字塔,這樣的處理有助于在NMS 階段丟棄掉一些響應(yīng)值不夠高的內(nèi)容。在P-Net網(wǎng)絡(luò)中,主要負(fù)責(zé)快速粗略地檢測出一些可能會出現(xiàn)人臉的候選框,R-Net 網(wǎng)絡(luò)對這些候選框進(jìn)一步檢測并排除掉一些置信度比較低的對象,最后通過O-Net生成精確的候選框與位置坐標(biāo)。在損失函數(shù)的選擇上,由于人臉檢測可歸屬為一個二分類問題,MTCNN在人臉檢測中采用了交叉熵?fù)p失函數(shù),而在人臉邊界框回歸與關(guān)鍵點坐標(biāo)檢測中采用的都是歐氏距離損失函數(shù),最后根據(jù)將每個階段中的損失函數(shù)進(jìn)行加權(quán)組合獲得總的損失函數(shù)。
在人臉識別會議考勤系統(tǒng)的開發(fā)中,采用了在WIDER_FACE[3]數(shù)據(jù)集上已經(jīng)訓(xùn)練好的 PyTorch 模型。在使用OpenCV 捕捉視頻幀后,為了提升檢測效率,采用了將視頻幀縮小至原尺寸的1/4 再檢測的策略,系統(tǒng)在運行時基本上達(dá)到實時檢測的性能。
在從視頻流中檢測出人臉后,需要進(jìn)一步給出該人臉圖像的標(biāo)簽,即根據(jù)人臉識別出該員工的姓名及其他相關(guān)信息,本文采用了ResNet 從人臉圖像獲得特征表達(dá)向量并進(jìn)行匹配。ResNet 網(wǎng)絡(luò)采用了如圖2 所示的一種“短路”的形式將網(wǎng)絡(luò)的輸入與輸出相加,實現(xiàn)了對輸入內(nèi)容的重用。若將網(wǎng)絡(luò)輸入設(shè)為x、某一網(wǎng)絡(luò)層為H,以x作為輸入后該層的輸出為H(x) ,ResNet 在輸出時采用作為下一層的輸入。這樣的處理能夠有效地抑制隨著網(wǎng)絡(luò)加深所帶來的梯度彌散與梯度爆炸問題,獲得圖像更為抽象的特征表達(dá)。
ResNet 中的殘差塊有圖2 所示的基本塊結(jié)構(gòu)與被稱為“Bottleneck”的塊結(jié)構(gòu)兩種,與基本塊結(jié)構(gòu)相比,Bottleneck 塊結(jié)構(gòu)中將兩個3×3 的卷積層替換為1×1+3×3+1×1 的結(jié)構(gòu),首先通過 1×1 的卷積降低了通道數(shù),減少了運算量,在通過3×3 卷積后再使用一個1×1 卷積實現(xiàn)通道數(shù)的還原,在減少計算量的同時保持了精度。
本文在人臉識別模塊選擇了dlib 庫中已經(jīng)訓(xùn)練好的ResNet 模型接口,該接口接收人臉圖像后將其首先縮放為224×224 的大小,通過前向運算返回一個128維的人臉特征向量。由于在系統(tǒng)中已經(jīng)保存了所有員工的人臉圖像,可以使用ResNet 模型接口提取這些圖像的特征向量并存儲在文件中。在人臉識別考勤階段,只需要在從視頻幀中檢測到的人臉圖像提取特征向量,與載入的特征向量計算歐氏距離即可實現(xiàn)匹配識別,本文采用最近鄰分類器返回的標(biāo)簽作為視頻中人臉圖像的標(biāo)簽。
在人臉識別會議考勤系統(tǒng)其他模塊的開發(fā)中采用了模型-視圖-控制器(Model View Controller,MVC)開發(fā)模式。其中模型對象(Model)負(fù)責(zé)在數(shù)據(jù)庫中存取的數(shù)據(jù),在本系統(tǒng)中主要涉及員工、部分、職務(wù)、會議、參會等對象,在開發(fā)時他們均被封裝為實體類,各個屬性變量與數(shù)據(jù)庫中的字段一一對應(yīng)。視圖(View)對應(yīng)于應(yīng)用程序中數(shù)據(jù)的展示,在本系統(tǒng)中采用QT 實現(xiàn)各個GUI 窗口。為了便于使用Python 開發(fā),在開發(fā)各個模塊時首先采用了QtDesigner 首先完成控件的布局,然后使用uic 將獲得的.ui 文件編譯為.py 文件。控制器(Controller)負(fù)責(zé)從視圖讀取數(shù)據(jù)控制用戶輸入并向模型發(fā)送數(shù)據(jù),在本系統(tǒng)的開發(fā)中,只需要引入編譯為.py 文件的界面類,進(jìn)一步實現(xiàn)各個控件的響應(yīng)槽函數(shù),并為各個控件綁定響應(yīng)事件或添加信號即可。
在人臉識別會議考勤系統(tǒng)的開發(fā)中,系統(tǒng)配置與常用工具類被單獨放置于兩個Python 包中。系統(tǒng)配置采用.ini 文件實現(xiàn),在該文件中分組實現(xiàn)對數(shù)據(jù)庫地址、用戶名、密碼、數(shù)據(jù)庫名、以及其他系統(tǒng)級參數(shù)的設(shè)置。在工具類中采用靜態(tài)方法實現(xiàn)各常用功能,如:配置文件的加載、數(shù)據(jù)庫的連接與關(guān)閉、文本內(nèi)容的分析、用戶名及密碼等輸入內(nèi)容的校驗等。
由于系統(tǒng)開發(fā)中采用MVC 分層開發(fā)模式實現(xiàn)了界面與業(yè)務(wù)邏輯的分離,本系統(tǒng)可以方便地進(jìn)行后期的維護(hù)與功能擴(kuò)展。
人臉識別會議考勤系統(tǒng)的核心模塊為視頻流畫面中的人臉檢測與識別,其余模塊為一般的信息管理系統(tǒng)功能。在人臉識別考勤時,需要盡可能地實現(xiàn)實時的人臉檢測與識別。盡管本系統(tǒng)在開發(fā)中應(yīng)用了MTCNN 與ResNet 深度學(xué)習(xí)模型,但是由于運用的均為訓(xùn)練好的模型,在系統(tǒng)運行測試時僅需要對視頻幀畫面進(jìn)行前向運算,基本上能達(dá)到實時檢測識別的性能。由于MTCNN 能夠支持畫面中的多張人臉的檢測,本會議考勤系統(tǒng)還能夠?qū)崿F(xiàn)多人同時刷臉考勤,當(dāng)在畫面中同時檢測識別出多張人臉圖像時,系統(tǒng)采用了延遲5 秒刷新展示的方式,以便能夠留下足夠的時間進(jìn)行語音播報。圖3 給出了本系統(tǒng)運行時的刷臉簽到畫面。
圖3 人臉識別會議考勤簽到系統(tǒng)運行界面
借助MTCNN 與ResNet 深度學(xué)習(xí)人臉檢測與識別模型,本文設(shè)計實現(xiàn)了一款人臉識別會議考勤系統(tǒng),該系統(tǒng)能夠?qū)崟r地檢測與識別出參會人員并記錄考勤信息,克服了傳統(tǒng)考勤方式的不足。該系統(tǒng)現(xiàn)已運用于所在單位的會議考勤,大大提高了日常會議考勤及出勤統(tǒng)計的效率。但同時,本系統(tǒng)仍有一些不足需要進(jìn)一步改進(jìn),如系統(tǒng)對硬件配置要求仍比較高,今后將進(jìn)一步優(yōu)化壓縮檢測與識別模型,并考慮向移動端移植。