戴瑞婷 ,莫李思 ,2, 黃祉衡
(1.電子科技大學,四川 成都 610054;2.中國電子科技集團公司第三十研究所,四川 成都 610041)
為保障會議、活動的正常開展,簽到系統已經成為高校、企事業單位日常管理不可缺少的組成部分,然而,傳統的人工簽到方式早已經被淘汰,人們轉而研究管理方便、時效性高、準確性高的智能化簽到方式。近年來,應用比較廣泛的是打卡簽到、指紋簽到、人臉識別簽到等[1]。這些簽到方式在一定程度上解決了人工簽到的繁雜性、準確率低等問題,但仍然存在很多不足,如打卡簽到并不能避免代簽到的情況發生;指紋簽到和人臉識別簽到又因設備昂貴而使用受限,并且在會場人數多的情況下,設備攜帶不便、設備數量不足、簽到反應時間長的問題更加凸顯。針對這些問題,為保證簽到的時效性、準確性,本文設計了一種基于移動終端Android系統,并融合掃碼認證和人臉識別的簽到系統,運用當前使用最廣泛的移動手機終端作為簽到終端,有效地解決了設備不足、攜帶不便的問題[2-3];運用二維碼掃碼的方式確定簽到者身份,簽到者注冊關聯個人信息,產生個人二維碼供管理者掃描,管理系統掃描二維碼自動驗證簽到者身份,驗證通過者跳轉到人臉識別界面,保證了身份的真實性;人臉識別階段則包括活體檢測和人臉識別,避免采用照片、視頻等方式的誤識別情況發生,確保簽到的有效性。
本文所設計的掃碼人臉識別簽到系統主要采用Android手機作為終端,整個掃碼人臉識別分為身份認證階段和活體人臉識別階段,總體流程圖如圖1所示。
服務端可根據活動、會議要求的不同,通過導入或用戶注冊的方式形成參會人員數據庫。簽到者通過手機APP進行信息注冊或關聯,產生個人身份二維碼,供身份認證時使用。當用戶參加會議、活動時,出示身份二維碼,管理者采用手機APP掃碼識別端進行掃碼認證,系統進行二維碼解碼,自動匹配數據庫中該簽到者信息,若匹配成功則進入活體人臉識別階段,否則提示認證失敗。人臉識別階段主要包括人臉識別和活體檢測,本文采用AdaBoost算法進行人臉識別[4],配合基于交互式隨機動作的活體檢測方法,確保簽到者的真實性。
掃碼人臉識別簽到系統的網絡架構如圖2所示,系統包括了簽到移動端、管理移動端、管理PC端、應用服務器、數據庫服務器等。

圖1 總體流程

圖2 網絡架構
移動終端Android手機作為簽到移動端設備,簽到APP根據簽到者、管理者身份的不同,分別具有簽到功能和掃碼驗證功能,而管理PC端具有導入用戶信息、管理用戶信息、統計簽到情況等功能,應用服務器則負責處理二維碼身份認證和活體人臉識別等業務邏輯,系統所有數據存儲于數據庫服務器。
整個掃碼人臉識別簽到系統主要由APP客戶端、管理PC端和服務端組成,APP客戶端面向簽到者和管理者,根據身份的不同,針對簽到者權限的主要功能有:個人信息注冊/關聯、個人信息維護、掃碼人臉識別功能,針對管理者權限的功能有掃碼認證功能、簽到統計功能;管理PC端主要面向管理者,具有用戶信息管理、用戶數據導入導出、用戶信息審核、簽到統計等功能等;服務端則提供掃描認證服務、活體人臉識別服務和數據存儲服務,見圖3。

圖3 功能模塊圖
本系統的核心功能包括掃碼身份認證、人臉識別和活體檢測,本文重點介紹其設計和實現方法。
3.1.1 掃碼身份認證
掃碼身份認證主要用于確保簽到人到會議/活動現場,由現場工作人員(管理者)使用Android手機中的此APP進入掃碼身份認證界面,同時簽到者使用Android手機中的此APP,進入簽到流程,第一步出示個人二維碼,供管理者掃碼認證,若管理者掃碼認證成功,則簽到者簽到流程進入下一步:人臉識別,若失敗則提示身份認證失敗,并返回第一步。二維碼生成流程如圖4所示。
掃碼身份認證的核心技術是二維碼的編碼與解碼。本系統采用QR碼對簽到者信息進行封裝并編碼,并在簽到過程中由服務器進行解碼、驗證工作。二維碼編碼首先對封裝好的數據進行分析,確定編碼字符類型、版本信息和糾錯等級,接著采用既定規則將字符轉換為位流,再將位流轉換為碼字,完成數據編碼,再將生產的糾錯碼字加在數據編碼后,生成糾錯編碼。通過加剩余位的方法,按既定規則將數據和糾錯碼字構造成最終信息,并按規則排列尋像圖像、分隔符、矯正圖形與碼字形成二維碼矩陣。最后,對編碼區域位圖掩模處理,采用8種掩模圖形處理并評價結果,選擇最優結果,生成版本和格式信息,構成符號,即生成最終的二維碼圖像。
二維碼掃碼認證主要由服務器完成二維碼圖像的解碼和驗證,其時序圖如圖5所示。
當應用服務器接收到二維碼圖像后,會對二維碼進行解碼、識別,其解碼流程如圖6所示。
二維碼解碼流程:首先,采用圖像處理方法對二維碼進行處理,包括識別深/淺模塊、格式信息譯碼、確定版本、清除掩模,接著計算伴隨多項式值、求錯誤位置多項式和錯誤位置多項式的根,再求出錯誤值并對碼字進行錯誤糾正,從而得出二維碼解碼輸出。

圖4 二維碼生成流程

圖5 二維碼掃碼認證時序圖

圖6 二維碼解碼流程圖
3.1.2 人臉識別算法
手機app使用的人臉識別技術主要細分為幾個步驟。(1)人臉區域范圍的查找:使用攝像頭拍攝的圖像為輸入,判斷當前圖像中是否有人臉信息,如果人臉在指定的區域范圍中,則標記出來。(2)人臉特征的提?。簩擞洺鰜淼娜四樳M行特征分析和定位,并最終生成一個臉部的模型。(3)人臉檢測的確認:基于該模型,檢測是否為真實的人體而非圖片或者視頻,并與服務器的模型做比對完成確認工作[5]。
人臉區域范圍的查找是人臉分類鑒別必不可少的前提環節,要對人臉圖像進行分類鑒別,首先需要找到圖像中的臉部區域部分。而實際中拍攝人臉圖像的過程中通常會由于背景環境或焦距等因素,混雜一些非人臉、多個人臉的特征,此時需要對所拍攝圖像的進行人臉區域檢測來提取人臉區域,最后分類鑒別只會針對人臉部分來進行。該環節實際上就是區分出人臉部位的特征與其他非人臉物體的特征并將指定范圍的人臉區域部分提取出來。人臉檢測環節直接影響著人臉分類識別環節,該環節檢測準確,后期人臉分類識別環節的效率和精度也會得到提高。
目前最常見的人臉定位技術是使用Adaboost算法識別[6],把所指定的區域分為若干個矩形區域,再對每個矩形區域進行Haar特征分析。
Haar特征分析也就是矩形特征分析,作為Adaboost算法的輸入,Adaboost算法計算并判斷出人臉的區域,將整張圖像的人臉部位進行提取,將非人臉部位的部分給丟棄。人臉有著一些顯著的邊緣特征,矩形特征就對這些邊緣輪廓比較敏感,例如當分析眼睛的時候,雙眼在水平方向上和垂直方向上,眼珠的顏色會深于眼珠周圍的顏色;嘴巴的顏色也是類似的,會比嘴巴周圍顏色更深。矩形特征就可以更容易的鎖定這些眼睛、嘴巴等人臉主要區域。矩形特征中A[-1,1]、B[-1,1,-1]算子代表的二鄰接、三鄰接矩形,如圖7所示,通過原始矩形特征,定位人臉的主要區域。

圖7 原始矩形特征
在進行人臉檢測時,既需要考慮算法的運行速度,也需要考慮算法的準確度。本系統使用二維碼驗證后,可以獲取登錄用戶注冊在服務器上的目標樣本,再通過矩形區域的方式作為登錄用戶特征來進行檢測。
Haar特征獲取完成之后,需要對Haar特征值進行計算,為了提高檢測的速度,使用積分圖計算特征的值是一種常用的方法。定義其積分圖ii(x,y)為:

即在(x,y)位置上,對應的積分圖中的像素為該位置的左上角所有的像素的之和。
每一行都遞歸計算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。對于彩色圖像,可以先按照人臉彩色空間將其轉化為灰度取值。

其中,z(x,y)為點(x,y)及其y方向向上所有原始圖像之和,稱為“列積分和”,可以定義為:并定義s(x,0)=0,ii(0,y)=0。
Adaboost算法計算和判斷出人臉的區域,并提取人臉部位后,將每一次提取到的人臉部位樣本訓練出一個弱分類器,每次迭代中的樣本比重需要由上一次來確定,第i次的樣本比重由第i-1次的樣本來確定。每次把分類錯誤的樣本的權重值提高,這樣可以突出分類錯誤的樣本同時得到新的樣本分布并訓練得到新的弱分類器。Adaboost采用的迭代算法,簡單地講就是對訓練樣本進行權重重新評估后的再進行循環訓練,最初的樣本權重設置是一致的最終經過提升的強分類器。
Adaboost算法還采用了一種級聯判斷的方式,通過將多個強分類器串聯起來組成一個級聯分類器后,連續對輸入進行判斷,對于需要提取人臉的圖像,如果判斷出是人臉的矩形區域就讓其通過當前的強分類器進入下一個強分類器,否則直接將其丟棄掉。由于串起來的各個分類器的精度要求是逐漸增加的,通過這些強分類器的層層過濾,大大的加快了分類檢測的速度,而且每一級的強分類器對上一級通過的矩形區域特征再一次進行分類判斷,大大減少了偽正樣本的通過率,即提高了檢測的正確率。
3.1.3 活體檢測
檢測出正確的人臉后,采用基于交互式隨機動作的活體檢測方法來防止簽到者以照片、視頻等方式冒充簽到,被識別者需要通過系統給出的指示完成一些指定的動作,如眨眼、張口、搖頭等。這種基于交互式隨機動作的活體檢測的方法就是對人臉的檢測、定位、跟蹤和特征提取后,再判斷是否按照系統要求做出了正確的動作。需要保證可以檢測到人臉的實時動作,完成對被識別者人臉的檢測、跟蹤和對齊;同時在指定時間內,對用戶發出動作指令,被識別者的認證動作順序不同,從而最大限度地避免活體檢測被攻破的可能。如果被識別者人臉動作合法則檢測通過,人臉跟蹤失敗或者動作驗證失敗均需要重新進行簽到,保證被識別者無法使用照片或模型進行冒充[7]。每種動作需要在指定的時間內完成,保證動作無法事先錄制好。從邏輯設計上最大限度地保證了使用的簡便性和系統可靠性,本文結合活體檢測手段完成對人臉檢測的確認。
算法實現:首先獲取到人臉位置坐標,使用AdaBoost人臉檢測器檢測出人臉在圖像中的位置坐標信息。然后在此區域用人臉對齊算法,獲取人臉五官關鍵點的特征點坐標:
提取給定特征點Pi∈P的SIFT特征或HOG特征:

其中,P0為算法自動提取到的人臉五官關鍵點的特征點初始坐標,P*為人工標定的實際人臉五官關鍵點的特征點坐標,ΔP為P0與P*的偏移量,H為SIFT特征提取函數。
特征點根據確定下來以后就可以通過這些特征點來估計人臉姿態。比如眼睛,使用內眼角為起點1,分別編號特征點位置1內眼角,特征點位置2眼睛上方,特征點位置3外眼角,特征點位置4外眼角,計算當前眼睛的寬度和高度來判斷眼睛的狀態:

其中,Pi(x)表示特征點i的橫坐標值,Pi(y)表示特征點i的縱坐標值,J(P)為眼睛的高寬比例。根據J(P)可以確認當前眼睛的睜開、閉合狀態。
采用人工標注方式標示人臉范圍的特征點的位置,然后使用人臉檢測器定位范圍內的人臉框,根據已標注的人臉框坐標信息確定所有特征點的坐標平均值,如此就得到了一個平均人臉特征點的位置,將這個平均位置點記錄為人臉特征點位置的初始值。根據指定的動作,取得的人臉特征點位置應該在某個閾值之內,這樣眼睛和嘴巴的睜開或閉合狀態都可以通過這個原理估計得出。從而確定識別者,通過驗證。
基于Android的掃碼人臉識別簽到系統采用Java語言實現,其中人臉檢測模塊與活體檢測模塊采用了NDK技術,結合OpenCV庫[8]完成了核心視覺算法的實現,簽到主要實現圖如圖8所示。

圖8 系統實現圖
圖8(a)是簽到者出示個人身份二維碼,當管理者掃碼后,系統自動檢測簽到者身份信息,若身份認證成功,則返回人臉信息并提示進入下一步人臉檢測,即圖8(b):人臉識別,此時系統調用手機攝像頭獲取人臉頭像,并進行實時處理,計算檢測到的人臉與身份認證返回的人臉信息是否匹配,當匹配值在閾值范圍內時,代表人臉匹配,進入下一步:活體檢測,如圖8(c),通過眨眼、張嘴等隨機動作的識別,檢測人臉識別中的人像是否為活體,若三步都成功,則提示用戶簽到成功,如圖8(d)所示,否則,從失敗步驟跳轉回簽到界面,提示簽到失敗。
針對當前高校、企事業單位會議、活動簽到所存在的操作繁雜、準確率低、代簽頻繁等問題,本文設計實現了基于掃碼認證和人臉識別的簽到系統,此系統采用當前流行的Android手機作為簽到終端,有效地解決了簽到終端設備昂貴、不易攜帶等問題;采用掃碼身份認證與人臉活體識別相結合的方式,簽到APP實現服務端掃碼身份認證與終端人臉活體識別,將視覺識別核心算法移植到Android客戶端,保證了多臺設備并行高效處理,使簽到的實時性高,雙重認證的結合保證了簽到的真實性、準確性。經過實現與測試,該簽到系統操作方便、簽到準確、時效性高,具有一定的推廣應用價值。