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,则两个人脸具有相同的身份。

参考

致谢

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

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