OpenCV 4.11.0
开源计算机视觉库
加载中...
搜索中...
无匹配项
基于DNN的人脸检测与识别

上一篇教程: 高级API:TextDetectionModel 和 TextRecognitionModel
下一篇教程: PyTorch分类模型的转换和使用OpenCV Python启动

原作者王成锐,冯元涛
兼容性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,或者NormL2距离小于或等于1.128,则这两张人脸具有相同的身份。

参考

致谢

感谢Yu Shiqi教授冯元涛的模型训练和提供。

感谢邓老师钟同学王同学的模型训练和提供。