胡中堅,馮 晗,陳飛宇,張文強
1(復旦大學 軟件學院,上海 201203)
2(復旦大學 計算機科學技術(shù)學院,上海 201203)
隨著科技的發(fā)展,當今社會用戶身份認證技術(shù)已經(jīng)被廣泛使用,當下如何有效并且準確地對用戶進行身份驗證變得十分重要.傳統(tǒng)身份認證一般包括:一通過密碼等來確認訪問者身份;二通過其擁有的東西對訪問者進行認證,例如鑰匙等.然而隨著技術(shù)的飛速發(fā)展,傳統(tǒng)身份認證的弊端逐漸顯現(xiàn)出來.例如,密碼容易遺忘,鑰匙容易丟失.
為了解決傳統(tǒng)身份認證方法中存在的問題,基于生物特征的身份認證方法逐漸被人們關(guān)注.生物特征是人們與生俱來的特征,其具有唯一性、穩(wěn)定性、方便性等優(yōu)點.人臉識別是當今較為成熟的生物識別技術(shù),在門禁、安檢等諸多領(lǐng)域廣泛使用,具有方便快捷、不易丟失等優(yōu)勢.
隨著人臉識別技術(shù)的廣泛應用,人臉識別系統(tǒng)存在的一些弊端逐漸顯露出來.典型的欺騙手段包括照片欺騙、視頻欺騙等.為了解決這些問題,可以在人臉識別系統(tǒng)中引入唇語識別技術(shù),打造高安全性的身份認證系統(tǒng),以防不法分子的攻擊.
隨著技術(shù)的發(fā)展,國內(nèi)外出現(xiàn)了大量關(guān)于身份認證方法的研究.廣義上的身份認證在日常生活中十分常見,包括在車站內(nèi)查身份證等其實都是屬于身份認證.計算機領(lǐng)域的身份認證常見的包括基于口令的身份認證和基于生物特征的身份認證等[1,2].
文獻[3]中提到了一種基于口令的身份認證方案.該方案提到口令加鹽的方法增強安全性,鹽就是一個字母數(shù)字組合的字符串.數(shù)據(jù)庫中存儲用戶標識userid以及對應的鹽值salt,加鹽hash 后的口令hash (passwd+salt).驗證階段,接收到用戶標識userid和密碼passwd,先到數(shù)據(jù)庫中找到userid 對應的鹽值salt,如果存在該用戶,接下來計算加鹽口令hash (passwd+salt),將計算得到的加鹽口令與數(shù)據(jù)庫里存儲的加鹽口令進行比較,如果相同,則認證成功,否則,認證失敗[3].
基于口令的身份認證方案是較為常見的一種身份認證方案.但該方案有一定的缺點,比如口令容易遺忘,被盜用等.
文獻[4]提到了一種人臉反欺詐認證系統(tǒng)架構(gòu).主要包括人臉檢測對齊,活體檢測和人臉比對匹配.如圖1所示.
圖1 人臉識別身份認證的流程
通過攝像頭獲取用戶人臉,接下來人臉檢測和對齊,輸入到活體檢測模塊進行檢驗,最后是人臉比對匹配.人臉檢測對齊使用MTCNN 網(wǎng)絡(luò),該網(wǎng)絡(luò)包括:PNet (Proposal Network)、R-Net (Refine Network)、ONet (Output Network).活體檢測討論了基于色彩紋理分析和輕量級卷積神經(jīng)網(wǎng)絡(luò)兩種方法[4].人臉識別比對利用FaceNet 網(wǎng)絡(luò)[5,6].
隨著人臉識別和活體檢測技術(shù)在諸多領(lǐng)域被廣泛使用,其逐漸暴露出安全性問題.照片和視頻是常見的攻擊手段[7].照片欺騙是指非法獲取合法用戶的人臉照片攻擊人臉識別系統(tǒng).為了解決照片欺騙等問題,研究人員在人臉識別系統(tǒng)中引入了活體檢測.然而不法分子又通過錄制臉部視頻攻擊人臉識別系統(tǒng).除了偷拍,也可以在各類短視頻APP 里找到用戶本人上傳的視頻,還可以在各類直播平臺里獲取.識別視頻攻擊比識別照片攻擊更加困難,現(xiàn)在有些軟件甚至可以將人臉照片轉(zhuǎn)換成活體視頻! 還有一種是合成人臉的三維模型,這種難度和成本很高,一般很少見.
基于唇語識別的身份認證系統(tǒng)要求用戶在對著攝像頭進行人臉識別的同時讀出指定的驗證碼.系統(tǒng)在驗證用戶身份時,不僅要對人臉識別比對,還要通過唇語識別技術(shù)識別出視頻里用戶說話的內(nèi)容,將唇語識別結(jié)果和驗證碼進行比較.只有人臉識別比對和唇語識別比對都通過才能通過系統(tǒng)的認證.驗證碼是隨機生成,不法分子很難及時獲得唇動特征與驗證碼唇語一致的視頻[8,9].
如圖2所示,基于唇語識別的身份認證方案主要包括兩大模塊.人臉識別模塊負責用人臉識別1:1 技術(shù)比對,判斷人臉照片和身份證照片是否匹配.活體檢測模塊負責用唇語識別技術(shù)識別出視頻里用戶的說話內(nèi)容,并比對唇語識別結(jié)果和系統(tǒng)的驗證碼.只有兩大模塊的比對驗證都通過,該用戶才能通過身份認證.
如圖3所示,基于深度學習CNN+LSTM的唇語識別技術(shù)[10],首先用CNN 卷積神經(jīng)網(wǎng)絡(luò)提取基于關(guān)鍵點的嘴部特征,然后將CNN 提取的特征信息輸入LSTM,輸出是唇語視頻中的內(nèi)容.
圖2 基于唇語識別的身份認證流程圖
圖3 基于深度學習的唇語識別
在自然語言處理中很少會對單獨的單詞來進行識別和處理,一般要考慮句子中的單詞有上下文的語義關(guān)聯(lián).本文的唇語識別研究的是識別隨機驗證碼,驗證碼通常是單獨的一串數(shù)字或者字母等,并不存在上下文的語義關(guān)聯(lián).本文的唇語識別中需要先將唇語視頻序列切分成若干個子序列,然后將這些子序列再輸入到CNN 卷積神經(jīng)網(wǎng)絡(luò)中進行處理.CNN 提取出唇語視頻中這些子序列的唇動特征,再將特征信息輸入到LSTM 網(wǎng)絡(luò)中,對提取出的唇動特征進行編碼,最后還會用Softmax 來對唇語視頻里的說話內(nèi)容進行預判[11].
2.2.1 基于CNN的關(guān)鍵點檢測
唇語識別技術(shù)依賴說話者的嘴部動作變化,唇動變化可以通過嘴部關(guān)鍵點的唇動特征來表示.如圖4所示,將關(guān)鍵點提高到68 個,嘴唇關(guān)鍵點數(shù)量就是20 個.
圖4 嘴唇關(guān)鍵點
在嘴唇上檢測20 個關(guān)鍵點,其中外嘴唇關(guān)鍵點有12 個,內(nèi)嘴唇關(guān)鍵點有8 個.通過每幀圖像里的唇部關(guān)鍵點信息記錄視頻序列中的嘴部運動[11].
隨著深度學習的發(fā)展,AlexNet[12]網(wǎng)絡(luò)在ILSVRC12比賽上獲得了冠軍,文中使用AlexNet 網(wǎng)絡(luò)檢測嘴唇關(guān)鍵點.AlexNet 有3 層全連接層和5 層卷積層.采用CASIA_WebFace 數(shù)據(jù)集預訓練該模型,CASIA_WebFace數(shù)據(jù)集[13]包含10 575 個人,共494 414 張人臉圖片.完成預訓練后,將AlexNet 網(wǎng)絡(luò)最后一層中10 575 類的分類器替換為40 分類的分類器,用數(shù)據(jù)集再次訓練.再次訓練的數(shù)據(jù)集,照片的人臉有68 個關(guān)鍵點,嘴唇有20 個關(guān)鍵點.歐氏距離用作訓練的損失函數(shù)[14].
訓練人臉關(guān)鍵點模型時,根據(jù)檢測的區(qū)域信息{x,y,w,h},規(guī)范化關(guān)鍵點坐標[11]:
其中,(x,y)是檢測到的人臉中心點坐標,w是人臉區(qū)域的寬度,h是人臉區(qū)域的高度,(xi,yi),i=1,2,…,20是標準關(guān)鍵點坐標,i=1,2,…,20為規(guī)范化后的關(guān)鍵點坐標[11].
2.2.2 基于LSTM的唇語識別
用CNN 提取出特征向量輸入LSTM 網(wǎng)絡(luò),輸出唇語視頻中的內(nèi)容.已知輸入xt,t時刻的記憶狀態(tài)向量Ct,前一個隱藏層狀態(tài)ht-1,可計算當前隱藏層狀態(tài)ht,計算如下:
其中,sigm表示非線性的Sigmoid 函數(shù),符號 ?表示點乘運算,非線性的雙曲正切函數(shù)是t anh,wij與bj是訓練得到的參數(shù)[14].
每個序列輸出的條件概率都有對應的輸入序列,概率計算如下[14]:
如圖5所示,在訓練的階段,將CNN的學習率置為0,用CNN 提取出特征向量,輸入LSTM 網(wǎng)絡(luò),預測結(jié)果由LSTM 輸出.損失函數(shù)如下[14]:
圖5 LSTM 識別
最后在LSTM 網(wǎng)絡(luò)的最后一層引入dropout 層可以避免過度擬合問題,提高識別效果[11,15].
2.2.3 實驗分析
(1)數(shù)字串實驗
本文提出了一種基于深度學習CNN+LSTM的唇語識別技術(shù).由于身份認證系統(tǒng)的驗證碼一般為隨機生成的數(shù)字串,為了評估該方法在系統(tǒng)中的實際應用價值,將對其在數(shù)字串數(shù)據(jù)集上進行實驗.而目前公開的唇語數(shù)據(jù)集大部分是單詞短語,并且是外文發(fā)音,無法滿足我們的需求.故實驗數(shù)據(jù)集使用公司自主創(chuàng)建的數(shù)字串數(shù)據(jù)集,該數(shù)據(jù)集中的唇語視頻都是收錄的說話人錄制的6 個數(shù)字的組合,其中80%作為訓練集,其余作為測試集.
實驗結(jié)果如表1所示.表中prea和errb代表選取前a個預測結(jié)果的時候,識別錯誤的個數(shù)小于等于b個時的準確率.觀察表中數(shù)據(jù),取pre 1 且全部識別正確時的準確率只有49.6%.分析數(shù)據(jù)發(fā)現(xiàn),表中err 1 比err 0的準確率要高,這說明當允許出錯的個數(shù)增多時,準確率會有一定提升,同時pre 1 到pre 4的準確率也有所提升,這說明取多個預測結(jié)果往往比單純的取一個預測結(jié)果更加準確.在實際應用場景中,根據(jù)實際需求的不同,可以通過設(shè)置不同的a和b以提高準確率.
表1 數(shù)字串唇語識別準確率(%)
(2)OuIuVS 數(shù)據(jù)集上的對比
為了驗證本文CNN+LSTM 方法的泛化能力,繼續(xù)在公開的數(shù)據(jù)集OuIuVS 上進行驗證.OuIuVS 數(shù)據(jù)集中的視頻共有20 個人.每個人讀10 個短語,每個短語讀5 遍.
將本文中的方法與其他有關(guān)文獻里的唇語識別方法在OuIuVS 上進行比較.觀察表2中的數(shù)據(jù),我們可以發(fā)現(xiàn)本文中使用的方法效果更好.本文方法在短語識別的平均準確率約為81.9%.
表2 OuIuVS 上的結(jié)果對比
雖然高精度唇語識別很困難,但唇語識別仍具有較大的研究價值,尤其在特定的應用場景,通過訓練和調(diào)整,唇語識別能有較好的表現(xiàn).
本系統(tǒng)需要完成從采集用戶身份證信息和用戶認證視頻到用戶身份認證的全流程.采集用戶身份證信息和用戶認證視頻的功能一般由前端負責提供,顯然前端需要部署在外網(wǎng),以便用戶可以使用.后端負責對采集的信息和視頻進行處理,即后端需要進行人臉識別驗證和唇語識別驗證,出于安全性考慮,后端一般部署在內(nèi)網(wǎng).而網(wǎng)關(guān)作為前后端的橋梁,也是不可或缺的.
(1)前端前端一般是APP 端或者網(wǎng)頁端形式.如圖6所示,用戶打開APP,輸入自己的姓名,身份證號,再對著攝像頭讀出驗證碼,即可提交身份認證請求.
圖6 用戶操作流程
前端包括信息錄入和視頻錄制,信息和視頻存儲,驗證碼生成等功能.用戶輸入信息后,前端負責保存到相應的數(shù)據(jù)庫里.然后需要隨機生成驗證碼供用戶錄制視頻時讀,并將用戶錄制的視頻保存到文件存儲平臺.在用戶點提交按鈕時向后端發(fā)送請求,獲取身份認證結(jié)果展現(xiàn)給用戶.
(2)網(wǎng)關(guān)
網(wǎng)關(guān)是連接前后端的橋梁,為了使前后端能正常配合提供完整功能,并且出于外網(wǎng)與內(nèi)網(wǎng)交互的安全性考慮,提供網(wǎng)關(guān)這一關(guān)口是非常有必要的.
網(wǎng)關(guān)包括限流、加解密、鑒權(quán)驗簽、請求路由等功能.為保護后端系統(tǒng),網(wǎng)關(guān)需提供限流功能,防止大并發(fā).由于前端處于外網(wǎng),故數(shù)據(jù)需加密通信.為了確保請求未被篡改并且是合法的,需要進行驗簽鑒權(quán).同時網(wǎng)關(guān)需要將合法請求轉(zhuǎn)發(fā)給后端服務(wù).
(3)后端
如圖7,后端包括人臉識別和唇語識別兩大能力.
圖7 后端功能
后端接收到前端的身份認證請求后,需要對視頻里的用戶進行人臉識別比對和唇語識別比對,以判斷是否允許該用戶通過系統(tǒng)的身份認證,并將身份認證的結(jié)果通過網(wǎng)關(guān)返回給前端.
如圖8,本系統(tǒng)主要包含前端、網(wǎng)關(guān)、后端3 個子系統(tǒng)組成,前端和后端通過網(wǎng)關(guān)進行交互.
圖8 系統(tǒng)部署
前端一般是APP 端和網(wǎng)頁端,負責采集用戶信息和用戶視頻.用戶信息包括用戶的身份證信息,例如姓名、身份證號等,采集用戶視頻是指采集用戶錄制的用于身份認證的視頻.前端需要部署在公網(wǎng),即用戶可以在外網(wǎng)直接使用.后端負責接收前端身份認證的請求并對請求進行處理響應,包括人臉識別1:1 比對及唇語識別結(jié)果比對,后端通常在內(nèi)網(wǎng)部署.網(wǎng)關(guān)可用于前端和后端之間的交互.
(1)前端
前端主要是負責采集用戶的身份證信息和用戶錄制的視頻.采集包括姓名和身份證號,以及包含人臉用于身份認證的視頻,然后保存,通過網(wǎng)關(guān)往后端發(fā)送身份認證請求,獲取后端身份認證處理的返回結(jié)果.前端一般是APP 端或者網(wǎng)頁端的形式.系統(tǒng)采用前后端分離的架構(gòu).
圖9是前端流程圖.前端提供的信息輸入功能允許用戶填寫個人身份證信息.用戶填寫完畢后,單擊界面按鈕,系統(tǒng)會將用戶身份證信息存儲在數(shù)據(jù)庫中.前端提供的視頻捕獲功能是捕獲用戶通過攝像頭錄制的視頻,并將用戶視頻保存到文件存儲平臺.文件存儲平臺將返回與該文件相對應的文件標識id.通常,視頻文件相對較大,并且在網(wǎng)絡(luò)上的傳輸占用帶寬.
因此,通常將視頻存儲在文件存儲平臺中,并獲得對應的文件標識id.需要獲取此文件時,只需傳遞相應的文件標識id 即可下載.在與文件存儲平臺的交互過程中,一般將文件進行Base64 編碼后傳輸.收集用戶信息和視頻后,通過網(wǎng)關(guān)將身份認證請求發(fā)送給后端服務(wù),請求參數(shù)包括驗證碼,用戶身份證信息和用戶視頻文件標識.最后獲取后端身份認證處理的返回結(jié)果.
圖9 前端流程
(2)網(wǎng)關(guān)
網(wǎng)關(guān)是公網(wǎng)系統(tǒng)和內(nèi)網(wǎng)系統(tǒng)之間的關(guān)口.前端通過網(wǎng)關(guān)訪問后端.網(wǎng)關(guān)提供一系列功能,例如限流、鑒權(quán)、驗簽、加密解密以及請求路由等.
圖10是網(wǎng)關(guān)系統(tǒng)的流程圖.前端系統(tǒng)將服務(wù)請求發(fā)送到網(wǎng)關(guān)系統(tǒng).首先,網(wǎng)關(guān)系統(tǒng)執(zhí)行限流判斷,例如當前請求限制為100 個/s,則1 秒鐘內(nèi)超過100 個請求之后的剩余請求將被拒絕.如果滿足當前的限流拒絕條件,則拒絕請求.如果不滿足當前的限流拒絕條件,則網(wǎng)關(guān)需要處理請求.網(wǎng)關(guān)解密請求的數(shù)據(jù)后,首先需要驗證簽名.采用MD5 加鹽驗簽提高安全性.然后是鑒權(quán),需要驗證請求是否具有調(diào)用相關(guān)服務(wù)的權(quán)限.判斷后,如果是合法請求,則處理該請求,例如請求相應的后端系統(tǒng)處理,并獲取后端系統(tǒng)處理的返回結(jié)果.最后,對獲得的處理結(jié)果進行加密和簽名,返回到前端系統(tǒng).
圖10 網(wǎng)關(guān)流程
(3)后端
后端是實際執(zhí)行身份認證處理的子系統(tǒng),主要包括兩個模塊:人臉比對和基于唇語識別的活體檢測.只有兩項驗證均通過,才能通過身份驗證.圖11是后端的流程圖.
圖11 后端流程
前端發(fā)送身份認證請求給后端.輸入?yún)?shù)包括用戶身份證信息,隨機唇語驗證碼,用戶視頻文件標識id 等.隨機驗證碼一般由前端自行生成.后端收到請求后,檢查必需的參數(shù),如果參數(shù)檢驗失敗,則返回參數(shù)錯誤.如果通過了參數(shù)校驗,則進行后續(xù)處理.通過視頻文件標識id 從文件存儲平臺獲取視頻文件.從視頻中提取幀,并將視頻劃分為若干子序列.將抽取的人臉圖片和用戶身份證信息傳輸?shù)饺四樧R別模塊,該模塊對接公民身份證信息系統(tǒng)或其服務(wù)提供商系統(tǒng)[9],通過傳入身份證信息獲得用戶的身份證照片,再使用人臉識別比對技術(shù),以確定人臉圖像是否與用戶的身份證照片一致.將視頻分割后的若干子序列傳給唇語識別模塊,使用唇語識別技術(shù)識別視頻中用戶說話的內(nèi)容,然后比對唇語識別結(jié)果和驗證碼以確定用戶是否通過唇語驗證.如果人臉識別比對和唇語結(jié)果比對均通過,則用戶通過身份認證,否則用戶無法通過身份認證.
文中首先分析了常見的身份認證方案的不足之處,然后提出基于唇語識別的身份認證方案.基于唇語識別的身份認證方案包括人臉識別和唇語識別兩大部分,只有這兩大部分的比對校驗都通過才能通過身份認證.其中唇語識別采用基于深度學習CNN+LSTM的唇語識別技術(shù).最后分別設(shè)計了基于唇語識別的身份認證系統(tǒng)的前端、網(wǎng)關(guān)和后端.