張寅東,陳曉填,張宇雯
(廣州大學計算機科學與網絡工程學院,廣州 510006)
人臉作為顯著的生物特征,被廣泛用于生活中個人身份的識別,例如:安保系統、銀行結算、手機解鎖、刑事偵查等。相比于指紋識別,人臉具有易獲取、難偽造的優點,能夠克服傳統的考勤方式下他人代替考勤這一問題,適合作為考勤系統的身份識別依據。同時樹莓派以體積小,價格低的優點常被用于嵌入式開發。構建考勤系統時,只需要在配置好系統環境的樹莓派中安裝TensorFlow、OpenCV等框架,以及MySQL數據庫、QT界面和依賴的第三方庫,通過SSH連接樹莓派并執行指令開啟圖形界面執行程序,就可以實現一個簡單的嵌入式考勤系統。
本文旨在設計一個能精確識別人臉且搭載于輕量化微型電腦上的考勤系統。所以我們的核心思想是通過關聯的USB攝像頭和人臉檢測算法來獲取人臉,并利用深度學習算法提取特征值和人臉識別算法識別待考勤人員,最終將人員考勤記錄保存到關聯數據庫中。管理員可隨時查看所有人員的考勤情況。
考勤系統分為前臺和后臺兩部分,前臺功能主要包括待考勤人員基本信息的錄入、人臉的采集、人員刷臉考勤以及考勤情況的顯示,后臺功能主要包括管理員對待考勤人員信息的修改以及對考勤信息進行管理,各部分的流程如下。
(1)管理員對信息的錄入
①管理員完成身份認證后登錄到信息管理系統;②管理員錄入待考勤人員的信息,基本信息包括待考勤人員的ID、姓名、人臉信息,其中人臉的采集可以是現場采集,即通過攝像頭現場拍攝一張正臉照片,或是由員工自己提供一張電子版的個人證件照,將大小調整后通過本地傳入。系統將利用深度學習算法將獲取到的人臉特征存至數據庫以便后期的刷臉考勤打卡對比,同時為了使后期的識別更加精確,在錄入圖片的時候需要盡量錄入幾張不同角度的人臉照片,如稍微左右側臉、仰頭或者低頭等角度。
(2)刷臉考勤的流程
①通過樹莓派關聯的攝像頭和人臉檢測算法實時獲取人臉;②當有人臉出現在攝像頭前時,系統利用模型中的深度學習算法提取當前人臉圖像的特征,并與預先保存在數據庫中的特征進行比對,若當前人臉圖像的特征值與數據庫中預留的人臉特征值之間歐氏距離小于設定的閾值時,即可認為兩張圖片的特征值匹配,當待考勤人員與數據庫中預留照片的特征值匹配時,系統便判定兩張人臉圖像是同一個人,這時便會自動記錄下該人員的考勤信息,同時在考勤界面顯示打卡成功的消息。刷臉考勤流程如圖1所示。

圖1 刷臉考勤流程圖
(3)管理員對考勤信息的檢索
在數據庫中有刷臉考勤的記錄后,管理員可以驗證身份進入管理系統,對考勤情況進行查詢檢索,如對每天遲到、缺勤的人員信息檢索,對某人的考勤信息檢索,對某天的考勤信息檢索等。同時考勤系統具有按月統計考勤次數的功能,管理人員可以利用該功能檢索出每人每月的考勤次數。
系統共涉及兩部分的深度學習算法,一部分是錄入人臉信息以及刷臉考勤時的人臉檢測算法,另一部分是刷臉考勤時的人臉識別算法,兩部分算法的算法原理如下。
人臉檢測采用的傳統方法是OpenCV中訓練好的Haar級聯分類器[1]。進行人臉檢測時,先將圖片灰度化,提取特征值,然后調用相應的級聯分類器來檢測人臉,但是單靠一個級聯分類器來檢測人臉,有一定的局限,如在多人臉圖或實時檢測環境下就會出現較大的誤判,同時模型還要實現在樹莓派CPU上較為快速的處理,因此我們采用了由中科院提出的人臉檢測框架FaceBoxes這一輕量化且能依賴CPU的人臉檢測模型[2],其原理如圖2所示,它由快速消解的卷積層(Rapidly Digested Convolutional Layers,RDCL)和多尺度卷積層(Multiple Scale Convolutional Layers,MSCL)構成。RDCL主要通過適當的內核大小快速縮小輸入空間,同時利用CReLU激活功能減少輸出通道的數量,使模型能夠在CPU設備上達到實時處理速度;而MSCL的目的是在不同層上豐富感受野和離散化錨點,其算法實現主要是通過沿網絡深度維度和沿網絡寬度維度的多尺度設計,即對Faster R-CNN網絡的改進,以便處理不同尺度的面部。

圖2 FaceBoxes原理[2]
在傳統的OpenCV自帶的LBPH算法基礎上,本文針對人臉識別所需圖像要求1:N的情況,采用了Google提出的FaceNet深度學習通用型網絡[3]。該網絡在傳統CNN人臉識別模式的基礎上進行了改進,并且模型訓練與傳統模式相比也有了很大的變化。傳統方法先提取人臉特征,然后再利用分類算法進行分類。而FaceNet直接通過學習將特征變為氏平面上的一個點,然后通過比較點之間的距離來進行類別判斷。模型利用三元組損失函數進行優化,最后輸出128維度的向量。三元組損失函數的約束條件如公式(1)所示:

該公式表示左邊類內的距離(加上邊際)要小于右邊類間的距離,這個約束需要在所有的三元組上都成立。其中α表示正樣本對((錨點)(正樣本))和負樣本對((錨點)(負樣本))間的一個約束范圍,T表示訓練集內任何可能的三元組集合,其基數為N,將公式進行優化后,得到損失函數如公式(2)所示。

最后通過減小損失函數的值,來實現對模型的優化。輸入的三元組主要包括一張樣本圖像縮略圖,一張與樣本同類的圖像略縮圖和一張與樣本不同類的圖像縮略圖。損失函數則主要對這三元組通過距離邊界進行劃分后得出正負類,最終拉近同一樣本之間的歐氏距離,推遠非同一樣本之間的歐氏距離,損失函數的原理如圖3所示。當兩張圖像之間的歐氏距離越近時表示是同一個人,反之則不是同一個人。

圖3 三元組損失函數的原理
樹莓派(Raspberry Pi)是一款基于ARM的微型電腦主板,以SD卡為內存硬盤,卡片主板周圍有USB接口、HDMI高清視頻輸出接口和以太網接口,可連接鍵盤、鼠標、顯示器、攝像頭、網線等I/O設備,具備所有PC的基本功能,同時它擁有低能耗、移動便攜性和GPIO等特性,很多在普通電腦上難以做好的事情,在樹莓派上卻能很輕易地做到。
Raspbian為樹莓派官方深度定制的硬件驅動與軟件程序,是一個官方推薦的Linux系統,其內部自帶Python 2和Python 3環境,本文使用的是該系統下的Python 3環境。
Labeled Faces in the Wild(LFW)人臉數據庫主要用于研究自然環境下的人臉識別問題[4]。如圖4所示,該數據集包含了從互聯網上收集的約13k張具有不同朝向、表情及光照環境等非受限環境的人臉圖像,每張人臉圖像都標注有對應的人物名字。在LFW數據庫中,人臉的光照條件、姿態多種多樣,有的人臉還存在部分遮擋的情況,使得該數據集中的圖像識別難度較大,因此該數據集主要用于測試人臉識別的準確率。測試過程中,LFW給出一張人臉圖像,然后把其與待測試的人臉圖像進行比較判斷是否屬于同一個人,最后經過測試6k對的人臉測試圖得出屬于同一個人的人臉圖張數與真實數量的比值,即獲得人臉識別準確率。

圖4 LFW部分圖像[4]
經測試,本文在LFW數據集上的人臉識別正確率約為97.83%,識別精度可以滿足大部分環境下的識別要求。以下是對系統各功能測試的實驗結果。圖5是人員刷臉考勤時的界面,圖6和圖7分別是對考勤數據的查詢和統計。
人員考勤時,點擊打卡按鈕,系統會自動檢測攝像頭前的人臉,并別當前打卡的人,并將成功打卡的信息顯示至主界面,刷臉考勤成功的界面如圖5所示。

圖5 考勤人員識別
考勤信息的檢索分為按照姓名查詢,按照ID號查詢,按照日期查詢。按照姓名查詢的結果如圖6所示。

圖6 按照姓名查詢考勤信息

圖7 考勤系統統計功能
考勤信息的統計功能可以顯示所有人員每個月的考勤的總次數。通過該功能,管理員可以記錄缺勤人員的信息。
本文設計實現了一個基于樹莓派的人臉識別考勤系統,該系統利用了Python語言和人臉識別框架,在傳統人臉識別方法的基礎上進行了改進,實現了人臉的精準定位與識別。我們對于人臉的檢測主要是使用輕量化的FaceBoxes模型,對于人臉的識別主要是使用FaceNet模型。另外,我們還利用樹莓派實現嵌入式開發,克服了傳統考勤方式中的漏洞和傳統人臉識別算法的不足。經數據集和實際使用的測試,該考勤系統可以實現考勤系統所需的各項功能,具有較高的準確率,在高校和企業的考勤中具有較高的使用價值。