SeetaFace2
Qt 5.12
CMake
0. SeetaFace2库
SeetaFace2
是一个开源的、全栈的人脸识别引擎,由SeetaFace
公司开发。它包含了构建一套全自动人脸识别系统所需的三个核心模块:人脸检测模块(FaceDetector
)、面部关键点定位模块(FaceLandmarker
)以及人脸特征提取与比对模块(FaceRecognizer
)。此外,还提供了两个辅助模块:FaceTracker
用于人脸跟踪,QualityAssessor
用于人脸质量评估。
SeetaFace2
采用标准 C++ 开发,所有模块均不依赖任何第三方库,支持 x86
架构(Windows、Linux)和 ARM 架构(Android)。它适用于人脸门禁、无感考勤、人脸比对等多种应用场景。
下载:github 链接
seeta::ModelSetting::Device device = seeta::ModelSetting::GPU;
int id = 0;
seeta::ModelSetting FD_model( "D:/Program/SeetaFace/model/fd_2_00.dat", device, id );
seeta::ModelSetting PD_model( "D:/Program/SeetaFace/model/pd_2_00_pts5.dat", device, id );
seeta::ModelSetting FR_model( "D:/Program/SeetaFace/model/fr_2_10.dat", device, id );
seeta::FaceEngine engine( FD_model, PD_model, FR_model, 2, 16 );
//
seeta::ModelSetting::Device device = seeta::ModelSetting::GPU;
int id = 0;
seeta::ModelSetting FD_model( "./model/fd_2_00.dat", device, id );
seeta::ModelSetting FL_model( "./model/pd_2_00_pts81.dat", device, id );
seeta::FaceDetector faceDetector(FD_model);
seeta::FaceLandmarker faceLandmarker(FL_model);
faceDetector->set(seeta::FaceDetector::PROPERTY_VIDEO_STABLE, 1);
1. 人脸检测
- 人脸检测:采用级联卷积神经网络(Cascaded CNN)技术,具有良好的召回率,能够在多种环境下准确检测人脸。
void FaceDetectionThread::detectAndExtract(const cv::Mat &frame) {
cv::Mat rgbFrame;
cv::cvtColor(frame, rgbFrame, cv::COLOR_BGR2RGB);
SeetaImageData seetaImage = {rgbFrame.cols, rgbFrame.rows, rgbFrame.channels(), rgbFrame.data};
// 人脸检测
auto faces = faceDetector->detect(seetaImage);
if (faces.size==0) {
return; // 无人脸检测到
}
}
2. 人脸对比
(1)人脸检测
(2)面部关键点定位模块
std::vector<SeetaPointF>FaceDetectionThread::getImageMarker(const QImage &frame){
std::vector<SeetaPointF> facePoints;
cv::Mat img = Common