2-10. 人脸识别模块封装-注册和查询

添加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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值