人臉核身技術原理、架構與開發 1. 概述 2. 涉及技術 3. 應用架構 4. 雲服務與開源 5. 參考文獻

1. 概述

  人臉核身指通過OCR等技術來構建包含用戶真實身份信息的底庫,通過指定方式獲取用戶真實照片,利用人臉比對技術秒級確認用戶身份的技術。
  人臉核身技術可用於遠程身份認證、刷臉門禁考勤、安防監控等場景。圖 1的思維導圖簡單描述了人臉核身面臨的問題和包含的技術。


2. 涉及技術

2.1. 用戶身份採集

  採集真實用戶身份信息與圖片構成人臉比對的底庫。使用用戶×××OCR技術實現用戶身份信息的自動採集是目前較常用的方式。
  對於特定領域範圍內的應用(如企業內部的人臉門禁),可由可信機構使用人臉採集設備進行離線採集。
  對於使用雲服務的第三方應用,可由第三方應用使用雲服務建立用戶信息庫,由應用採集用戶信息存入雲服務中。

2.2. 活體檢測

  人臉活體檢測技術在人臉識別過程中判斷操作用戶是否爲真人,有效抵禦照片、視頻、模具等作弊***,保障業務安全。
  百度雲網站上[1]描述了下面幾種活體檢測方法:

  • 動作配合式活體檢測:SDK給出指定動作要求,用戶需配合完成,通過實時檢測用戶眼睛,嘴巴,頭部姿態的狀態,來判斷是否是活體。支持7種預設動作,可自定義哪些生效以及檢測順序。
  • 在線圖片活體檢測:基於圖片中人像的破綻(摩爾紋、成像畸形等)來判斷目標對象是否爲活體,可有效防止屏幕二次翻拍等作弊***,可使用單張或多張判斷邏輯。
  • H5視頻活體檢測:用戶上傳一個現場錄製的視頻,錄製時讀出隨機分配的語音校驗碼。然後通過分析這個視頻的人臉信息以及語音校驗碼是否匹配,完成活體檢測判斷。
  • 離線RGB活體檢測:在線圖片活體的離線版本,相對於在線接口方式,本地處理速度更快,無需擔心是否有網絡,也無需考慮接口調用次數等消耗。
  • 離線近紅外活體檢測:利用近紅外成像原理,實現夜間或無自然光條件下的活體判斷。其成像特點(如屏幕無法成像,不同材質反射率不同等)可以實現高魯棒性的活體判斷。
  • 離線3D結構光活體檢測:基於3D結構光成像原理,通過人臉表面反射光線構建深度圖像,判斷目標對象是否爲活體,可強效防禦圖片、視頻、屏幕、模具等***。

2.3. 人臉識別

  人臉識別是人臉檢測,人臉對齊,人臉特徵提取,人臉分析,人臉比對技術的綜合應用。
  使用機器學習(實際應用中使用的算法可以不同)進行人臉識別的原理[2,3]簡單描述如下:
1. 在圖像中找出人臉部分:將圖像轉換爲黑白圖像,使用方向梯度直方圖(Histogram of Oriented Gradients,簡稱 HOG)的方法:將像素從明向暗變化的方向定義爲梯度,將圖像分割成一些 16×16 像素的小方塊,通過計算每個小方塊中的梯度(以指向性最強的方向代替小方塊)將圖像表示爲HOG 形式,以捕獲圖像的主要特徵。通過將目標圖像的HOG與已訓練好的HOG進行相似度的比較,可以判斷出目標圖像的人臉區域。
2. 人臉對齊:臉上普遍存在的特定點被稱爲特徵點(landmarks),一般被定義爲68個(如圖 2所示)。可使用機器學習算法找到人臉上的這68個特徵點,使用那些能夠保持圖片相對平行的基本圖像變換,例如旋轉和縮放(稱爲仿射變換)可使得即使目標人臉具有不同的姿態,都能將眼睛和嘴巴向中間挪動到大致相同的位置,爲下一步的面部特徵提取做好準備。
3. 人臉特徵提取:使用三元組(一張已知的人的面部訓練圖像,同一個人的另一張照片,另外一個人的照片)訓練一個深度卷積神經網絡,讓它爲臉部生成 n 個測量值(同一人的測量值相近,而不同人的測量值有差異),這裏把每張臉的n個測量值稱爲一個嵌入(embedding)。機器學習將一個複雜的圖像轉換爲一個數字向量(embedding)用於計算。
4. 人臉比對:使用目標人臉在底庫中比對的過程可視爲一個分類過程,需要訓練一個分類器(可使用一個簡單的線性 SVM 分類器),使用人臉測量值(embedding)作爲輸入進行訓練,而輸出的每一個類別就代表底庫中的每一個人。



  卷積神經網絡近年來在人臉識別技術中被廣泛應用,如使用DeepID[4,5]這樣的學習模型將人臉圖片轉換爲一個多維向量描述的面部特徵。
  圖 3顯示了DeepID的特徵提取流程。



  DeepID將一張人臉圖片分爲對應人臉10個區域的60個塊(face patchs)作爲輸入,每個塊爲39×31×k(RGB值時k爲3,灰度值時k爲1)的長方形或31×31×k的正方形。每個人臉塊作爲一個卷積網絡的輸入進行訓練,網絡的最後一個隱藏層神經元做爲所抽取的特徵,這些特徵被輸出爲n(如10000)個身份類別。DeepID使用60個卷積網絡進行訓練和預測,每個卷積網絡對每個輸入塊抽取出兩個160維的向量,這樣對於一張人臉的特徵向量長度爲19200維(160×2×60)。
  圖 4顯示了DeepID中的卷積網絡架構。可以看到底層網絡的特徵隨着層數的遞進而減少,第4層以後剩下的已經是高層次的人臉特徵了。

  得到到特徵向量後,進行人臉的識別(比對)可以有多種方法。在論文[4]中除了介紹聯合貝葉斯(Joint Bayesian)分類方法外,還介紹了一種神經網絡分類方法,如圖 5所示。

  該神經網絡的輸入層爲使用DeepID抽取的特徵向量。將輸入向量分爲60組,每個組中包含目標圖片和底庫圖片對應同一輸入塊的特徵向量(一張圖片的這個塊特徵向量爲160×2維,兩張則爲640維)。輸出只有一個神經元,即爲這兩張圖片的相似度。

3. 應用架構

  本文將人臉核身系統的架構分爲三種:在線架構、離線架構、混合架構。

3.1. 在線架構

  在線架構適合網絡條件良好、人臉庫龐大(萬級別以上)、需要跨地域人臉庫同步等場景。常用於大規模級別的人臉識別業務。系統架構如圖 6所示。



  在線架構的人臉核身流程通常爲:前端設備根據支持的活體檢測手段向後端提交視頻(如脣語驗證碼手段)或圖像(靜態檢測),活體檢測通過後,後端將從提交的視頻或圖像中檢測出的人臉圖像與後端的身份信息庫(底庫)中用戶人臉特徵進行1:1比對,比對結果超過設定閾值則認爲核身通過。
  在線架構的一種變形模式是前端設備向後端傳遞的不是原始的圖像數據,而是使用人臉特徵提取模型計算得到人臉特徵數據,這種方式能降低通訊開銷和後端的運算負載,但要求前後端使用的計算模型相同,且需要保持模型的同步更新。

3.2. 離線架構

  離線架構適合於網絡條件不穩定、無網、數據安全性要求高、人臉庫較小(通常爲1萬人以下)單臺設備的人臉識別場景。常見於人證覈驗機、人臉門禁/閘機、企業考勤機、自助櫃機等。
  離線架構中根據是否存貯底庫數據分爲無底庫模式與有底庫模式。

3.2.1. 無底庫模式

  無底庫模式適用於實時採集底庫人臉圖像與目標人臉圖像進行比對的場景,一個典型的用例是人證覈驗一體機:該終端包含×××讀卡器,可實時讀取×××中的身份信息與人臉圖片,幷包含攝像頭實時採集目標人臉圖像,與讀卡器得到的×××人臉圖片進行比對完成認證合一驗證的功能。圖 7展示了一個人證覈驗一體機。


3.2.2. 有底庫模式

  辦公樓宇/生活小區的人臉門禁/閘機可使用有底庫模式的離線架構。在人臉門禁中保存一個允許通過的白名單底庫,底庫中存儲着白名單人員的身份信息與人臉圖片(特徵)。當目標經過人臉門禁時,人臉門禁在本地的白名單底庫中實現1:N的人臉搜索比對。通過離線人臉搜索,完成通行者身份覈驗,避免網絡因素等干擾,確保業務穩定高效運行。

3.3. 混合架構

  混合結構適合於網絡條件較好,人臉庫較小(1萬以下)但變更頻繁的場景,如授權人員變更頻繁的商業樓宇人臉門禁,這時人臉門禁可由後端的人員庫更新通知,及時更新本地人臉門禁中存儲的白名單底庫。
  這裏把混合架構分爲幾種模式。

3.3.1. 前端1:N比對模式

  這種模式的架構如圖 8所示。



  這種模式下,前端維護一個白名單底庫和系列人臉算法模型,目標人臉的1:N比對在前端完成。後端主要提供算法模型與身份信息庫對前端的更新,當後端的算法模型優化演進後,可由後端通知到前端,有前端進行更新;當後端的身份信息庫發生更新時,也可以實時通知到前端進行更新,實現實時的人臉核證更新。

3.3.2. 前端1:1比對模式

  這種模式的架構如圖 9所示。



  這種模式下,前端不再維護白名單底庫,在需要進行比對時,實時從後端獲取目標圖像對應用戶的身份信息(人臉圖片、特徵)實現1:1比對。這種模式需要前端在向後端請求用戶身份信息時攜帶用戶標識。

4. 雲服務與開源

4.1. 開源軟件

4.1.1. opencv

  OpenCV(開源計算機視覺庫)是在BSD許可下發布的,因此對學術和商業使用都是免費的。它有c++、Python和Java接口,支持Windows、Linux、Mac OS、iOS和Android。OpenCV是爲計算效率而設計的,並且非常注重實時應用。用優化的C/ c++編寫的庫可以利用多核處理。使用OpenCL,它可以利用底層異構計算平臺的硬件加速。
  從OpenCV2.4開始,加入了新的類FaceRecognizer,可以使用它便捷地進行人臉識別。
  其github地址爲:https://github.com/opencv
  OpenCV目前最新的版本爲4.0版本,圖 10顯示了OpenCV中與人臉有關的類:


   爲支持web應用,OpenCV.js利用Emscripten將OpenCV函數編譯成asm.js或WebAssembly目標,並提供可訪問的JS API。OpenCV.js是針對web平臺對OpenCV函數選定子集的JavaScript綁定。它使得web前端應用得益於OpenCV強大的多媒體處理功能。
  可以看看OpenCV.js能夠提供什麼功能[6]:

  • 讀取和顯示圖像和視頻(使用WebRTC和canvas元素實現視頻的捕獲);
  • 提供豐富的圖像處理功能,如:改變顏色,圖像的幾何變換,圖像閾值化,圖像平滑化,形態變換,發現圖像梯度,Canny邊緣檢測,圖像金字塔,圖像的傅里葉變換、餘弦變換, Hough轉換,圖像分割、前景提取等;
  • 提供視頻處理功能,如:視頻中對象軌跡跟蹤(Meanshift和Camshift算法),背景處理等;
  • 提供人臉檢測(使用預先學習好的模型,載入對應的xml文件,可在視頻流中檢測)功能。

4.1.2. Dlib

  Dlib是一個包含機器學習算法和工具的現代c++工具包,用於在c++中創建複雜的軟件來解決現實世界中的問題。。
   其github地址爲:https://github.com/davisking/dlib
   其文檔地址爲:http://dlib.net
   dlib可提供C++和python的調用,其提供的算法庫中包括高質量的人臉識別[7]算法。

4.1.3. OpenFace

  OpenFace是一個使用python語言和Torch框架開發的基於深度神經網絡的開源人臉識別系統。該系統的理論基礎基於谷歌的文章《FaceNet: A Unified Embedding for Face Recognition and Clustering》[8]。
  其github地址爲:https://github.com/cmusatyalab/openface
  其文檔地址爲:http://cmusatyalab.github.io/openface/
  其工作流程如下:
1. 用dlib或OpenCV的預先訓練好的模型來檢測人臉。
2. 爲神經網絡的計算而變換人臉(對齊)。使用dlib的實時姿態估計和OpenCV的仿射變換,試圖使眼睛和下脣出現在每個圖像的相同位置。
3. 使用深度神經網絡將人臉表示爲128維超球面單元 (unit hypersphere)。這種表示具有一個特性:即兩個面部特徵向量之間的距離越大,就意味着這兩張臉可能不是同一個人的,該特性使得聚類、相似性檢測和分類任務更容易。
4. 可將適用的聚類或分類技術應用到特徵向量上,完成識別任務。
  示意圖如圖 11所示。


  OpenFace中主要的package如下表所示。

類名 功能
openface.AlignDlib 使用dlib的特徵點估計來對齊人臉,面向神經網絡輸入進行預處理。人臉被調整到相同的大小(如96x96),並進行轉換,使特徵點(如眼睛和鼻子)出現在每張圖像的相同位置。
openface.TorchNeuralNet 使用Torch子流程進行特徵提取。
openface.data module 對象包含圖像元數據的對象。
openface.helper module 幫助模塊。

4.1.4. SeetaFaceEngine

  SeetaFace Engine是一個開源的人臉識別引擎,由中科院計算所山世光研究員帶領的人臉識別研究組研發,使用C++實現,包含了人臉相關的一整套過程,包括:人臉檢測、人臉對齊、人臉識別。
  其github地址爲:https://github.com/seetaface/SeetaFaceEngine
  其開源代碼可被編譯爲3個動態庫(FaceDetection.dll,FaceAlignment.dll,Identification.dll)進行調用。

4.2. 雲服務

4.2.1. 曠世科技

  曠世科技提供人臉識別的雲服務[9]接口,其API定義如圖 12所示:



  可以看到提供的服務接口能夠實現人臉檢測、人臉比對、識別功能,也提供雲端人臉庫的構建功能。

4.2.2. 騰訊雲

  騰訊雲提供人臉識別的雲服務[10]接口,其API定義如圖 13所示:



  可以看到提供的服務接口能夠實現人臉檢測、人臉對比、驗證功能,也提供雲端個體信息管理(底庫管理)功能。

4.2.3. 阿里雲

  阿里雲提供人臉識別的雲服務[11]接口,其API定義如圖 13所示:



  可以看到阿里雲提供的服務接口能夠實現人臉檢測、人臉比對功能。

4.2.4. 百度雲

  百度雲提供豐富的人臉識別服務接口[12],如圖 15所示。


5. 參考文獻

  1. https://cloud.baidu.com/product/face
  2. Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks,https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html
  3. Machine Learning is Fun! Part 4: Modern Face Recognition with Deep Learning, https://www.colabug.com/3548846.html
  4. 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.
  5. DeepID人臉識別算法之三代,https://www.cnblogs.com/mfrbuaa/p/5394742.html
  6. https://docs.opencv.org/4.0.0/d5/d10/tutorial_js_root.html
  7. http://dlib.net/dnn_face_recognition_ex.cpp.html
  8. FaceNet: A Unified Embedding for Face Recognition and Clustering ,http://www.cv-foundation.org/openaccess/content_cvpr_2015/app/1A_089.pdf
  9. https://console.faceplusplus.com.cn/documents/4888373
  10. https://cloud.tencent.com/document/product/867
  11. https://help.aliyun.com/product/53257.html
  12. http://ai.baidu.com/docs#/Face-Detect-V3/top
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章