1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#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