libclassify.h 4.41 KB
#pragma once
#ifndef _CLASSIFY_LIB_H_
#define _CLASSIFY_LIB_H_

#include <vector>
 
#include "opencv2/opencv.hpp"

#define		CLASSIFY_CLS_TOP_N 10
#define		CLASSIFY_FEAT_DIM 160
#define		CLASSIFY_INPUT_WIDTH 224
#define		CLASSIFY_INPUT_HEIGHT 224
#define		CLASSIFY_CLS_DIM 1000

#define		CLASSIFY_ALL_OK								0x00000000			//
#define		CLASSIFY_OUTPUT_SHAPE_ERROR					0x10030001			// 输出的维度有错误
#define		CLASSIFY_INPUT_IMAGE_EMPTY					0x10030002			// 输入的图像为空
#define		CLASSIFY_HANDLE_NULL						0x10030003			// 输入的句柄为空
#define		CLASSIFY_OUTPUT_NULL						0x10030004			// 输入的返回结构体为空
#define		CLASSIFY_SESSION_NULL						0x10030005			// 
#define		CLASSIFY_INIT_MODEL_PATH_NOT_EXIST			0x10030006			// 输入的模型路径不存在
#define		CLASSIFY_CREATE_NET_FAILED					0x10030007			// 创建的模型失败
#define		CLASSIFY_GET_NET_INPUT_FAILED				0x10030008			// 获取输入tensor失败
#define		CLASSIFY_GET_NET_OUTPUT_CLS_FAILED			0x10030009			// 获取输出tensor失败
#define		CLASSIFY_GET_NET_OUTPUT_FEAT_FAILED			0x1003000A			// 获取输出tensor失败
#define		CLASSIFY_GET_NET_SESSION_FAILED				0x1003000B			// 获取输出session失败
#define		CLASSIFY_FREE_SESSION_FAILED				0x1003000C			// 释放session失败
#define		CLASSIFY_INPUT_SIZE_ERROR					0x1003000D			// 模型中获取的输入形状与设置的不一致
#define		CLASSIFY_OUTPUT_CLS_SIZE_ERROR				0x10030010			// 模型中获取的输出维度与设置的不一致
#define		CLASSIFY_OUTPUT_FEA_SIZE_ERROR				0x10030011			// 模型中获取的输出维度与设置的不一致
#define		CLASSIFY_GETINFO_NAME_ILLEGAL				0x10030012			// 获取当前信息的Name非法
#define		CLASSIFY_INIT_CACHE_DIR_CREATE_FAILED		0x10030013			// 创建cache dir失败

typedef struct _CLASSIFY_REGISTER_RES_
{
	int success_flag;	// 注册成功标志位:0-失败  1-成功
}CLASSIFY_REGISTER_RES;

// 分类的结果
typedef struct _CLASSIFY_CLS_RET_
{
	float prob;			// 置信度
	int label;			// 识别类别
}CLASSIFY_CLS_RET;

// 检索的结果
typedef struct _CLASSIFY_RETRI_RET_
{
	float similarity;   // 相似度
	int index;	 		// 检索位置
	int label;			// 检索类别
}CLASSIFY_RETRI_RET;

typedef struct _CLASSIFY_INPUT_
{
	cv::Mat img;

}CLASSIFY_INPUT;

typedef struct _CLASSIFY_OUTPUT_
{
	CLASSIFY_CLS_RET cls[CLASSIFY_CLS_TOP_N];
	float feat[CLASSIFY_FEAT_DIM];
}CLASSIFY_OUTPUT;


// 定义算法的识别设备
typedef enum _CLASSIFY_DEVICE_
{
	CLASSIFY_CPU = 0x0000,  // CPU
	CLASSIFY_GPU = 0x0001,  // GPU
}CLASSIFY_DEVICE;



/***************************************************************************************************
* 功  能: 初始化
* 参  数:
*         const char*				model_path		- I       模型路径或者cache路径文件夹路径
*																	1. 内部会判断是文件夹还是文件
*                                                                   2. 如果是文件夹,则会在该文件夹下产生cache
*                                                                   3. 如果设置为NULL,则cache产生在当前exe同级目录下
*         CLASSIFY_DEVICE			device_name		- I       设备类型
*         void**					CLASSIFY_handle	- O       句柄
* 返回值: 错误码
***************************************************************************************************/
int CLASSIFY_Init(const char* model_path,
					CLASSIFY_DEVICE device_type,
					void** CLASSIFY_handle);


/***************************************************************************************************
* 功  能: 识别
* 参  数:
*         CLASSIFY_INPUT		in_img				- I			输入图片
*         CLASSIFY_OUTPUT*		CLASSIFY_output		- O			返回识别结果
*         void*					handle				- I			句柄
* 返回值: 错误码
***************************************************************************************************/
int CLASSIFY_Process(CLASSIFY_INPUT in_img, CLASSIFY_OUTPUT* CLASSIFY_output, void* handle);

/***************************************************************************************************
* 功  能: 获取信息
* 参  数:
*         void*					handle				- I			句柄
*         char*					name				- I			信息名字
*																目前支持:running_device
*         void*					info				- O			信息
* 返回值: 错误码
***************************************************************************************************/
int CLASSIFY_GetInfo(void* handle,const char* name, void* info);

/***************************************************************************************************
* 功  能: 释放句柄
* 参  数:
*         void**			handle	- I			句柄
* 返回值: 错误码
***************************************************************************************************/
int CLASSIFY_Release(void** handle);



#endif