寧波開放大學 周敏維
考勤是人力資源管理的重要組成部分,而簽到是人們在日常辦公、學習場所中最常用的考勤方式。傳統的紙質簽到會消耗許多筆墨和紙張,且容易被模仿。隨著科技的發展,各種基于自動識別技術被引入到日常簽到中。其中,人臉識別技術作為人類辨認同類最直接的方式,也最易被用戶接受,成為了目前簽到中身份驗證最理想的依據。
近年來,人臉識別技術越來越成熟,很多新的人臉識別算法也被提出來。但是在某些場景應用中,這些算法還不能完全適應。例如,對光照變化的耐受性差、人臉姿態變化時的識別率低、人臉數據庫用戶過多時的圖像搜索與匹配災難、人臉被遮擋時的不可識別(口罩)、孿生問題、人臉面具問題、長時間的深度學習等復雜問題。
基于上述問題,本文提出一個基于樹莓派(ARM-Linux)的人臉識別簽到系統解決方案,通過對現有的人臉識別技術的改進,在較低的成本下,改善傳統人臉識別中光線變化影響識別成功率的問題,以及改善代簽問題。
整個系統硬件由核心運算模塊、圖像采集模塊、GUI顯示模塊以及用戶操作模塊四部分組成,系統硬件整體框圖如圖1所示。

圖1 系統硬件整體框圖
核心運算模塊采用Raspberry Pi4B作為嵌入式硬件基礎,并內嵌Raspbian操作系統系統。Raspberry Pi4B的核心微處理器采用博通1.5GHz的四核ARM Cortex-A72,搭載了4GB內存,并引入USB3.0接口,同時支持雙屏4K輸出和H.265硬件解碼。Raspbian是一款面向ARM基于Debian的Linux系統,通過優化在Raspberry Pi上具有極好的的兼容性。
圖像采集模塊采用Logitech C170攝像頭。這款攝像頭采用500萬像素的CMOS感光元件,支持XVGA(1024×768)分辨率視頻,可通過自帶的驅動直接與樹莓派連接。用戶操作模塊采用Logitech MK245 Nano藍牙鼠標鍵盤,支持Linux系統,可以直接通過USB藍牙接收器與樹莓派連接使用。GUI顯示模塊采用7寸的LED顯示屏,分辨率為1024×600,可直接通過HDMI接口與樹莓派連接。
OpenCV庫提供的目標檢測方法是一種高效的基于“Haar級聯分類器”的目標檢測法,通過構建基于大量正負面圖像訓練的級聯函數來檢測圖像中的被檢對象。OpenCV庫支持開發者訓練自己的目標檢測分類器,但是這需要大量的正面負面圖像去訓練,非常耗時,且自己訓練的分類器常常出現不穩定的檢測問題。所幸,OpenCV庫也提供了訓練好的人臉級聯分類器。本設計使用的是OpenCV提供的haarcascade_frontalface_alt.xml人臉分類器,其算法的原理描述如下:
(1)Haar-like特征
Haar-like特征包括邊緣、線性、中心三大特征,若將其分別表示為黑白兩色的矩形,則可將Haar特征值定義為黑白兩形像素之差,即灰度值的分布情況。所以,每個物體都有自己的特征值矩陣,人臉也是如此。

圖2 級聯分類器訓練模型

圖3 系統軟件整體框圖
(2)圖像積分圖
為了提高Haar-like特征值的計算速度,圖像積分法正式出現。如果沒有圖像積分法,由于運算速度的限制,實時人臉檢測將無法實現。
不同于在Haar-like算法的訓練和檢測中當前子圖像特征值都要被不斷重復計算,利用積分圖算法求出的圖像中,只需要遍歷一次得到所有區域像素之和,算法的效率的到了極大地提高。
(3)AdaBoost算法
AdaBoost算法是一種基于級聯分類器模型的級聯算法,可以在Haar-like特征上構建多個簡單分類器,使系統可以不斷地加入新的弱分類器。具體過程如下:首先基于Haar-like算法得到許多弱分類器,在每次運算的過程中給予每個弱分類器不同的權重值(權重值的大小取決于樣本是否已被準確分類)。然后這些不同權重的分類器都會用于下一次的分類器訓練,整個過程不斷迭代。最后,若干個訓練后的弱分類器就可以組合成一個強分類器。而這些強分類器就可以組成一個級聯分類器。級聯分類器訓練模型如圖2所示。
本系統基于Python編程語言,采用OpenCV庫提供的人臉特征法進行人臉識別,并對所有人臉圖像增加一個預處理的過程提高人臉識別穩定性,在一定程度上解決光照變化問題。系統主要程序包括人臉信息錄入、人臉信息預處理、人臉信息訓練、簽到記錄的讀寫四個部分,軟件整體框圖如圖3所示。
(1)人臉信息錄入
人臉錄入模塊的主要功能是錄入新的用戶信息和對應的人臉圖像。本系統使用OpenCV提供的人臉檢測器進行人臉分類器,實現這個功能的主要函數是cv2.CascadeClassifier(),其輸入變量haarcascade_frontalface_alt.xml是OpenCV庫提供的預先訓練好的人臉分類器。
錄入正式開始時,系統首先會以60幀的速度調用攝像頭模塊去不斷地抓取實時影像中的人臉,當分類器檢測到人臉時,系統會用矩形框把人臉部分框起來,而這個矩形框內的圖像將被轉化成灰度圖并通過分類器函數cv2.imwrite()保存到數據文件夾中。人臉錄入需要抓取60張照片,如果這個參數過大,人臉錄入時間和訓練時間都會增加,參數如果過小,則會影響人臉識別的準確率。經過測試,當參數為60時,可在30s內完成人臉錄入,且能保證較高的人臉識別成功率。
(2)人臉信息預處理
當保存夠60張人臉圖像后,系統需要對這60張圖像照片進行預處理。這一步預處理是系統解決光線問題的關鍵。預處理的過程主要分為兩步:第一,隨機生成一個-60到60的隨機數(這個范圍是多次調試后選擇的結果);第二,調整保存的灰度圖的明亮度,即把圖像中所有像素的灰度值加上一個剛才生成的隨機數。整個過程就是對60張的照片都做這樣的預處理,使這些照片呈現出不同的明亮度,這樣的圖像在訓練使就可以使模型在不同的明暗度下進行識別,從而提升模型在不同光照條件下的準確性。
本設計采用的方法主要基于分類器函數cv2.convertScaleAbs()。這是一個位深轉化函數,可將任意類型的數據轉化為8位無符號整型單通道矩陣。函數中的參數包括縮放因子alpha和增量beta,可以在轉換數據類型的同時控制圖像(目標矩陣)的對比度和明亮度。該函數可在1s內進行大量圖像的轉換操作,且可以很好地適應灰度圖的處理,所以本設計在預處理過程中使用此函數,而不是用傳統方法,在3重for循環中修改像素RGB值。函數的具體操作過程可用下面的公式表示:

(3)人臉信息訓練
人臉訓練模塊的功能是訓練人臉識別器。在這個模塊中,通過特定的OpenCV內置函數將所有的用戶面部圖像用于OpenCV人臉識別器的訓練工作并將訓練的結果保存。
其中一個重要函數是由OpenCV提供的LBPH人臉識別器,實現這個功能的主要函數如下:
recognizer=cv2.face.LBPHFaceRecognizer_create()。
(4)簽到記錄
簽到模塊的功能是通過人臉識別判斷出正在簽到的用戶信息,并保存用戶的簽到時間和簽到畫面。
在人臉識別環節,利用OpenCV提供的專用函數recognizer.predict(),通過輸入待檢測的人臉信息,可得到被檢測人臉可能匹配的id以及該id被匹配的置信度(如果完全匹配,置信度為零。)
然后,設匹配成功值=100-confidence(置信度指數),如果識別器返回的匹配成功值大于等于40,則會顯示出用戶的姓名和匹配成功值;如果系返回的匹配成功值小于40,則會顯示“unknown”。系統需要持續識別出用戶人臉2s以上才能簽到成功。簽到成功后,系統會顯示“Hello,‘用戶名’”,持續3s,然后重新啟動簽到功能。
通過搭建硬件系統和運行環境,實現了人臉識別簽到系統的設計,其運行界面如圖4所示。為測試系統的識別正確率和簽到成功率,預先保存了10位學生的人臉信息,然后讓10位學生隨機進行了50次簽到。其中,有43次正確識別出了學生的身份,識別正確率為86%;49次能夠在5s內簽到成功,簽到成功率為98%。

圖4 程序運行界面圖
調試里圖像預處理的實際效果時,首先測試沒有預處理過程的識別情況,再測試加入預處理過程的識別情況。具體設置方案如下:
對于沒有預處理過程的識別情況,首先刪去系統的預處理過程,在亮光條件下錄入人臉,分別在亮光條件和暗光條件下識別;然后同樣不加入預處理過程,在暗光條件下錄入人臉,分別在亮光條件和暗光條件下識別。
對于加入預處理過程的識別情況,首先在亮光條件下錄入人臉,分別在亮光條件和暗光條件下識別,然后保留預處理過程,在暗光條件下錄入人臉,分別在亮光條件和暗光條件下識別。
識別置信率測試結果如表1所示。

表1 識別置信率測試結果
由表1可見,如果不加入預處理過程,在同樣的光照條件下,系統可以正常識別,但是如果光照條件變化時,識別率會大大降低,有時甚至無法識別出用戶信息。如果加入預處理過程可以大大增加系統在各種光照條件下的識別成功率,尤其是在亮光錄入、暗光識別的情況下的識別成功率,使系統可以在一天24h光照條件變化的情況下正常使用。預處理過程測試結果良好,符合預期效果。
結束語:本文描述了一種基于ARM-Linux的人臉識別簽到系統的設計方案,其重要特點是嘗試用圖像預處理的方法解決光照條件變化下的人臉識別問題。預處理過程主要是給予所有抓捕的面部圖片不同的明亮度,使系統適應不同亮度下的人臉圖片,以提高系統在光照條件變化下的識別穩定性。這樣的人臉識別簽到系統不僅可以大大提高用戶的簽到效率,還能保證較高的環境適應能力,具有較高的穩定性,使用戶有更便捷、更安全的簽到體驗。同時,本系統具有計算量小、安裝簡便、成本低等優點,并且使用的樹莓派開發板可以進行很多額外的功能拓展,在原有的系統上有著極大的提升空間,具有較強的實際使用價值。
在防止“代簽”問題上,傳統的解決方法主要有給系統增加紅外測溫模塊或雙攝像頭識別3D人臉模型,但這些方法都需要較高的經濟預算。本設計在保持低成本開發的前提下,只能從功能策劃的角度去解決這個問題。本設計的解決方法是,保存每次簽到時的圖像,這樣在檢查簽到記錄的時候,就可以發現哪些簽到是正常簽到,哪些簽到是圖片視頻代簽,從提供人工檢查途徑的角度解決了“代簽”問題。
為進一步完善簽到系統的功能,后期擬通過樹莓派良好的無線網絡接入能力引入數據遠程查詢功能,并利用樹莓派強大的計算能力增加數據分析功能。