基于Face-api.js框架,在前端完成人臉識別
本文為大家介紹的是一款在瀏覽器端運行的人臉識別框架,即Face-api.js 。它基于TensorFlow.js,完成了從人臉檢測,提取特征點,計算描述符和人臉匹配等一系列步驟。
識別效果圖
由于此框架的易用性,通過寥寥幾行JavaScript代碼即可完成端到端的識別,以下介紹人臉識別的一般步驟:
人臉檢測
首先,我們從圖片或者視頻幀中定位出人臉位置。框架為我們提供了三種用于人臉檢測的模型。
Tiny Face Detector
Tiny Face Detector是一款性能非常高的實時人臉檢測器,與SSD Mobilenet V1人臉檢測器相比,它更快,更小,資源消耗更少,作為回報,它在檢測小臉時的表現稍差。這個型號極具移動性和網絡友好性,因此它應該是移動設備和資源有限的客戶端上的GO-TO人臉檢測器。量化模型的大小僅為190 KB(tiny_face_detector_model)。
SSD Mobilenet V1
對于面部檢測,該項目實現了基于MobileNetV1的SSD(單次多盒檢測器)。神經網絡將計算圖像中每個面部的位置,并將返回邊界框以及每個面部的概率。該面部檢測器旨在獲得檢測面部邊界框而不是低推理時間的高精度。量化模型的大小約為5.4 MB(ssd_mobilenetv1_model)。
MTCNN
MTCNN(多任務級聯卷積神經網絡)代表了SSD Mobilenet v1和Tiny Yolo v2的替代面部檢測器,它提供了更多的配置空間。通過調整輸入參數,MTCNN應該能夠檢測各種面部邊界框大小。MTCNN是一個3級級聯CNN,它同時返回5個面部標志點以及每個面的邊界框和分數。此外,型號尺寸僅為2MB。
提取68個特征點
該套件實現了一個非常輕巧,快速,準確的68點面部標志探測器。默認模型的大小僅為350kb(face_landmark_68_model),微小模型僅為80kb(face_landmark_68_tiny_model)。兩種模型都采用深度可分離卷積以及密集連接塊的思想。此外,模型已經在一個標有68個面部標志點的約35k個面部圖像的數據集上進行了訓練。
臉部特征點樣圖
計算描述符
對于面部識別,實現類似ResNet-34的體系結構以從任何給定面部圖像計算面部描述符(具有128個值的特征向量),其用于描述人臉的特征。該模型不僅僅用于訓練的面部集合,這意味著您可以將其用于任何人的面部識別,例如您自己。您可以通過比較它們的面部描述符來確定兩個任意面的相似性,例如通過計算歐氏距離或使用您選擇的任何其他分類器。
完成人臉識別
基于描述符,可以構建人臉識別匹配器。將其于視頻幀中人臉描述符對比,若存在,則可輸出人名及相似度。
補充
此外,項目還有其獨特的表情檢測和年齡檢測功能,具體代碼使用可見github開源項目。
https://github.com/justadudewhohacks/face-api.js
以下為額外功能效果圖:
表情檢測圖
年齡檢測圖