基于Face-api.js框架,在前端完成人臉識別
本文為大家介紹的是一款在瀏覽器端運(yùn)行的人臉識別框架,即Face-api.js 。它基于TensorFlow.js,完成了從人臉檢測,提取特征點(diǎn),計(jì)算描述符和人臉匹配等一系列步驟。

識別效果圖
由于此框架的易用性,通過寥寥幾行JavaScript代碼即可完成端到端的識別,以下介紹人臉識別的一般步驟:
人臉檢測
首先,我們從圖片或者視頻幀中定位出人臉位置。框架為我們提供了三種用于人臉檢測的模型。
Tiny Face Detector
Tiny Face Detector是一款性能非常高的實(shí)時人臉檢測器,與SSD Mobilenet V1人臉檢測器相比,它更快,更小,資源消耗更少,作為回報(bào),它在檢測小臉時的表現(xiàn)稍差。這個型號極具移動性和網(wǎng)絡(luò)友好性,因此它應(yīng)該是移動設(shè)備和資源有限的客戶端上的GO-TO人臉檢測器。量化模型的大小僅為190 KB(tiny_face_detector_model)。
SSD Mobilenet V1
對于面部檢測,該項(xiàng)目實(shí)現(xiàn)了基于MobileNetV1的SSD(單次多盒檢測器)。神經(jīng)網(wǎng)絡(luò)將計(jì)算圖像中每個面部的位置,并將返回邊界框以及每個面部的概率。該面部檢測器旨在獲得檢測面部邊界框而不是低推理時間的高精度。量化模型的大小約為5.4 MB(ssd_mobilenetv1_model)。
MTCNN
MTCNN(多任務(wù)級聯(lián)卷積神經(jīng)網(wǎng)絡(luò))代表了SSD Mobilenet v1和Tiny Yolo v2的替代面部檢測器,它提供了更多的配置空間。通過調(diào)整輸入?yún)?shù),MTCNN應(yīng)該能夠檢測各種面部邊界框大小。MTCNN是一個3級級聯(lián)CNN,它同時返回5個面部標(biāo)志點(diǎn)以及每個面的邊界框和分?jǐn)?shù)。此外,型號尺寸僅為2MB。
提取68個特征點(diǎn)
該套件實(shí)現(xiàn)了一個非常輕巧,快速,準(zhǔn)確的68點(diǎn)面部標(biāo)志探測器。默認(rèn)模型的大小僅為350kb(face_landmark_68_model),微小模型僅為80kb(face_landmark_68_tiny_model)。兩種模型都采用深度可分離卷積以及密集連接塊的思想。此外,模型已經(jīng)在一個標(biāo)有68個面部標(biāo)志點(diǎn)的約35k個面部圖像的數(shù)據(jù)集上進(jìn)行了訓(xùn)練。

臉部特征點(diǎn)樣圖
計(jì)算描述符
對于面部識別,實(shí)現(xiàn)類似ResNet-34的體系結(jié)構(gòu)以從任何給定面部圖像計(jì)算面部描述符(具有128個值的特征向量),其用于描述人臉的特征。該模型不僅僅用于訓(xùn)練的面部集合,這意味著您可以將其用于任何人的面部識別,例如您自己。您可以通過比較它們的面部描述符來確定兩個任意面的相似性,例如通過計(jì)算歐氏距離或使用您選擇的任何其他分類器。
完成人臉識別
基于描述符,可以構(gòu)建人臉識別匹配器。將其于視頻幀中人臉描述符對比,若存在,則可輸出人名及相似度。
補(bǔ)充
此外,項(xiàng)目還有其獨(dú)特的表情檢測和年齡檢測功能,具體代碼使用可見github開源項(xiàng)目。
https://github.com/justadudewhohacks/face-api.js
以下為額外功能效果圖:

表情檢測圖

年齡檢測圖




























