譚 敏,鄧永志,蘭 紅
(江西理工大學 信息工程學院,江西 贛州 341000)
上課簽到是學校在進行教學管理和學生成績審核中必不可少的手段之一。常見的簽到方式主要包括紙質簽到表、指紋打卡機和IC卡刷卡機[1]等。隨著科技的不斷發(fā)展,部分高校推出了新型的簽到方式。例如,英國郡伊利市的一所社區(qū)學院使用紅外線掃描技術進行學生簽到[2]。相比后面的幾種簽到方式,出于成本考慮,目前大多數高校使用的還是紙質簽到表[3]。紙質簽到雖然簡單、成本較低,但是針對學生較多的情況不僅耗費課堂時間,而且學生極易作弊。此外,每年打印簽到表的紙張消耗也為此方法帶來了環(huán)保方面的問題。因此,設計一種成本低、防作弊且環(huán)境友好型簽到模式具有重要的現(xiàn)實意義。
人臉識別技術是指利用生物信息,比較人臉的視覺特征,從而進行身份鑒別的技術。它是一項研究較為熱門的計算機領域技術[4]。近幾年,在國內更是掀起了一股人臉識別技術熱潮,從火車站刷臉安檢閘機到門禁刷臉,從各類手機美顏軟件到支付寶刷臉支付,人臉識別無不證明著它的強大。深度學習、圖像處理、計算機視覺等技術的日漸火熱,也推動著人臉識別技術的快速發(fā)展,未來必將是人工智能的時代。因此,人臉識別技術的學習與研究顯得尤為重要。
Android[5]是基于Linux的開源操作系統(tǒng),主要應用于移動設備,目前已是市場占有率最大的手機操作系統(tǒng),擁有數量龐大的用戶群。由于其開源的優(yōu)勢,在各大手機廠商及開發(fā)者的合力下,Android現(xiàn)已更新到最新的8.0版本,具備更加精美的界面,更適應用戶的需求。
本文著重研究基于Android平臺的人臉識別技術,以Android Studio為開發(fā)平臺,利用人臉識別中的相關技術,設計實現(xiàn)一款以人臉識別為主的學生簽到APP,且APP同時包含生活、學習等其他輔助功能。
人臉簽到作為APP的核心功能,使用了當下最流行的人臉識別算法進行實現(xiàn)。它主要包括兩個方面,一是學生注冊賬戶時的人臉信息采集,包括檢測定位與特征提取;二是學生上課簽到時的人臉信息匹配。
結合人臉識別技術的考勤簽到APP的總體設計與實現(xiàn)流程,如圖1所示。

圖1 人臉識別技術實現(xiàn)流程
(1)人臉采集:學生利用手機攝像頭拍照,向服務器上傳一張真實的人臉照片作為注冊的輸入數據;對上傳的圖像進行預處理,消除部分因光照不均勻等因素引起的噪聲;從預處理后的圖像中提取人臉特征值,將特征值組合成特征向量保存在后臺服務器。
(2)數據匹配與處理:考勤簽到時登錄賬戶,選擇APP中對應課程的簽到功能,打開相機再次拍照,實時計算捕捉到的人臉信息的相關特征數據集,依據用戶的唯一標識符獲取后臺中該用戶注冊時的人臉特征數據集,將這兩個特征數據集進行匹配,得到滿足預設閾值范圍的相似度,從而確定是否為同一用戶。
APP使用的人臉識別技術主要細分為三步。①人臉檢測與定位:以手機拍攝的圖像為輸入,判斷當前圖像中是否有人臉信息,如果存在人臉,則將人臉以最小外接矩形標記。②人臉特征提取:將定位到的人臉圖像作為輸入,采用紋理識別算法提取圖像中的紋理特征,將紋理特征進行壓縮編碼形成以“.dat”的二進制數據文件保存于數據庫中。③人臉匹配:利用手機攝像頭捕捉的實時圖像經過①、②的處理獲得的特征數據,與數據庫中對應的人臉特征文件對比、計算相似度,若相似度在置信區(qū)間內,則認為人臉匹配成功。
采用的人臉識別技術的功能調用時序圖,如圖2所示。
人臉信息檢測定位主要是借助一個滑動窗口對圖像進行掃描。在此過程中,通過提取窗口內圖像特征信息,并將所提取的特征信息作為輸入,利用合適的分類器判別該窗口是否為人臉區(qū)域。
人臉檢測與定位的關鍵是對分類器的選擇,本文采用的是人臉檢測經典算法Viola_Jones[6]。
算法主要過程如下。

圖2 人臉簽到技術功能調用時序圖
(1)利用Haar特征描述人臉的共有屬性。Haar特征通過像素分模塊求差值,反映了圖像的灰度變化,用來體現(xiàn)圖像的局部灰度特性。將其運用到矩形區(qū)域時,通過算子構成描述人臉共用屬性的Haar-like特征。

其中A、B、C三類算子分別代表了二鄰接、三鄰接和四鄰接矩形,如圖3所示。

圖3 三類算子對應矩形
(2)建立積分圖像特征,獲取矩形特征。為了降低遍歷圖像所有像素點的開銷,引入積分圖像。原理是對圖像中的任何一點,該點的積分圖像值等于位于該點左上角的所有像素之和,即:

且積分圖像應滿足關系:

其中I表示積分圖像,f表示原灰度圖像,x、y、x'、y'表示像素位置。
如圖4所示,利用積分圖像求取矩形ABCD像素和的表達式:

其中I(D)代表矩形acDd的像素和,I(C)代表矩形abCd的像素和,I(B)表示矩形acBe的像素和,I(A)表示矩形abAe的像素和。

圖4 積分圖像求矩形像素和
(3)利用Adaboost算法進行訓練。AdaBoost將一系列弱分類器通過線性組合構成一個強分類器,可以同時進行特征選擇和分類器訓練。

h(x)即合成的強分類器,hi(x)為弱分類器,本質是一個閾值函數:

其中θi表示閾值,Si∈{-1,1},αi在訓練中確定。
(4)建立層級分類器。層級分類器每層包含一個強分類器,所有矩形特征劃分為若干組。將每組的矩形特征用在每層上,判斷輸入是否為人臉。不是,則舍棄;是,則進入下一層更復雜的分類器中進行判別。流程如圖5所示。

圖5 層級分類器實現(xiàn)原理
OpenCV已經將Viola-Jones算法寫入函數庫,可以直接通過函數調用實現(xiàn)該算法。
人臉特征提取是針對定位到的人臉區(qū)域提取該區(qū)域的紋理特征構成特征數據集。本文采用的是基于結構法的紋理特征描述算子LBP。它是借助局部領域定義的紋理測度,具有尺度不變性、旋轉不變性和計算復雜度低等優(yōu)點。
LBP局部二值描述算子的表示形式為:

式中的(xc,yc)代表n×n領域的中心元素,它的像素值為ic,ip代表領域內其他像素值,s(x)代表一維階躍函數。
用戶通過使用在Android端的注冊功能,輸入一張用戶的頭像,再調用人臉識別算法獲取去人臉特征數據。在Android端對特征數據進行Base64編碼,將其轉化為二進制的數據流,最后上傳到服務器。
實現(xiàn)偽代碼如下:
function getFaceFeature(userImage)
input userImage image of user’s face
return dataStream data of facial feature
if userImage is not empty then
faceFeature←FEATURE(userImage)
dataStream←BASE64(faceFeature)
end
return dataStream;
人臉信息匹配策略是以歐式距離為依據,比較兩個人臉特征數據集的相似程度。
相似度度量函數為:

其中d(x,y)表示兩個數據集的歐式距離,sim(x,y)表示兩數據集的相似度。
用戶通過點擊當前課程的簽到功能進行簽到,調用攝像頭獲取實時用戶圖像。此時,Android端會在本地對實時圖像進行人臉定位和特征提取操作。同時,Android端會向服務器發(fā)送請求,獲取該用戶注冊時的人臉特征數據,然后求這兩種特征數據的相似度。若該相似度在置信區(qū)間內,則認為是同一人,給出簽到成功的提示;否則,簽到失敗。
實現(xiàn)偽代碼如下:
function getFaceMatch(userImage)
input userImage image captured by camera
return Boolean matching result[true/false]
if userImage is not empty then
face←getFaceFeature(userImage)
end
original←getFaceFromServer(userId)
similarity←FACE-MATCH(face,original)
if similarity>0.9 then
return true
else return false
依據上述總體設計和技術實現(xiàn)理念分析,本軟件在Android系統(tǒng)平臺下采用Java開發(fā)語言實現(xiàn)[7-8]。采用C++與OpenCV相結合實現(xiàn)人臉識別技術的核心算法,借助Android NDK[5]以供客戶端進行調用。在虛擬機和真機系統(tǒng)中的測試表明,該軟件實現(xiàn)了系統(tǒng)需求的基本功能。
學生通過手機APP進行用戶的登錄注冊,如圖6所示。在新用戶注冊時被要求必須調用攝像頭拍攝一張個人照片;成功注冊并登錄的學生用戶,將可以進行相應課程的簽到,如圖6(c)所示。在簽到過程中,APP會調用手機攝像頭對鏡頭捕捉到的畫面進行實時分析與檢測。當捕捉到的人臉與學生用戶注冊時的人臉特征的匹配度達到閾值時,則該學生簽到成功;否則,失敗。

圖6 實現(xiàn)效果
人臉識別盡管在近幾年飛速發(fā)展,但是將此技術與課堂簽到相結合的應用產品目前市場上較少。本文通過對目前較流行的人臉識別算法進行學習研究,設計實現(xiàn)了一款界面簡潔、易于操作、識別精度高的課堂簽到APP,借助人臉識別技術解決了長久以來因為傳統(tǒng)課堂簽到方式帶來的問題。經過測試,本款APP操作便捷、簽到精確,節(jié)省了高校辦公中紙制品的消耗,對環(huán)境保護起到了積極作用。