OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
基於 DNN 的人臉檢測與識別

上一個教程: 高階API:TextDetectionModel和TextRecognitionModel
下一個教程: PyTorch分類模型轉換及使用OpenCV Python啟動

原作者Chengrui Wang, Yuantao Feng
相容性OpenCV >= 4.5.4

簡介

在本節中,我們介紹了用於人臉檢測的cv::FaceDetectorYN類和用於人臉識別的cv::FaceRecognizerSF類。

模型

本模組預訓練並需要兩個ONNX格式的模型

  • 人臉檢測:
    • 大小:338KB
    • 在WIDER Face Val資料集上的結果:0.830(簡單), 0.824(中等), 0.708(困難)
  • 人臉識別
    • 大小:36.9MB
    • 結果
資料庫準確率閾值 (normL2)閾值 (cosine)
LFW99.60% 1.128 0.363
CALFW93.95% 1.149 0.340
CPLFW91.05% 1.204 0.275
AgeDB-3094.90% 1.202 0.277
CFP-FP94.80% 1.253 0.212

程式碼

解釋

檢測輸出faces是一個CV_32F型別的二維陣列,其行是檢測到的人臉例項,列是人臉的位置和5個面部關鍵點。每行的格式如下:

x1, y1, w, h, x_re, y_re, x_le, y_le, x_nt, y_nt, x_rcm, y_rcm, x_lcm, y_lcm

,其中x1, y1, w, h是人臉邊界框的左上角座標、寬度和高度,{x, y}_{re, le, nt, rcm, lcm}分別代表右眼、左眼、鼻尖、嘴角右角和嘴角左角的座標。

人臉識別

在人臉檢測之後,執行以下程式碼從面部影像中提取人臉特徵。

獲得兩張面部影像的人臉特徵feature1feature2後,執行以下程式碼計算兩個人臉之間的身份差異。

例如,如果餘弦距離大於或等於0.363,或者L2範數距離小於或等於1.128,則兩個人臉具有相同的身份。

參考

致謝

感謝虞士琦教授封元濤訓練並提供了人臉檢測模型。

感謝鄧偉洪教授鍾永逸博士生王程睿碩士生訓練並提供了人臉識別模型。