66 lines
1.6 KiB
C++
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;
|
|
}; |