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

圖3 人臉識別會議考勤簽到系統運行界面
借助MTCNN 與ResNet 深度學習人臉檢測與識別模型,本文設計實現了一款人臉識別會議考勤系統,該系統能夠實時地檢測與識別出參會人員并記錄考勤信息,克服了傳統考勤方式的不足。該系統現已運用于所在單位的會議考勤,大大提高了日常會議考勤及出勤統計的效率。但同時,本系統仍有一些不足需要進一步改進,如系統對硬件配置要求仍比較高,今后將進一步優化壓縮檢測與識別模型,并考慮向移動端移植。