1. 概述
??人臉核身指通過OCR等技術(shù)來構(gòu)建包含用戶真實(shí)身份信息的底庫(kù)沛膳,通過指定方式獲取用戶真實(shí)照片,利用人臉比對(duì)技術(shù)秒級(jí)確認(rèn)用戶身份的技術(shù)汛聚。
??人臉核身技術(shù)可用于遠(yuǎn)程身份認(rèn)證锹安、刷臉門禁考勤、安防監(jiān)控等場(chǎng)景倚舀。圖 1的思維導(dǎo)圖簡(jiǎn)單描述了人臉核身面臨的問題和包含的技術(shù)叹哭。
2. 涉及技術(shù)
2.1. 用戶身份采集
??采集真實(shí)用戶身份信息與圖片構(gòu)成人臉比對(duì)的底庫(kù)。使用用戶×××OCR技術(shù)實(shí)現(xiàn)用戶身份信息的自動(dòng)采集是目前較常用的方式瞄桨。
??對(duì)于特定領(lǐng)域范圍內(nèi)的應(yīng)用(如企業(yè)內(nèi)部的人臉門禁)话速,可由可信機(jī)構(gòu)使用人臉采集設(shè)備進(jìn)行離線采集。
??對(duì)于使用云服務(wù)的第三方應(yīng)用芯侥,可由第三方應(yīng)用使用云服務(wù)建立用戶信息庫(kù)泊交,由應(yīng)用采集用戶信息存入云服務(wù)中。
2.2. 活體檢測(cè)
??人臉活體檢測(cè)技術(shù)在人臉識(shí)別過程中判斷操作用戶是否為真人柱查,有效抵御照片廓俭、視頻、模具等作弊***唉工,保障業(yè)務(wù)安全研乒。
??百度云網(wǎng)站上[1]描述了下面幾種活體檢測(cè)方法:
- 動(dòng)作配合式活體檢測(cè):SDK給出指定動(dòng)作要求,用戶需配合完成淋硝,通過實(shí)時(shí)檢測(cè)用戶眼睛雹熬,嘴巴,頭部姿態(tài)的狀態(tài)谣膳,來判斷是否是活體竿报。支持7種預(yù)設(shè)動(dòng)作,可自定義哪些生效以及檢測(cè)順序继谚。
- 在線圖片活體檢測(cè):基于圖片中人像的破綻(摩爾紋烈菌、成像畸形等)來判斷目標(biāo)對(duì)象是否為活體,可有效防止屏幕二次翻拍等作弊***,可使用單張或多張判斷邏輯芽世。
- H5視頻活體檢測(cè):用戶上傳一個(gè)現(xiàn)場(chǎng)錄制的視頻挚赊,錄制時(shí)讀出隨機(jī)分配的語音校驗(yàn)碼。然后通過分析這個(gè)視頻的人臉信息以及語音校驗(yàn)碼是否匹配济瓢,完成活體檢測(cè)判斷荠割。
- 離線RGB活體檢測(cè):在線圖片活體的離線版本,相對(duì)于在線接口方式葬荷,本地處理速度更快涨共,無需擔(dān)心是否有網(wǎng)絡(luò),也無需考慮接口調(diào)用次數(shù)等消耗宠漩。
- 離線近紅外活體檢測(cè):利用近紅外成像原理举反,實(shí)現(xiàn)夜間或無自然光條件下的活體判斷。其成像特點(diǎn)(如屏幕無法成像扒吁,不同材質(zhì)反射率不同等)可以實(shí)現(xiàn)高魯棒性的活體判斷火鼻。
- 離線3D結(jié)構(gòu)光活體檢測(cè):基于3D結(jié)構(gòu)光成像原理,通過人臉表面反射光線構(gòu)建深度圖像雕崩,判斷目標(biāo)對(duì)象是否為活體魁索,可強(qiáng)效防御圖片、視頻盼铁、屏幕粗蔚、模具等***。
2.3. 人臉識(shí)別
??人臉識(shí)別是人臉檢測(cè)饶火,人臉對(duì)齊鹏控,人臉特征提取,人臉分析肤寝,人臉比對(duì)技術(shù)的綜合應(yīng)用当辐。
??使用機(jī)器學(xué)習(xí)(實(shí)際應(yīng)用中使用的算法可以不同)進(jìn)行人臉識(shí)別的原理[2,3]簡(jiǎn)單描述如下:
1. 在圖像中找出人臉部分:將圖像轉(zhuǎn)換為黑白圖像,使用方向梯度直方圖(Histogram of Oriented Gradients鲤看,簡(jiǎn)稱 HOG)的方法:將像素從明向暗變化的方向定義為梯度缘揪,將圖像分割成一些 16×16 像素的小方塊,通過計(jì)算每個(gè)小方塊中的梯度(以指向性最強(qiáng)的方向代替小方塊)將圖像表示為HOG 形式义桂,以捕獲圖像的主要特征找筝。通過將目標(biāo)圖像的HOG與已訓(xùn)練好的HOG進(jìn)行相似度的比較,可以判斷出目標(biāo)圖像的人臉區(qū)域慷吊。
2. 人臉對(duì)齊:臉上普遍存在的特定點(diǎn)被稱為特征點(diǎn)(landmarks)呻征,一般被定義為68個(gè)(如圖 2所示)“战剑可使用機(jī)器學(xué)習(xí)算法找到人臉上的這68個(gè)特征點(diǎn),使用那些能夠保持圖片相對(duì)平行的基本圖像變換,例如旋轉(zhuǎn)和縮放(稱為仿射變換)可使得即使目標(biāo)人臉具有不同的姿態(tài)嚷闭,都能將眼睛和嘴巴向中間挪動(dòng)到大致相同的位置攒岛,為下一步的面部特征提取做好準(zhǔn)備。
3. 人臉特征提劝獭:使用三元組(一張已知的人的面部訓(xùn)練圖像灾锯,同一個(gè)人的另一張照片,另外一個(gè)人的照片)訓(xùn)練一個(gè)深度卷積神經(jīng)網(wǎng)絡(luò)嗅榕,讓它為臉部生成 n 個(gè)測(cè)量值(同一人的測(cè)量值相近顺饮,而不同人的測(cè)量值有差異),這里把每張臉的n個(gè)測(cè)量值稱為一個(gè)嵌入(embedding)凌那。機(jī)器學(xué)習(xí)將一個(gè)復(fù)雜的圖像轉(zhuǎn)換為一個(gè)數(shù)字向量(embedding)用于計(jì)算兼雄。
4. 人臉比對(duì):使用目標(biāo)人臉在底庫(kù)中比對(duì)的過程可視為一個(gè)分類過程,需要訓(xùn)練一個(gè)分類器(可使用一個(gè)簡(jiǎn)單的線性 SVM 分類器)帽蝶,使用人臉測(cè)量值(embedding)作為輸入進(jìn)行訓(xùn)練,而輸出的每一個(gè)類別就代表底庫(kù)中的每一個(gè)人赦肋。
??卷積神經(jīng)網(wǎng)絡(luò)近年來在人臉識(shí)別技術(shù)中被廣泛應(yīng)用,如使用DeepID[4,5]這樣的學(xué)習(xí)模型將人臉圖片轉(zhuǎn)換為一個(gè)多維向量描述的面部特征励稳。
??圖 3顯示了DeepID的特征提取流程佃乘。
??DeepID將一張人臉圖片分為對(duì)應(yīng)人臉10個(gè)區(qū)域的60個(gè)塊(face patchs)作為輸入,每個(gè)塊為39×31×k(RGB值時(shí)k為3,灰度值時(shí)k為1)的長(zhǎng)方形或31×31×k的正方形驹尼。每個(gè)人臉塊作為一個(gè)卷積網(wǎng)絡(luò)的輸入進(jìn)行訓(xùn)練趣避,網(wǎng)絡(luò)的最后一個(gè)隱藏層神經(jīng)元做為所抽取的特征,這些特征被輸出為n(如10000)個(gè)身份類別新翎。DeepID使用60個(gè)卷積網(wǎng)絡(luò)進(jìn)行訓(xùn)練和預(yù)測(cè)程帕,每個(gè)卷積網(wǎng)絡(luò)對(duì)每個(gè)輸入塊抽取出兩個(gè)160維的向量,這樣對(duì)于一張人臉的特征向量長(zhǎng)度為19200維(160×2×60)料祠。
??圖 4顯示了DeepID中的卷積網(wǎng)絡(luò)架構(gòu)骆捧。可以看到底層網(wǎng)絡(luò)的特征隨著層數(shù)的遞進(jìn)而減少髓绽,第4層以后剩下的已經(jīng)是高層次的人臉特征了敛苇。
??得到到特征向量后,進(jìn)行人臉的識(shí)別(比對(duì))可以有多種方法顺呕。在論文[4]中除了介紹聯(lián)合貝葉斯(Joint Bayesian)分類方法外枫攀,還介紹了一種神經(jīng)網(wǎng)絡(luò)分類方法,如圖 5所示株茶。
??該神經(jīng)網(wǎng)絡(luò)的輸入層為使用DeepID抽取的特征向量来涨。將輸入向量分為60組,每個(gè)組中包含目標(biāo)圖片和底庫(kù)圖片對(duì)應(yīng)同一輸入塊的特征向量(一張圖片的這個(gè)塊特征向量為160×2維启盛,兩張則為640維)蹦掐。輸出只有一個(gè)神經(jīng)元技羔,即為這兩張圖片的相似度。
3. 應(yīng)用架構(gòu)
??本文將人臉核身系統(tǒng)的架構(gòu)分為三種:在線架構(gòu)卧抗、離線架構(gòu)藤滥、混合架構(gòu)。
3.1. 在線架構(gòu)
??在線架構(gòu)適合網(wǎng)絡(luò)條件良好社裆、人臉庫(kù)龐大(萬級(jí)別以上)拙绊、需要跨地域人臉庫(kù)同步等場(chǎng)景。常用于大規(guī)模級(jí)別的人臉識(shí)別業(yè)務(wù)泳秀。系統(tǒng)架構(gòu)如圖 6所示标沪。
??在線架構(gòu)的人臉核身流程通常為:前端設(shè)備根據(jù)支持的活體檢測(cè)手段向后端提交視頻(如唇語驗(yàn)證碼手段)或圖像(靜態(tài)檢測(cè)),活體檢測(cè)通過后嗜傅,后端將從提交的視頻或圖像中檢測(cè)出的人臉圖像與后端的身份信息庫(kù)(底庫(kù))中用戶人臉特征進(jìn)行1:1比對(duì)金句,比對(duì)結(jié)果超過設(shè)定閾值則認(rèn)為核身通過。
??在線架構(gòu)的一種變形模式是前端設(shè)備向后端傳遞的不是原始的圖像數(shù)據(jù)磺陡,而是使用人臉特征提取模型計(jì)算得到人臉特征數(shù)據(jù)趴梢,這種方式能降低通訊開銷和后端的運(yùn)算負(fù)載,但要求前后端使用的計(jì)算模型相同币他,且需要保持模型的同步更新坞靶。
3.2. 離線架構(gòu)
??離線架構(gòu)適合于網(wǎng)絡(luò)條件不穩(wěn)定、無網(wǎng)蝴悉、數(shù)據(jù)安全性要求高彰阴、人臉庫(kù)較小(通常為1萬人以下)單臺(tái)設(shè)備的人臉識(shí)別場(chǎng)景拍冠。常見于人證核驗(yàn)機(jī)尿这、人臉門禁/閘機(jī)、企業(yè)考勤機(jī)庆杜、自助柜機(jī)等射众。
??離線架構(gòu)中根據(jù)是否存貯底庫(kù)數(shù)據(jù)分為無底庫(kù)模式與有底庫(kù)模式。
3.2.1. 無底庫(kù)模式
??無底庫(kù)模式適用于實(shí)時(shí)采集底庫(kù)人臉圖像與目標(biāo)人臉圖像進(jìn)行比對(duì)的場(chǎng)景晃财,一個(gè)典型的用例是人證核驗(yàn)一體機(jī):該終端包含×××讀卡器叨橱,可實(shí)時(shí)讀取×××中的身份信息與人臉圖片,并包含攝像頭實(shí)時(shí)采集目標(biāo)人臉圖像断盛,與讀卡器得到的×××人臉圖片進(jìn)行比對(duì)完成認(rèn)證合一驗(yàn)證的功能罗洗。圖 7展示了一個(gè)人證核驗(yàn)一體機(jī)。
3.2.2. 有底庫(kù)模式
??辦公樓宇/生活小區(qū)的人臉門禁/閘機(jī)可使用有底庫(kù)模式的離線架構(gòu)钢猛。在人臉門禁中保存一個(gè)允許通過的白名單底庫(kù)伙菜,底庫(kù)中存儲(chǔ)著白名單人員的身份信息與人臉圖片(特征)。當(dāng)目標(biāo)經(jīng)過人臉門禁時(shí)命迈,人臉門禁在本地的白名單底庫(kù)中實(shí)現(xiàn)1:N的人臉?biāo)阉鞅葘?duì)贩绕。通過離線人臉?biāo)阉骰鸬模瓿赏ㄐ姓呱矸莺蓑?yàn),避免網(wǎng)絡(luò)因素等干擾丧叽,確保業(yè)務(wù)穩(wěn)定高效運(yùn)行卫玖。
3.3. 混合架構(gòu)
??混合結(jié)構(gòu)適合于網(wǎng)絡(luò)條件較好,人臉庫(kù)較杏淮尽(1萬以下)但變更頻繁的場(chǎng)景,如授權(quán)人員變更頻繁的商業(yè)樓宇人臉門禁陕靠,這時(shí)人臉門禁可由后端的人員庫(kù)更新通知迂尝,及時(shí)更新本地人臉門禁中存儲(chǔ)的白名單底庫(kù)。
??這里把混合架構(gòu)分為幾種模式剪芥。
3.3.1. 前端1:N比對(duì)模式
??這種模式的架構(gòu)如圖 8所示垄开。
??這種模式下,前端維護(hù)一個(gè)白名單底庫(kù)和系列人臉?biāo)惴P退胺荆繕?biāo)人臉的1:N比對(duì)在前端完成溉躲。后端主要提供算法模型與身份信息庫(kù)對(duì)前端的更新,當(dāng)后端的算法模型優(yōu)化演進(jìn)后益兄,可由后端通知到前端锻梳,有前端進(jìn)行更新;當(dāng)后端的身份信息庫(kù)發(fā)生更新時(shí)净捅,也可以實(shí)時(shí)通知到前端進(jìn)行更新疑枯,實(shí)現(xiàn)實(shí)時(shí)的人臉核證更新。
3.3.2. 前端1:1比對(duì)模式
??這種模式的架構(gòu)如圖 9所示蛔六。
??這種模式下荆永,前端不再維護(hù)白名單底庫(kù),在需要進(jìn)行比對(duì)時(shí)国章,實(shí)時(shí)從后端獲取目標(biāo)圖像對(duì)應(yīng)用戶的身份信息(人臉圖片具钥、特征)實(shí)現(xiàn)1:1比對(duì)。這種模式需要前端在向后端請(qǐng)求用戶身份信息時(shí)攜帶用戶標(biāo)識(shí)液兽。
4. 云服務(wù)與開源
4.1. 開源軟件
4.1.1. opencv
??OpenCV(開源計(jì)算機(jī)視覺庫(kù))是在BSD許可下發(fā)布的骂删,因此對(duì)學(xué)術(shù)和商業(yè)使用都是免費(fèi)的。它有c++抵碟、Python和Java接口桃漾,支持Windows、Linux拟逮、Mac OS撬统、iOS和Android。OpenCV是為計(jì)算效率而設(shè)計(jì)的敦迄,并且非常注重實(shí)時(shí)應(yīng)用恋追。用優(yōu)化的C/ c++編寫的庫(kù)可以利用多核處理凭迹。使用OpenCL,它可以利用底層異構(gòu)計(jì)算平臺(tái)的硬件加速苦囱。
??從OpenCV2.4開始嗅绸,加入了新的類FaceRecognizer,可以使用它便捷地進(jìn)行人臉識(shí)別撕彤。
??其github地址為:https://github.com/opencv
??OpenCV目前最新的版本為4.0版本鱼鸠,圖 10顯示了OpenCV中與人臉有關(guān)的類:
?? 為支持web應(yīng)用,OpenCV.js利用Emscripten將OpenCV函數(shù)編譯成asm.js或WebAssembly目標(biāo),并提供可訪問的JS API羹铅。OpenCV.js是針對(duì)web平臺(tái)對(duì)OpenCV函數(shù)選定子集的JavaScript綁定蚀狰。它使得web前端應(yīng)用得益于OpenCV強(qiáng)大的多媒體處理功能。
??可以看看OpenCV.js能夠提供什么功能[6]:
- 讀取和顯示圖像和視頻(使用WebRTC和canvas元素實(shí)現(xiàn)視頻的捕獲)职员;
- 提供豐富的圖像處理功能麻蹋,如:改變顏色,圖像的幾何變換焊切,圖像閾值化扮授,圖像平滑化,形態(tài)變換专肪,發(fā)現(xiàn)圖像梯度刹勃,Canny邊緣檢測(cè),圖像金字塔牵祟,圖像的傅里葉變換深夯、余弦變換, Hough轉(zhuǎn)換,圖像分割诺苹、前景提取等咕晋;
- 提供視頻處理功能,如:視頻中對(duì)象軌跡跟蹤(Meanshift和Camshift算法)收奔,背景處理等掌呜;
- 提供人臉檢測(cè)(使用預(yù)先學(xué)習(xí)好的模型,載入對(duì)應(yīng)的xml文件坪哄,可在視頻流中檢測(cè))功能质蕉。
4.1.2. Dlib
??Dlib是一個(gè)包含機(jī)器學(xué)習(xí)算法和工具的現(xiàn)代c++工具包,用于在c++中創(chuàng)建復(fù)雜的軟件來解決現(xiàn)實(shí)世界中的問題翩肌。模暗。
?? 其github地址為:https://github.com/davisking/dlib
?? 其文檔地址為:http://dlib.net
?? dlib可提供C++和python的調(diào)用,其提供的算法庫(kù)中包括高質(zhì)量的人臉識(shí)別[7]算法念祭。
4.1.3. OpenFace
??OpenFace是一個(gè)使用python語言和Torch框架開發(fā)的基于深度神經(jīng)網(wǎng)絡(luò)的開源人臉識(shí)別系統(tǒng)兑宇。該系統(tǒng)的理論基礎(chǔ)基于谷歌的文章《FaceNet: A Unified Embedding for Face Recognition and Clustering》[8]。
??其github地址為:https://github.com/cmusatyalab/openface
??其文檔地址為:http://cmusatyalab.github.io/openface/
??其工作流程如下:
1. 用dlib或OpenCV的預(yù)先訓(xùn)練好的模型來檢測(cè)人臉粱坤。
2. 為神經(jīng)網(wǎng)絡(luò)的計(jì)算而變換人臉(對(duì)齊)隶糕。使用dlib的實(shí)時(shí)姿態(tài)估計(jì)和OpenCV的仿射變換瓷产,試圖使眼睛和下唇出現(xiàn)在每個(gè)圖像的相同位置。
3. 使用深度神經(jīng)網(wǎng)絡(luò)將人臉表示為128維超球面單元 (unit hypersphere)枚驻。這種表示具有一個(gè)特性:即兩個(gè)面部特征向量之間的距離越大濒旦,就意味著這兩張臉可能不是同一個(gè)人的,該特性使得聚類再登、相似性檢測(cè)和分類任務(wù)更容易尔邓。
4. 可將適用的聚類或分類技術(shù)應(yīng)用到特征向量上,完成識(shí)別任務(wù)锉矢。
??示意圖如圖 11所示铃拇。
??OpenFace中主要的package如下表所示。
類名 | 功能 |
---|---|
openface.AlignDlib | 使用dlib的特征點(diǎn)估計(jì)來對(duì)齊人臉沈撞,面向神經(jīng)網(wǎng)絡(luò)輸入進(jìn)行預(yù)處理。人臉被調(diào)整到相同的大小(如96x96)雕什,并進(jìn)行轉(zhuǎn)換缠俺,使特征點(diǎn)(如眼睛和鼻子)出現(xiàn)在每張圖像的相同位置。 |
openface.TorchNeuralNet | 使用Torch子流程進(jìn)行特征提取贷岸。 |
openface.data module | 對(duì)象包含圖像元數(shù)據(jù)的對(duì)象壹士。 |
openface.helper module | 幫助模塊。 |
4.1.4. SeetaFaceEngine
??SeetaFace Engine是一個(gè)開源的人臉識(shí)別引擎偿警,由中科院計(jì)算所山世光研究員帶領(lǐng)的人臉識(shí)別研究組研發(fā)躏救,使用C++實(shí)現(xiàn),包含了人臉相關(guān)的一整套過程螟蒸,包括:人臉檢測(cè)盒使、人臉對(duì)齊、人臉識(shí)別七嫌。
??其github地址為:https://github.com/seetaface/SeetaFaceEngine
??其開源代碼可被編譯為3個(gè)動(dòng)態(tài)庫(kù)(FaceDetection.dll少办,F(xiàn)aceAlignment.dll,Identification.dll)進(jìn)行調(diào)用诵原。
4.2. 云服務(wù)
4.2.1. 曠世科技
??曠世科技提供人臉識(shí)別的云服務(wù)[9]接口英妓,其API定義如圖 12所示:
??可以看到提供的服務(wù)接口能夠?qū)崿F(xiàn)人臉檢測(cè)、人臉比對(duì)绍赛、識(shí)別功能蔓纠,也提供云端人臉庫(kù)的構(gòu)建功能。
4.2.2. 騰訊云
??騰訊云提供人臉識(shí)別的云服務(wù)[10]接口吗蚌,其API定義如圖 13所示:
??可以看到提供的服務(wù)接口能夠?qū)崿F(xiàn)人臉檢測(cè)腿倚、人臉對(duì)比、驗(yàn)證功能褪测,也提供云端個(gè)體信息管理(底庫(kù)管理)功能猴誊。
4.2.3. 阿里云
??阿里云提供人臉識(shí)別的云服務(wù)[11]接口潦刃,其API定義如圖 13所示:
??可以看到阿里云提供的服務(wù)接口能夠?qū)崿F(xiàn)人臉檢測(cè)、人臉比對(duì)功能懈叹。
4.2.4. 百度云
??百度云提供豐富的人臉識(shí)別服務(wù)接口[12]乖杠,如圖 15所示。
5. 參考文獻(xiàn)
- https://cloud.baidu.com/product/face
- Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks澄成,https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html
- Machine Learning is Fun! Part 4: Modern Face Recognition with Deep Learning, https://www.colabug.com/3548846.html
- Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1891-1898.
- DeepID人臉識(shí)別算法之三代胧洒,https://www.cnblogs.com/mfrbuaa/p/5394742.html
- https://docs.opencv.org/4.0.0/d5/d10/tutorial_js_root.html
- http://dlib.net/dnn_face_recognition_ex.cpp.html
- FaceNet: A Unified Embedding for Face Recognition and Clustering ,http://www.cv-foundation.org/openaccess/content_cvpr_2015/app/1A_089.pdf
- https://console.faceplusplus.com.cn/documents/4888373
- https://cloud.tencent.com/document/product/867
- https://help.aliyun.com/product/53257.html
- http://ai.baidu.com/docs#/Face-Detect-V3/top