戴瑞婷 ,莫李思 ,2, 黃祉衡
(1.電子科技大學(xué),四川 成都 610054;2.中國電子科技集團公司第三十研究所,四川 成都 610041)
為保障會議、活動的正常開展,簽到系統(tǒng)已經(jīng)成為高校、企事業(yè)單位日常管理不可缺少的組成部分,然而,傳統(tǒng)的人工簽到方式早已經(jīng)被淘汰,人們轉(zhuǎn)而研究管理方便、時效性高、準(zhǔn)確性高的智能化簽到方式。近年來,應(yīng)用比較廣泛的是打卡簽到、指紋簽到、人臉識別簽到等[1]。這些簽到方式在一定程度上解決了人工簽到的繁雜性、準(zhǔn)確率低等問題,但仍然存在很多不足,如打卡簽到并不能避免代簽到的情況發(fā)生;指紋簽到和人臉識別簽到又因設(shè)備昂貴而使用受限,并且在會場人數(shù)多的情況下,設(shè)備攜帶不便、設(shè)備數(shù)量不足、簽到反應(yīng)時間長的問題更加凸顯。針對這些問題,為保證簽到的時效性、準(zhǔn)確性,本文設(shè)計了一種基于移動終端Android系統(tǒng),并融合掃碼認證和人臉識別的簽到系統(tǒng),運用當(dāng)前使用最廣泛的移動手機終端作為簽到終端,有效地解決了設(shè)備不足、攜帶不便的問題[2-3];運用二維碼掃碼的方式確定簽到者身份,簽到者注冊關(guān)聯(lián)個人信息,產(chǎn)生個人二維碼供管理者掃描,管理系統(tǒng)掃描二維碼自動驗證簽到者身份,驗證通過者跳轉(zhuǎn)到人臉識別界面,保證了身份的真實性;人臉識別階段則包括活體檢測和人臉識別,避免采用照片、視頻等方式的誤識別情況發(fā)生,確保簽到的有效性。
本文所設(shè)計的掃碼人臉識別簽到系統(tǒng)主要采用Android手機作為終端,整個掃碼人臉識別分為身份認證階段和活體人臉識別階段,總體流程圖如圖1所示。
服務(wù)端可根據(jù)活動、會議要求的不同,通過導(dǎo)入或用戶注冊的方式形成參會人員數(shù)據(jù)庫。簽到者通過手機APP進行信息注冊或關(guān)聯(lián),產(chǎn)生個人身份二維碼,供身份認證時使用。當(dāng)用戶參加會議、活動時,出示身份二維碼,管理者采用手機APP掃碼識別端進行掃碼認證,系統(tǒng)進行二維碼解碼,自動匹配數(shù)據(jù)庫中該簽到者信息,若匹配成功則進入活體人臉識別階段,否則提示認證失敗。人臉識別階段主要包括人臉識別和活體檢測,本文采用AdaBoost算法進行人臉識別[4],配合基于交互式隨機動作的活體檢測方法,確保簽到者的真實性。
掃碼人臉識別簽到系統(tǒng)的網(wǎng)絡(luò)架構(gòu)如圖2所示,系統(tǒng)包括了簽到移動端、管理移動端、管理PC端、應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器等。
圖1 總體流程
圖2 網(wǎng)絡(luò)架構(gòu)
移動終端Android手機作為簽到移動端設(shè)備,簽到APP根據(jù)簽到者、管理者身份的不同,分別具有簽到功能和掃碼驗證功能,而管理PC端具有導(dǎo)入用戶信息、管理用戶信息、統(tǒng)計簽到情況等功能,應(yīng)用服務(wù)器則負責(zé)處理二維碼身份認證和活體人臉識別等業(yè)務(wù)邏輯,系統(tǒng)所有數(shù)據(jù)存儲于數(shù)據(jù)庫服務(wù)器。
整個掃碼人臉識別簽到系統(tǒng)主要由APP客戶端、管理PC端和服務(wù)端組成,APP客戶端面向簽到者和管理者,根據(jù)身份的不同,針對簽到者權(quán)限的主要功能有:個人信息注冊/關(guān)聯(lián)、個人信息維護、掃碼人臉識別功能,針對管理者權(quán)限的功能有掃碼認證功能、簽到統(tǒng)計功能;管理PC端主要面向管理者,具有用戶信息管理、用戶數(shù)據(jù)導(dǎo)入導(dǎo)出、用戶信息審核、簽到統(tǒng)計等功能等;服務(wù)端則提供掃描認證服務(wù)、活體人臉識別服務(wù)和數(shù)據(jù)存儲服務(wù),見圖3。
圖3 功能模塊圖
本系統(tǒng)的核心功能包括掃碼身份認證、人臉識別和活體檢測,本文重點介紹其設(shè)計和實現(xiàn)方法。
3.1.1 掃碼身份認證
掃碼身份認證主要用于確保簽到人到會議/活動現(xiàn)場,由現(xiàn)場工作人員(管理者)使用Android手機中的此APP進入掃碼身份認證界面,同時簽到者使用Android手機中的此APP,進入簽到流程,第一步出示個人二維碼,供管理者掃碼認證,若管理者掃碼認證成功,則簽到者簽到流程進入下一步:人臉識別,若失敗則提示身份認證失敗,并返回第一步。二維碼生成流程如圖4所示。
掃碼身份認證的核心技術(shù)是二維碼的編碼與解碼。本系統(tǒng)采用QR碼對簽到者信息進行封裝并編碼,并在簽到過程中由服務(wù)器進行解碼、驗證工作。二維碼編碼首先對封裝好的數(shù)據(jù)進行分析,確定編碼字符類型、版本信息和糾錯等級,接著采用既定規(guī)則將字符轉(zhuǎn)換為位流,再將位流轉(zhuǎn)換為碼字,完成數(shù)據(jù)編碼,再將生產(chǎn)的糾錯碼字加在數(shù)據(jù)編碼后,生成糾錯編碼。通過加剩余位的方法,按既定規(guī)則將數(shù)據(jù)和糾錯碼字構(gòu)造成最終信息,并按規(guī)則排列尋像圖像、分隔符、矯正圖形與碼字形成二維碼矩陣。最后,對編碼區(qū)域位圖掩模處理,采用8種掩模圖形處理并評價結(jié)果,選擇最優(yōu)結(jié)果,生成版本和格式信息,構(gòu)成符號,即生成最終的二維碼圖像。
二維碼掃碼認證主要由服務(wù)器完成二維碼圖像的解碼和驗證,其時序圖如圖5所示。
當(dāng)應(yīng)用服務(wù)器接收到二維碼圖像后,會對二維碼進行解碼、識別,其解碼流程如圖6所示。
二維碼解碼流程:首先,采用圖像處理方法對二維碼進行處理,包括識別深/淺模塊、格式信息譯碼、確定版本、清除掩模,接著計算伴隨多項式值、求錯誤位置多項式和錯誤位置多項式的根,再求出錯誤值并對碼字進行錯誤糾正,從而得出二維碼解碼輸出。
圖4 二維碼生成流程
圖5 二維碼掃碼認證時序圖
圖6 二維碼解碼流程圖
3.1.2 人臉識別算法
手機app使用的人臉識別技術(shù)主要細分為幾個步驟。(1)人臉區(qū)域范圍的查找:使用攝像頭拍攝的圖像為輸入,判斷當(dāng)前圖像中是否有人臉信息,如果人臉在指定的區(qū)域范圍中,則標(biāo)記出來。(2)人臉特征的提取:將標(biāo)記出來的人臉進行特征分析和定位,并最終生成一個臉部的模型。(3)人臉檢測的確認:基于該模型,檢測是否為真實的人體而非圖片或者視頻,并與服務(wù)器的模型做比對完成確認工作[5]。
人臉區(qū)域范圍的查找是人臉分類鑒別必不可少的前提環(huán)節(jié),要對人臉圖像進行分類鑒別,首先需要找到圖像中的臉部區(qū)域部分。而實際中拍攝人臉圖像的過程中通常會由于背景環(huán)境或焦距等因素,混雜一些非人臉、多個人臉的特征,此時需要對所拍攝圖像的進行人臉區(qū)域檢測來提取人臉區(qū)域,最后分類鑒別只會針對人臉部分來進行。該環(huán)節(jié)實際上就是區(qū)分出人臉部位的特征與其他非人臉物體的特征并將指定范圍的人臉區(qū)域部分提取出來。人臉檢測環(huán)節(jié)直接影響著人臉分類識別環(huán)節(jié),該環(huán)節(jié)檢測準(zhǔn)確,后期人臉分類識別環(huán)節(jié)的效率和精度也會得到提高。
目前最常見的人臉定位技術(shù)是使用Adaboost算法識別[6],把所指定的區(qū)域分為若干個矩形區(qū)域,再對每個矩形區(qū)域進行Haar特征分析。
Haar特征分析也就是矩形特征分析,作為Adaboost算法的輸入,Adaboost算法計算并判斷出人臉的區(qū)域,將整張圖像的人臉部位進行提取,將非人臉部位的部分給丟棄。人臉有著一些顯著的邊緣特征,矩形特征就對這些邊緣輪廓比較敏感,例如當(dāng)分析眼睛的時候,雙眼在水平方向上和垂直方向上,眼珠的顏色會深于眼珠周圍的顏色;嘴巴的顏色也是類似的,會比嘴巴周圍顏色更深。矩形特征就可以更容易的鎖定這些眼睛、嘴巴等人臉主要區(qū)域。矩形特征中A[-1,1]、B[-1,1,-1]算子代表的二鄰接、三鄰接矩形,如圖7所示,通過原始矩形特征,定位人臉的主要區(qū)域。
圖7 原始矩形特征
在進行人臉檢測時,既需要考慮算法的運行速度,也需要考慮算法的準(zhǔn)確度。本系統(tǒng)使用二維碼驗證后,可以獲取登錄用戶注冊在服務(wù)器上的目標(biāo)樣本,再通過矩形區(qū)域的方式作為登錄用戶特征來進行檢測。
Haar特征獲取完成之后,需要對Haar特征值進行計算,為了提高檢測的速度,使用積分圖計算特征的值是一種常用的方法。定義其積分圖ii(x,y)為:
即在(x,y)位置上,對應(yīng)的積分圖中的像素為該位置的左上角所有的像素的之和。
每一行都遞歸計算z(x,y),每一行首先都是計算z,計算完畢之后在每一列都計算ii(x,y)。這樣掃描下去就可以計算積分圖如公式2、3所示,其中令z(x,-1)=0,ii(-1,y)=0,s(x,-1)=0,ii(-1,y)=0為 初始值。
i(x′,y′)為點 (x′,y′)處的“原始圖”,是此點的顏色值;對于灰度圖像,其值為0~255。對于彩色圖像,可以先按照人臉彩色空間將其轉(zhuǎn)化為灰度取值。
其中,z(x,y)為點(x,y)及其y方向向上所有原始圖像之和,稱為“列積分和”,可以定義為:并定義s(x,0)=0,ii(0,y)=0。
Adaboost算法計算和判斷出人臉的區(qū)域,并提取人臉部位后,將每一次提取到的人臉部位樣本訓(xùn)練出一個弱分類器,每次迭代中的樣本比重需要由上一次來確定,第i次的樣本比重由第i-1次的樣本來確定。每次把分類錯誤的樣本的權(quán)重值提高,這樣可以突出分類錯誤的樣本同時得到新的樣本分布并訓(xùn)練得到新的弱分類器。Adaboost采用的迭代算法,簡單地講就是對訓(xùn)練樣本進行權(quán)重重新評估后的再進行循環(huán)訓(xùn)練,最初的樣本權(quán)重設(shè)置是一致的最終經(jīng)過提升的強分類器。
Adaboost算法還采用了一種級聯(lián)判斷的方式,通過將多個強分類器串聯(lián)起來組成一個級聯(lián)分類器后,連續(xù)對輸入進行判斷,對于需要提取人臉的圖像,如果判斷出是人臉的矩形區(qū)域就讓其通過當(dāng)前的強分類器進入下一個強分類器,否則直接將其丟棄掉。由于串起來的各個分類器的精度要求是逐漸增加的,通過這些強分類器的層層過濾,大大的加快了分類檢測的速度,而且每一級的強分類器對上一級通過的矩形區(qū)域特征再一次進行分類判斷,大大減少了偽正樣本的通過率,即提高了檢測的正確率。
3.1.3 活體檢測
檢測出正確的人臉后,采用基于交互式隨機動作的活體檢測方法來防止簽到者以照片、視頻等方式冒充簽到,被識別者需要通過系統(tǒng)給出的指示完成一些指定的動作,如眨眼、張口、搖頭等。這種基于交互式隨機動作的活體檢測的方法就是對人臉的檢測、定位、跟蹤和特征提取后,再判斷是否按照系統(tǒng)要求做出了正確的動作。需要保證可以檢測到人臉的實時動作,完成對被識別者人臉的檢測、跟蹤和對齊;同時在指定時間內(nèi),對用戶發(fā)出動作指令,被識別者的認證動作順序不同,從而最大限度地避免活體檢測被攻破的可能。如果被識別者人臉動作合法則檢測通過,人臉跟蹤失敗或者動作驗證失敗均需要重新進行簽到,保證被識別者無法使用照片或模型進行冒充[7]。每種動作需要在指定的時間內(nèi)完成,保證動作無法事先錄制好。從邏輯設(shè)計上最大限度地保證了使用的簡便性和系統(tǒng)可靠性,本文結(jié)合活體檢測手段完成對人臉檢測的確認。
算法實現(xiàn):首先獲取到人臉位置坐標(biāo),使用AdaBoost人臉檢測器檢測出人臉在圖像中的位置坐標(biāo)信息。然后在此區(qū)域用人臉對齊算法,獲取人臉五官關(guān)鍵點的特征點坐標(biāo):
提取給定特征點Pi∈P的SIFT特征或HOG特征:
其中,P0為算法自動提取到的人臉五官關(guān)鍵點的特征點初始坐標(biāo),P*為人工標(biāo)定的實際人臉五官關(guān)鍵點的特征點坐標(biāo),ΔP為P0與P*的偏移量,H為SIFT特征提取函數(shù)。
特征點根據(jù)確定下來以后就可以通過這些特征點來估計人臉姿態(tài)。比如眼睛,使用內(nèi)眼角為起點1,分別編號特征點位置1內(nèi)眼角,特征點位置2眼睛上方,特征點位置3外眼角,特征點位置4外眼角,計算當(dāng)前眼睛的寬度和高度來判斷眼睛的狀態(tài):
其中,Pi(x)表示特征點i的橫坐標(biāo)值,Pi(y)表示特征點i的縱坐標(biāo)值,J(P)為眼睛的高寬比例。根據(jù)J(P)可以確認當(dāng)前眼睛的睜開、閉合狀態(tài)。
采用人工標(biāo)注方式標(biāo)示人臉范圍的特征點的位置,然后使用人臉檢測器定位范圍內(nèi)的人臉框,根據(jù)已標(biāo)注的人臉框坐標(biāo)信息確定所有特征點的坐標(biāo)平均值,如此就得到了一個平均人臉特征點的位置,將這個平均位置點記錄為人臉特征點位置的初始值。根據(jù)指定的動作,取得的人臉特征點位置應(yīng)該在某個閾值之內(nèi),這樣眼睛和嘴巴的睜開或閉合狀態(tài)都可以通過這個原理估計得出。從而確定識別者,通過驗證。
基于Android的掃碼人臉識別簽到系統(tǒng)采用Java語言實現(xiàn),其中人臉檢測模塊與活體檢測模塊采用了NDK技術(shù),結(jié)合OpenCV庫[8]完成了核心視覺算法的實現(xiàn),簽到主要實現(xiàn)圖如圖8所示。
圖8 系統(tǒng)實現(xiàn)圖
圖8(a)是簽到者出示個人身份二維碼,當(dāng)管理者掃碼后,系統(tǒng)自動檢測簽到者身份信息,若身份認證成功,則返回人臉信息并提示進入下一步人臉檢測,即圖8(b):人臉識別,此時系統(tǒng)調(diào)用手機攝像頭獲取人臉頭像,并進行實時處理,計算檢測到的人臉與身份認證返回的人臉信息是否匹配,當(dāng)匹配值在閾值范圍內(nèi)時,代表人臉匹配,進入下一步:活體檢測,如圖8(c),通過眨眼、張嘴等隨機動作的識別,檢測人臉識別中的人像是否為活體,若三步都成功,則提示用戶簽到成功,如圖8(d)所示,否則,從失敗步驟跳轉(zhuǎn)回簽到界面,提示簽到失敗。
針對當(dāng)前高校、企事業(yè)單位會議、活動簽到所存在的操作繁雜、準(zhǔn)確率低、代簽頻繁等問題,本文設(shè)計實現(xiàn)了基于掃碼認證和人臉識別的簽到系統(tǒng),此系統(tǒng)采用當(dāng)前流行的Android手機作為簽到終端,有效地解決了簽到終端設(shè)備昂貴、不易攜帶等問題;采用掃碼身份認證與人臉活體識別相結(jié)合的方式,簽到APP實現(xiàn)服務(wù)端掃碼身份認證與終端人臉活體識別,將視覺識別核心算法移植到Android客戶端,保證了多臺設(shè)備并行高效處理,使簽到的實時性高,雙重認證的結(jié)合保證了簽到的真實性、準(zhǔn)確性。經(jīng)過實現(xiàn)與測試,該簽到系統(tǒng)操作方便、簽到準(zhǔn)確、時效性高,具有一定的推廣應(yīng)用價值。