徐常惠,高艷平,王 奧,馬文龍,朱晨鑫
(河南科技大學,河南 洛陽 471000)
近年來,隨著IT行業的興起,人工智能技術得到了快速發展,人臉識別技術成為當今智能時代下的熱門技術,被應用于社會的各個領域。隨著研究的深入,人臉識別的準確率越來越高,安全性也得到了進一步提高,已被廣泛應用于銀行等金融行業的業務辦理、網點監控、安全防控中[1],以及商業領域中的刷臉支付、生活領域中的刷臉開鎖、公安領域中通過人臉識別辨認身份信息等方面。隨著人臉識別技術進一步發展成熟,其應用范圍也將不斷擴大。
目前,不少高校學生自上了大學后,出現生活懶散、學習怠慢等問題,層出不窮,相信人工智能技術在高校教育中也將大有用武之地,幫助大學生改掉不良習慣。
人臉識別技術,屬于生物識別技術的一種,是用攝像頭或者攝像機等圖像采集儀器采集人的臉部形成視頻流,該技術從視頻流中采集一幀幀圖片,把圖中的每一個像素點轉化成數據后,從數據中測量出五官的大小和距離,這些數值轉化成數碼,也就是每個人獨一無二的臉部識別碼,并存儲到數據庫中。此后,每當有人臉被掃描時能自動計算其臉部識別碼,一旦與數據庫所存儲的數據有吻合,則會識別出其身份。
1965年,Chan和Bledsoe在Panoramic Research Inc.上發表了人臉自動識別技術報告[2],這是關于人臉識別最早的學術論文。人臉識別技術研究內容包括人臉檢測、人臉表征、人臉識別、面部表情、姿態分析、生理分類[3]。而在識別算法研究中又有基于人臉特征點、基于整幅人臉圖像、基于模板、利用神經網絡進行識別等不同的算法。本文所用的人臉檢測、人臉識別和人臉數據功能均來自Python擴展庫OpenCV,在整幅人臉圖像上使用LBPH(Local Binary Pattern Histogram,局部二進制模式直方圖)來實現。
目前的高校課堂教學中,少數學生存在著惰性和僥幸心理,習慣性逃課,有的同學甚至從來沒去教室上過課[4]。大學是學習技術的地方,也是為未來的工作打好夯實的基礎,而簽到是老師為了保證學生到課,保障教學效果的必要手段之一。目前的簽到方式包括人工點名簽到、利用手機等電子設備簽到等,這些方式均存在弊端,如表1所示,人工簽到浪費時間,電子簽到可能出現代簽的情況。所以本系統通過使用人臉識別技術,對現有的電子簽到系統進行改進,避免了他人代簽或異地簽到(學生不在教室)的情況。

表1 當前簽到方式利弊
本系統使用Python語言實現,基于OpenCV相關庫進行設計,其工作流程如圖1所示。將攝像頭拍攝的照片或已有的學生照片傳入系統,然后對照片進行預處理和數據訓練,存入數據庫中,簽到時可以直接調用數據庫中處理好的數據進行比對。在發起一次簽到后,系統會打開設備攝像頭,獲取設備中出現的人臉,對識別到的人臉數據進行匹配,如果設備識別出來的人臉數據信息與數據庫中的人臉訓練數據信息沒有匹配成功,可在規定次數內反復匹配,在識別的人臉數據信息與數據庫中的人臉訓練數據信息成功匹配之后顯示簽到成功,否則顯示簽到失敗,完成一次簽到活動。

圖1 智能考勤管理系統工作原理
彩色圖中的特征數據太多,常見的24 bit色彩大概是1 678萬種,也就是常見的1 600萬真彩色。以最常見的RGB格式為例,像素點由R,G,B 3個數值共同表示,從而呈現出彩色。其中,R,G,B是由不同的灰度級來描述。3字節(每個分量用1 Byte儲存,共24 bit)可表示一個像素,灰度代表該顏色的深淺,越大越深。
利用Opencv庫進行人臉識別,需要先進行灰度化處理,也就是將彩色圖片轉化成灰色圖片。具體實現方法為使用Python語言導入CV2庫,然后使用CV2.cvtColor(Src,Code,Dst,DstCn)(Src,要更改顏色的圖像;Code,色彩轉化代碼;Dst,與Src圖像大小和深度相同的輸出圖像;DstCn,是目標中的頻道數)。灰度化的目的是將每個像素點的RGB值統一成同一個值,灰度化后的圖像由三通道變為單通道,單通道的數據處理起來會簡單許多。在灰度化處理之后再開始圖像處理,將灰度化的圖片進行數據化整理。每次圖片數據處理后都會存成文件,經過大量的圖像處理后,形成一個小型數據庫,為后續的人臉識別比對提供數據訓練的基礎。
活體檢測技術是一項應用在人臉檢測方面的核心技術,這項技術的運用,可以在很大程度上避免有人利用照片、視頻、人臉模型達到欺騙檢測系統的目的[5]。而在本系統中使用活體檢測技術的目的就是為了防止部分同學會使用照片或視頻的方式進行代簽。目前的人臉活體檢測算法中,可使用的方法大致分為基于手工特征的方法、基于深度學習的方法、基于更多學習范式的人臉活體驗證方法、面向未知類型攻擊的人臉活體驗證方法[6]。在實際應用中,采取的是根據人臉關鍵點的活體檢測方法來實現對照片或者真人的區分[7]。例如,可以將兩眼之間的位置作為兩個關鍵點,將這兩個關鍵點的距離進行計算并存儲。于是,便可以用n個關鍵點將眼睛部位框出來,再將其坐標化,每個點就擁有了對應的X值與Y值。從而可以找到睜眼狀態下Y的最大值Ymax和最小值Ymin,同理可以找到閉眼狀態下的ymax和ymin。此時,可以得到如圖 2所示的上下眼皮之間的最大距離,通過對人像的多次采集,會得到多次數據,如果上下眼皮之間的最大距離發生了改變,便可以認為這不是圖片冒充真人進行簽到,同時為了防止關鍵點標注時產生的誤差,故當Y(差值)≥0.05時,方可認為通過了活體檢測,如公式(1)所示。

圖2 上下眼皮最大距離
Y(差值)=|(Ymax-Ymin)-(ymax-ymin)|
(1)
本系統開發采用的技術為基于LBPH(Local Binary Pattern Histogram)的人臉識別[8]。LBPH將檢測到的人臉分為小單元,對每個區域的匹配值產生一個直方圖,這種方法具有很強的靈活性,允許人臉模型樣本和檢測到的人臉在不同情況下完成人臉識別。在人臉識別的第一步,首先調取所訓練的數據集,然后通過Python的擴展庫CV2中的Predict()函數,返回個體標簽和置信度評分。
原始LBPH是定義在像素的鄰域內,以鄰域中心像素為閾值,將相鄰8個像素的灰度值與其進行比較。若周圍像素值大于中心像素值,則該像素點的位置標記為1,否則標記為0。最終可得該鄰域內中心像素點的LBPH值,并用此值反映該區域的紋理信息。
在統計學中,置信度是一個概率樣本的置信區間(Confidence Interval),是對這個樣本的某個總體參數的區間估計。置信區間展現的是這個參數的真實值有一定概率落在測量結果的周圍的程度。置信區間給出的是被測量參數測量值的可信程度范圍,即前面所要求的“一定概率”,這個概率被稱為置信水平。
在基于LBPH的人臉識別中,會返回一個置信度,置信度越低越好,所以在識別中可以對設備返回的置信度制定一個評判識別好壞的范圍,本系統中要求置信度低于30為好的識別參數。但這樣的精確度有時還不夠準確,或者有時會出現極端情況。因此,在設計過程中采取了統計學的方法,通過多次取置信度,然后取平均值的方法,防止因為出現極端值影響數據結果,因此排除了返回的置信度的極大值和極小值,如公式(2)所示。
(2)
本文研究了OpenCV在人臉識別中的具體應用,并在應用客戶端通過使用OpenCV庫中LBPH的人臉識別技術、圖像灰度化技術、圖像數據化處理技術,結合基于人臉識別基礎的活體檢測技術,實現人臉識別簽到功能。經多次實驗測試,總體識別效果令人滿意。在識別功能上,進行了不斷完善,基本實現了人臉識別簽到功能、教師代簽功能、一鍵導出出勤率等簽到系統應有的功能,具有了較好的實用性。但本系統仍存在不足之處,例如:數據庫存儲方面,沒有使用云數據庫,而是將數據保存在本地,所以訓練的數據量沒有巨量數據提供支持,而且通過不斷的訓練數據,在識別時,對處理器要求較高,使得目前人臉識別的時效性還有待提高。