譚 敏,鄧永志,蘭 紅
(江西理工大學(xué) 信息工程學(xué)院,江西 贛州 341000)
上課簽到是學(xué)校在進(jìn)行教學(xué)管理和學(xué)生成績審核中必不可少的手段之一。常見的簽到方式主要包括紙質(zhì)簽到表、指紋打卡機(jī)和IC卡刷卡機(jī)[1]等。隨著科技的不斷發(fā)展,部分高校推出了新型的簽到方式。例如,英國郡伊利市的一所社區(qū)學(xué)院使用紅外線掃描技術(shù)進(jìn)行學(xué)生簽到[2]。相比后面的幾種簽到方式,出于成本考慮,目前大多數(shù)高校使用的還是紙質(zhì)簽到表[3]。紙質(zhì)簽到雖然簡單、成本較低,但是針對(duì)學(xué)生較多的情況不僅耗費(fèi)課堂時(shí)間,而且學(xué)生極易作弊。此外,每年打印簽到表的紙張消耗也為此方法帶來了環(huán)保方面的問題。因此,設(shè)計(jì)一種成本低、防作弊且環(huán)境友好型簽到模式具有重要的現(xiàn)實(shí)意義。
人臉識(shí)別技術(shù)是指利用生物信息,比較人臉的視覺特征,從而進(jìn)行身份鑒別的技術(shù)。它是一項(xiàng)研究較為熱門的計(jì)算機(jī)領(lǐng)域技術(shù)[4]。近幾年,在國內(nèi)更是掀起了一股人臉識(shí)別技術(shù)熱潮,從火車站刷臉安檢閘機(jī)到門禁刷臉,從各類手機(jī)美顏軟件到支付寶刷臉支付,人臉識(shí)別無不證明著它的強(qiáng)大。深度學(xué)習(xí)、圖像處理、計(jì)算機(jī)視覺等技術(shù)的日漸火熱,也推動(dòng)著人臉識(shí)別技術(shù)的快速發(fā)展,未來必將是人工智能的時(shí)代。因此,人臉識(shí)別技術(shù)的學(xué)習(xí)與研究顯得尤為重要。
Android[5]是基于Linux的開源操作系統(tǒng),主要應(yīng)用于移動(dòng)設(shè)備,目前已是市場占有率最大的手機(jī)操作系統(tǒng),擁有數(shù)量龐大的用戶群。由于其開源的優(yōu)勢,在各大手機(jī)廠商及開發(fā)者的合力下,Android現(xiàn)已更新到最新的8.0版本,具備更加精美的界面,更適應(yīng)用戶的需求。
本文著重研究基于Android平臺(tái)的人臉識(shí)別技術(shù),以Android Studio為開發(fā)平臺(tái),利用人臉識(shí)別中的相關(guān)技術(shù),設(shè)計(jì)實(shí)現(xiàn)一款以人臉識(shí)別為主的學(xué)生簽到APP,且APP同時(shí)包含生活、學(xué)習(xí)等其他輔助功能。
人臉簽到作為APP的核心功能,使用了當(dāng)下最流行的人臉識(shí)別算法進(jìn)行實(shí)現(xiàn)。它主要包括兩個(gè)方面,一是學(xué)生注冊(cè)賬戶時(shí)的人臉信息采集,包括檢測定位與特征提?。欢菍W(xué)生上課簽到時(shí)的人臉信息匹配。
結(jié)合人臉識(shí)別技術(shù)的考勤簽到APP的總體設(shè)計(jì)與實(shí)現(xiàn)流程,如圖1所示。
圖1 人臉識(shí)別技術(shù)實(shí)現(xiàn)流程
(1)人臉采集:學(xué)生利用手機(jī)攝像頭拍照,向服務(wù)器上傳一張真實(shí)的人臉照片作為注冊(cè)的輸入數(shù)據(jù);對(duì)上傳的圖像進(jìn)行預(yù)處理,消除部分因光照不均勻等因素引起的噪聲;從預(yù)處理后的圖像中提取人臉特征值,將特征值組合成特征向量保存在后臺(tái)服務(wù)器。
(2)數(shù)據(jù)匹配與處理:考勤簽到時(shí)登錄賬戶,選擇APP中對(duì)應(yīng)課程的簽到功能,打開相機(jī)再次拍照,實(shí)時(shí)計(jì)算捕捉到的人臉信息的相關(guān)特征數(shù)據(jù)集,依據(jù)用戶的唯一標(biāo)識(shí)符獲取后臺(tái)中該用戶注冊(cè)時(shí)的人臉特征數(shù)據(jù)集,將這兩個(gè)特征數(shù)據(jù)集進(jìn)行匹配,得到滿足預(yù)設(shè)閾值范圍的相似度,從而確定是否為同一用戶。
APP使用的人臉識(shí)別技術(shù)主要細(xì)分為三步。①人臉檢測與定位:以手機(jī)拍攝的圖像為輸入,判斷當(dāng)前圖像中是否有人臉信息,如果存在人臉,則將人臉以最小外接矩形標(biāo)記。②人臉特征提取:將定位到的人臉圖像作為輸入,采用紋理識(shí)別算法提取圖像中的紋理特征,將紋理特征進(jìn)行壓縮編碼形成以“.dat”的二進(jìn)制數(shù)據(jù)文件保存于數(shù)據(jù)庫中。③人臉匹配:利用手機(jī)攝像頭捕捉的實(shí)時(shí)圖像經(jīng)過①、②的處理獲得的特征數(shù)據(jù),與數(shù)據(jù)庫中對(duì)應(yīng)的人臉特征文件對(duì)比、計(jì)算相似度,若相似度在置信區(qū)間內(nèi),則認(rèn)為人臉匹配成功。
采用的人臉識(shí)別技術(shù)的功能調(diào)用時(shí)序圖,如圖2所示。
人臉信息檢測定位主要是借助一個(gè)滑動(dòng)窗口對(duì)圖像進(jìn)行掃描。在此過程中,通過提取窗口內(nèi)圖像特征信息,并將所提取的特征信息作為輸入,利用合適的分類器判別該窗口是否為人臉區(qū)域。
人臉檢測與定位的關(guān)鍵是對(duì)分類器的選擇,本文采用的是人臉檢測經(jīng)典算法Viola_Jones[6]。
算法主要過程如下。
圖2 人臉簽到技術(shù)功能調(diào)用時(shí)序圖
(1)利用Haar特征描述人臉的共有屬性。Haar特征通過像素分模塊求差值,反映了圖像的灰度變化,用來體現(xiàn)圖像的局部灰度特性。將其運(yùn)用到矩形區(qū)域時(shí),通過算子構(gòu)成描述人臉共用屬性的Haar-like特征。
其中A、B、C三類算子分別代表了二鄰接、三鄰接和四鄰接矩形,如圖3所示。
圖3 三類算子對(duì)應(yīng)矩形
(2)建立積分圖像特征,獲取矩形特征。為了降低遍歷圖像所有像素點(diǎn)的開銷,引入積分圖像。原理是對(duì)圖像中的任何一點(diǎn),該點(diǎn)的積分圖像值等于位于該點(diǎn)左上角的所有像素之和,即:
且積分圖像應(yīng)滿足關(guān)系:
其中I表示積分圖像,f表示原灰度圖像,x、y、x'、y'表示像素位置。
如圖4所示,利用積分圖像求取矩形ABCD像素和的表達(dá)式:
其中I(D)代表矩形acDd的像素和,I(C)代表矩形abCd的像素和,I(B)表示矩形acBe的像素和,I(A)表示矩形abAe的像素和。
圖4 積分圖像求矩形像素和
(3)利用Adaboost算法進(jìn)行訓(xùn)練。AdaBoost將一系列弱分類器通過線性組合構(gòu)成一個(gè)強(qiáng)分類器,可以同時(shí)進(jìn)行特征選擇和分類器訓(xùn)練。
h(x)即合成的強(qiáng)分類器,hi(x)為弱分類器,本質(zhì)是一個(gè)閾值函數(shù):
其中θi表示閾值,Si∈{-1,1},αi在訓(xùn)練中確定。
(4)建立層級(jí)分類器。層級(jí)分類器每層包含一個(gè)強(qiáng)分類器,所有矩形特征劃分為若干組。將每組的矩形特征用在每層上,判斷輸入是否為人臉。不是,則舍棄;是,則進(jìn)入下一層更復(fù)雜的分類器中進(jìn)行判別。流程如圖5所示。
圖5 層級(jí)分類器實(shí)現(xiàn)原理
OpenCV已經(jīng)將Viola-Jones算法寫入函數(shù)庫,可以直接通過函數(shù)調(diào)用實(shí)現(xiàn)該算法。
人臉特征提取是針對(duì)定位到的人臉區(qū)域提取該區(qū)域的紋理特征構(gòu)成特征數(shù)據(jù)集。本文采用的是基于結(jié)構(gòu)法的紋理特征描述算子LBP。它是借助局部領(lǐng)域定義的紋理測度,具有尺度不變性、旋轉(zhuǎn)不變性和計(jì)算復(fù)雜度低等優(yōu)點(diǎn)。
LBP局部二值描述算子的表示形式為:
式中的(xc,yc)代表n×n領(lǐng)域的中心元素,它的像素值為ic,ip代表領(lǐng)域內(nèi)其他像素值,s(x)代表一維階躍函數(shù)。
用戶通過使用在Android端的注冊(cè)功能,輸入一張用戶的頭像,再調(diào)用人臉識(shí)別算法獲取去人臉特征數(shù)據(jù)。在Android端對(duì)特征數(shù)據(jù)進(jìn)行Base64編碼,將其轉(zhuǎn)化為二進(jìn)制的數(shù)據(jù)流,最后上傳到服務(wù)器。
實(shí)現(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;
人臉信息匹配策略是以歐式距離為依據(jù),比較兩個(gè)人臉特征數(shù)據(jù)集的相似程度。
相似度度量函數(shù)為:
其中d(x,y)表示兩個(gè)數(shù)據(jù)集的歐式距離,sim(x,y)表示兩數(shù)據(jù)集的相似度。
用戶通過點(diǎn)擊當(dāng)前課程的簽到功能進(jìn)行簽到,調(diào)用攝像頭獲取實(shí)時(shí)用戶圖像。此時(shí),Android端會(huì)在本地對(duì)實(shí)時(shí)圖像進(jìn)行人臉定位和特征提取操作。同時(shí),Android端會(huì)向服務(wù)器發(fā)送請(qǐng)求,獲取該用戶注冊(cè)時(shí)的人臉特征數(shù)據(jù),然后求這兩種特征數(shù)據(jù)的相似度。若該相似度在置信區(qū)間內(nèi),則認(rèn)為是同一人,給出簽到成功的提示;否則,簽到失敗。
實(shí)現(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
依據(jù)上述總體設(shè)計(jì)和技術(shù)實(shí)現(xiàn)理念分析,本軟件在Android系統(tǒng)平臺(tái)下采用Java開發(fā)語言實(shí)現(xiàn)[7-8]。采用C++與OpenCV相結(jié)合實(shí)現(xiàn)人臉識(shí)別技術(shù)的核心算法,借助Android NDK[5]以供客戶端進(jìn)行調(diào)用。在虛擬機(jī)和真機(jī)系統(tǒng)中的測試表明,該軟件實(shí)現(xiàn)了系統(tǒng)需求的基本功能。
學(xué)生通過手機(jī)APP進(jìn)行用戶的登錄注冊(cè),如圖6所示。在新用戶注冊(cè)時(shí)被要求必須調(diào)用攝像頭拍攝一張個(gè)人照片;成功注冊(cè)并登錄的學(xué)生用戶,將可以進(jìn)行相應(yīng)課程的簽到,如圖6(c)所示。在簽到過程中,APP會(huì)調(diào)用手機(jī)攝像頭對(duì)鏡頭捕捉到的畫面進(jìn)行實(shí)時(shí)分析與檢測。當(dāng)捕捉到的人臉與學(xué)生用戶注冊(cè)時(shí)的人臉特征的匹配度達(dá)到閾值時(shí),則該學(xué)生簽到成功;否則,失敗。
圖6 實(shí)現(xiàn)效果
人臉識(shí)別盡管在近幾年飛速發(fā)展,但是將此技術(shù)與課堂簽到相結(jié)合的應(yīng)用產(chǎn)品目前市場上較少。本文通過對(duì)目前較流行的人臉識(shí)別算法進(jìn)行學(xué)習(xí)研究,設(shè)計(jì)實(shí)現(xiàn)了一款界面簡潔、易于操作、識(shí)別精度高的課堂簽到APP,借助人臉識(shí)別技術(shù)解決了長久以來因?yàn)閭鹘y(tǒng)課堂簽到方式帶來的問題。經(jīng)過測試,本款A(yù)PP操作便捷、簽到精確,節(jié)省了高校辦公中紙制品的消耗,對(duì)環(huán)境保護(hù)起到了積極作用。