OpenCV  4.10.0
开放源代码计算机视觉
加载中...
搜索中...
无匹配项
基于 DNN 的人脸检测和识别

上一教程:高级 API:TextDetectionModel 和 TextRecognitionModel
下一教程:转换 PyTorch 分类模型并通过 OpenCV Python 启动

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

简介

在本节中,我们介绍基于 DNN 的人脸检测器 cv::FaceDetectorYN 类和基于 DNN 的人脸识别器 cv::FaceRecognizerSF 类。

模型

此模块需要有两种预训练模型(ONNX 格式)

  • 人脸检测:
    • 大小:338KB
    • WIDER Face 验证集结果:0.830(简单),0.824(中等),0.708(困难)
  • 人脸识别
    • 大小:36.9MB
    • 结果
数据库准确度阈值 (normL2)阈值(余弦)
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} 分别表示右眼、左眼、鼻尖、嘴的右角和左角的坐标。

面部识别

面部检测之后,运行以下代码从面部图像中提取面部特征。

获得两幅面部图像的面部特征 特征 1特征 2 后,运行以下代码计算两张面部之间的身份差异。

例如,如果余弦距离大于或等于 0.363,或范数 L2 距离小于或等于 1.128,则两张面部具有相同身份。

参考

致谢

感谢 于仕琪教授冯元涛 训练并提供了面部检测模型。

感谢 邓教授钟博士生王硕士生 训练并提供了面部识别模型。