Skip to content

基于 DNN 的人脸检测与识别

本节介绍用于人脸检测的 cv::FaceDetectorYN 类和用于人脸识别的 cv::FaceRecognizerSF 类。

本模块需要两个预训练模型(ONNX 格式):

  • 人脸检测:
    • 大小:338KB
    • 在 WIDER Face Val 集上的结果:0.830(easy)、0.824(medium)、0.708(hard)
  • 人脸识别
    • 大小:36.9MB

    • 结果:

      数据库准确率阈值(normL2)阈值(cosine)
      LFW99.60%1.1280.363
      CALFW93.95%1.1490.340
      CPLFW91.05%1.2040.275
      AgeDB-3094.90%1.2020.277
      CFP-FP94.80%1.2530.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} 分别表示右眼、左眼、鼻尖、右嘴角和左嘴角的坐标。

在完成人脸检测之后,运行以下代码以从人脸图像中提取人脸特征。

在获得两幅人脸图像的特征 feature1 和 feature2 之后,运行以下代码来计算两张人脸之间的身份差异。

例如,当余弦距离大于等于 0.363,或 normL2 距离小于等于 1.128 时,可认为两张人脸具有相同身份。

感谢 Shiqi Yu 教授 和 Yuantao Feng 训练并提供了人脸检测模型。

感谢 Deng 教授、博士生 Zhong 和 硕士生 Wang 训练并提供了人脸识别模型。