添加C++类文件,将模块封装成类
qfaceobject.h 添加seetaface头文件
#include <seeta/FaceEngine.h>
定义类指针
private:
seeta::FaceEngine *fenginetr;
构造析构函数
public:
explicit QFaceObject(QObject *parent = nullptr);
~QFaceObject();
初始化人脸引擎
可以选cpu或者gpu
QFaceObject::QFaceObject(QObject *parent) : QObject(parent)
{
//初始化
seeta::ModelSetting FDmode("C:/SeetaFace/bin/model/fd_2_00.dat", seeta::ModelSetting::CPU,0);//modelsetting为seetamodelsetting的派生类
seeta::ModelSetting PDmode("C:/SeetaFace/bin/model/pd_2_00_pts5.dat", seeta::ModelSetting::CPU,0);
seeta::ModelSetting FRmode("C:/SeetaFace/bin/model/fr_2_10.dat", seeta::ModelSetting::CPU,0);
this->fengineptr = new seeta::FaceEngine(FDmode, PDmode, FRmode);
}
封装注册查询函数
public slots:
int64_t face_register(cv::Mat& faceimage);
int face_query(cv::Mat& faceimage);
人脸注册
int64_t QFaceObject::face_register(cv::Mat &faceimage)
{
// 把opencv的Mat数据转为seetaface的数据
SeetaImageData simage;
simage.data = faceimage.data;
simage.width = faceimage.cols;
simage.height = faceimage.rows;
simage.channels = faceimage.channels();
int64_t faceid = this->fengineptr->Register(simage);//注册返回一个人脸id
if(faceid>=0){
fengineptr->Save("./face.db");
}
return faceid;
}
人脸查询
int QFaceObject::face_query(cv::Mat &faceimage)
{
// 把opencv的Mat数据转为seetaface的数据
SeetaImageData simage;
simage.data = faceimage.data;
simage.width = faceimage.cols;
simage.height = faceimage.rows;
simage.channels = faceimage.channels();
float similarity = 0;
int64_t faceid = fengineptr->Query(simage, &similarity);//运行时间较长
return faceid;
}