#pragma once #ifndef _CLSRETRI_LIB_H_ #define _CLSRETRI_LIB_H_ #include #include "opencv2/opencv.hpp" #define CLSRETRI_CLS_TOP_N 10 #define CLSRETRI_FEAT_DIM 160 #define CLSRETRI_INPUT_WIDTH 224 #define CLSRETRI_INPUT_HEIGHT 224 #define CLSRETRI_CLS_DIM 1000 #define CLSRETRI_ALL_OK 0x00000000 // #define CLSRETRI_OUTPUT_SHAPE_ERROR 0x10030001 // 输出的维度有错误 #define CLSRETRI_INPUT_IMAGE_EMPTY 0x10030002 // 输入的图像为空 #define CLSRETRI_HANDLE_NULL 0x10030003 // 输入的句柄为空 #define CLSRETRI_OUTPUT_NULL 0x10030004 // 输入的返回结构体为空 #define CLSRETRI_SESSION_NULL 0x10030005 // #define CLSRETRI_INIT_MODEL_PATH_NOT_EXIST 0x10030006 // 输入的模型路径不存在 #define CLSRETRI_CREATE_NET_FAILED 0x10030007 // 创建的模型失败 #define CLSRETRI_GET_NET_INPUT_FAILED 0x10030008 // 获取输入tensor失败 #define CLSRETRI_GET_NET_OUTPUT_CLS_FAILED 0x10030009 // 获取输出tensor失败 #define CLSRETRI_GET_NET_OUTPUT_FEAT_FAILED 0x1003000A // 获取输出tensor失败 #define CLSRETRI_GET_NET_SESSION_FAILED 0x1003000B // 获取输出session失败 #define CLSRETRI_FREE_SESSION_FAILED 0x1003000C // 释放session失败 #define CLSRETRI_INPUT_SIZE_ERROR 0x1003000D // 模型中获取的输入形状与设置的不一致 #define CLSRETRI_OUTPUT_CLS_SIZE_ERROR 0x10030010 // 模型中获取的输出维度与设置的不一致 #define CLSRETRI_OUTPUT_FEA_SIZE_ERROR 0x10030011 // 模型中获取的输出维度与设置的不一致 #define CLSRETRI_GETINFO_NAME_ILLEGAL 0x10030012 // 获取当前信息的Name非法 #define CLSRETRI_INIT_CACHE_DIR_CREATE_FAILED 0x10030013 // 创建cache dir失败 typedef struct _CLSRETRI_REGISTER_RES_ { int success_flag; // 注册成功标志位:0-失败 1-成功 }CLSRETRI_REGISTER_RES; // 分类的结果 typedef struct _CLSRETRI_CLS_RET_ { float prob; // 置信度 int label; // 识别类别 }CLSRETRI_CLS_RET; // 检索的结果 typedef struct _CLSRETRI_RETRI_RET_ { float similarity; // 相似度 int index; // 检索位置 int label; // 检索类别 }CLSRETRI_RETRI_RET; typedef struct _CLSRETRI_INPUT_ { cv::Mat img; }CLSRETRI_INPUT; typedef struct _CLSRETRI_OUTPUT_ { CLSRETRI_CLS_RET cls[CLSRETRI_CLS_TOP_N]; float feat[CLSRETRI_FEAT_DIM]; }CLSRETRI_OUTPUT; // 定义算法的识别设备 typedef enum _CLSRETRI_DEVICE_ { CLSRETRI_CPU = 0x0000, // CPU CLSRETRI_GPU = 0x0001, // GPU }CLSRETRI_DEVICE; /*************************************************************************************************** * 功 能: 初始化 * 参 数: * const char* model_path - I 模型路径或者cache路径文件夹路径 * 1. 内部会判断是文件夹还是文件 * 2. 如果是文件夹,则会在该文件夹下产生cache * 3. 如果设置为NULL,则cache产生在当前exe同级目录下 * CLSRETRI_DEVICE device_name - I 设备类型 * void** clsretri_handle - O 句柄 * 返回值: 错误码 ***************************************************************************************************/ int CLSRETRI_Init(const char* model_path, CLSRETRI_DEVICE device_type, void** clsretri_handle); /*************************************************************************************************** * 功 能: 识别 * 参 数: * CLSRETRI_INPUT in_img - I 输入图片 * CLSRETRI_OUTPUT* clsretri_output - O 返回识别结果 * void* handle - I 句柄 * 返回值: 错误码 ***************************************************************************************************/ int CLSRETRI_Process(CLSRETRI_INPUT in_img, CLSRETRI_OUTPUT* clsretri_output, void* handle); /*************************************************************************************************** * 功 能: 获取信息 * 参 数: * void* handle - I 句柄 * char* name - I 信息名字 * 目前支持:running_device * void* info - O 信息 * 返回值: 错误码 ***************************************************************************************************/ int CLSRETRI_GetInfo(void* handle,const char* name, void* info); /*************************************************************************************************** * 功 能: 释放句柄 * 参 数: * void** handle - I 句柄 * 返回值: 错误码 ***************************************************************************************************/ int CLSRETRI_Release(void** handle); #endif