基于 DNN 的人脸检测与识别
本节介绍用于人脸检测的 cv::FaceDetectorYN 类和用于人脸识别的 cv::FaceRecognizerSF 类。
本模块需要两个预训练模型(ONNX 格式):
- 人脸检测:
- 大小:338KB
- 在 WIDER Face Val 集上的结果:0.830(easy)、0.824(medium)、0.708(hard)
- 人脸识别
-
大小:36.9MB
-
结果:
数据库 准确率 阈值(normL2) 阈值(cosine) LFW 99.60% 1.128 0.363 CALFW 93.95% 1.149 0.340 CPLFW 91.05% 1.204 0.275 AgeDB-30 94.90% 1.202 0.277 CFP-FP 94.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,或 normL2 距离小于等于 1.128 时,可认为两张人脸具有相同身份。
- https://github.com/ShiqiYu/libfacedetection
- https://github.com/ShiqiYu/libfacedetection.train
- https://github.com/zhongyy/SFace
感谢 Shiqi Yu 教授 和 Yuantao Feng 训练并提供了人脸检测模型。