FaceRecog/include/face_sdk.h

66 lines
1.6 KiB
C++

#pragma once
#include <vector>
#include <string>
#include "opencv2/opencv.hpp" // 我们在接口中需要 cv::Mat
// 定义 SDK 状态码
enum class SDKStatus {
SUCCESS = 0,
MODEL_LOAD_ERROR = -1, // 模型加载失败
PIPELINE_ERROR = -2, // 管线(算法)执行失败
INVALID_INPUT = -3, // 无效输入(如空图像)
NOT_INITIALIZED = -4 // SDK 未初始化
};
// 特征提取的结果结构体
struct SDKExtractResult {
SDKStatus status;
std::vector<float> feature;
std::string message;
};
/**
* @class FaceSDK
* @brief 封装了 FacePipeline 的 C++ API (使用 Pimpl 惯用法)
* * 这是 JNI 层将要调用的接口
*/
class FaceSDK {
public:
/**
* @brief 构造函数,加载模型
* @param model_dir 包含 .onnx 文件的目录
*/
FaceSDK(const std::string& model_dir);
/**
* @brief 析构函数
*/
~FaceSDK();
/**
* @brief 检查 SDK 是否成功初始化
*/
bool IsInitialized() const;
/**
* @brief 提取人脸特征
* @param image BGR 格式的 cv::Mat 图像
* @return SDKExtractResult 包含状态和特征向量
*/
SDKExtractResult ExtractFeature(const cv::Mat& image);
/**
* @brief 比较两个特征向量
* @param feat1 特征1
* @param feat2 特征2
* @return 余弦相似度
*/
float Compare(const std::vector<float>& feat1, const std::vector<float>& feat2);
private:
// Pimpl (Private Implementation)
// "Impl" 是一个前向声明的私有类
class Impl;
std::unique_ptr<Impl> m_impl;
};