FaceRecog/include/face_sdk.h

68 lines
1.5 KiB
C
Raw Normal View History

2025-10-30 18:37:30 +08:00
#pragma once
#include <vector>
#include <string>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OpenCV ͷ<><CDB7>ʹ<EFBFBD><CAB9>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
namespace cv {
class Mat;
}
// SDK ״̬<D7B4><CCAC>
enum class SDKStatus {
SUCCESS = 0,
MODEL_LOAD_ERROR = -1,
EXTRACTION_ERROR = -2,
NO_FACE_DETECTED = -3,
POOR_QUALITY = -4,
INVALID_INPUT = -5
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
struct FeatureResult {
SDKStatus status;
std::vector<float> feature; // 512ά<32><CEAC><EFBFBD><EFBFBD>
std::string error_message;
};
// <20><><EFBFBD><EFBFBD><EFBFBD>ۼܹ<DBBC><DCB9><EFBFBD><EFBFBD>ġ<EFBFBD>
// FaceSDK <20><EFBFBD><EFBFBD><E1B9A9> C++ <20><><EFBFBD><EFBFBD>
class FaceSDK {
public:
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>SDK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
* @param model_dir <EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>onnx<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ŀ¼·<EFBFBD><EFBFBD>
*/
FaceSDK(const std::string& model_dir);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>Դ
*/
~FaceSDK();
/**
* @brief <EFBFBD>ӿ<EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @param image <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD> (OpenCV Mat, BGR <EFBFBD><EFBFBD>ʽ)
* @return FeatureResult <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
FeatureResult extractFeature(const cv::Mat& image);
/**
* @brief <EFBFBD>ӿ<EFBFBD>2<EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ (<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
* @param feature1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
* @param feature2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
* @return <EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD> (0.0 ~ 1.0)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
*/
static float compareFeatures(const std::vector<float>& feature1,
const std::vector<float>& feature2);
private:
// PImpl ģʽ (Pointer to Implementation)
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>߼<EFBFBD> C++ <20><><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ʵ<EFBFBD><CAB5>ϸ<EFBFBD><CFB8>
// (<28><> FacePipeline, ONNX Runtime, OpenCV <20>ij<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>)<29><>
// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC>dz<EFBFBD><C7B3>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><D2B1><EFBFBD><EFBFBD>ٶȸ<D9B6><C8B8>
class Impl;
Impl* p_impl;
};