OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
基于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}分别代表右眼、左眼、鼻尖、嘴角右角和嘴角左角的坐标。

人脸识别

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

获取两张面部图像的特征*feature1*和*feature2*后,运行以下代码计算两张人脸的身份差异。

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

参考

致谢

感谢 虞士琦教授冯元涛 训练并提供了人脸检测模型。

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