#pragma once #include #include #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 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& feat1, const std::vector& feat2); private: // Pimpl (Private Implementation) // "Impl" 是一个前向声明的私有类 class Impl; std::unique_ptr m_impl; };