File size: 6,200 Bytes
03a2d97 |
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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
#ifndef __CLIP_H__
#define __CLIP_H__
#if defined(__cplusplus)
extern "C"
{
#endif
#define CLIP_DEVICES_COUNT 16
#define CLIP_VERSION_LEN 32
#define CLIP_KEY_MAX_LEN 64
#define CLIP_PATH_LEN 128
typedef enum
{
clip_errcode_failed = -1,
clip_errcode_success = 0,
clip_errcode_invalid_ptr,
clip_errcode_sysinit_failed,
clip_errcode_sysdeinit_failed,
clip_errcode_axcl_sysinit_failed,
clip_errcode_axcl_sysdeinit_failed,
clip_errcode_create_failed = 0x10000,
clip_errcode_create_failed_sys,
clip_errcode_create_failed_ienc,
clip_errcode_create_failed_tenc,
clip_errcode_create_failed_vocab,
clip_errcode_create_failed_db,
clip_errcode_destroy_failed = 0x20000,
clip_errcode_add_failed = 0x30000,
clip_errcode_add_failed_key_exist,
clip_errcode_add_failed_encode_image,
clip_errcode_add_failed_push_db,
clip_errcode_remove_failed = 0x40000,
clip_errcode_remove_failed_key_not_exist,
clip_errcode_remove_failed_del_db,
clip_errcode_match_failed = 0x50000,
clip_errcode_match_failed_encode_text,
clip_errcode_match_failed_encode_image,
} clip_errcode_e;
typedef enum
{
unknown_device = 0,
host_device = 1,
axcl_device = 2
} clip_devive_e;
typedef void *clip_handle_t;
typedef struct
{
struct
{
char available;
char version[CLIP_VERSION_LEN];
struct
{
int remain;
int total;
} mem_info;
} host;
struct
{
char host_version[CLIP_VERSION_LEN];
char dev_version[CLIP_VERSION_LEN];
unsigned char count;
struct
{
int temp;
int cpu_usage;
int npu_usage;
struct
{
int remain;
int total;
} mem_info;
} devices_info[CLIP_DEVICES_COUNT];
} devices;
} clip_devices_t;
typedef struct
{
clip_devive_e dev_type; // Device type
char devid; // axcl device ID
char text_encoder_path[CLIP_PATH_LEN]; // Text encoder model path
char image_encoder_path[CLIP_PATH_LEN]; // Image encoder model path
char tokenizer_path[CLIP_PATH_LEN]; // Tokenizer model path
char isCN; // Whether it's a Chinese model (0: English, 1: Chinese)
char db_path[CLIP_PATH_LEN]; // Database path (if empty path is specified, a folder will be created)
} clip_init_t;
typedef struct
{
unsigned char *data;
int width;
int height;
int channels;
int stride;
} clip_image_t;
typedef struct
{
char key[CLIP_KEY_MAX_LEN];
float score;
} clip_result_item_t;
/**
* @brief Enumerate available devices in the current system
* @param devices Pointer to device information structure
* @return int Returns 0 on success, -1 on failure
*/
int clip_enum_devices(clip_devices_t *devices);
/**
* @brief Initialize CLIP system resources
* @param dev_type Device type
* @param devid Device ID
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_sys_init(clip_devive_e dev_type, char devid);
/**
* @brief Deinitialize CLIP system resources
* @param dev_type Device type
* @param devid Device ID
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_sys_deinit(clip_devive_e dev_type, char devid);
/**
* @brief Create CLIP handle
* @param init_info Pointer to initialization information structure
* @param handle Handle pointer
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_create(clip_init_t *init_info, clip_handle_t *handle);
/**
* @brief Destroy CLIP handle
* @param handle Handle
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_destroy(clip_handle_t handle);
/**
* @brief Add image to CLIP database
* @param handle Handle
* @param key Image key
* @param image Pointer to image structure
* @param overwrite Whether to overwrite
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_add(clip_handle_t handle, char key[CLIP_KEY_MAX_LEN], clip_image_t *image, char overwrite);
/**
* @brief Remove image from CLIP database
* @param handle Handle
* @param key Image key
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_remove(clip_handle_t handle, char key[CLIP_KEY_MAX_LEN]);
/**
* @brief Check if image exists in CLIP database
* @param handle Handle
* @param key Image key
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_contain(clip_handle_t handle, char key[CLIP_KEY_MAX_LEN]);
/**
* @brief Text match CLIP database images (softmax)
* @param handle Handle
* @param text Text
* @param results Pointer to result structure
* @param top_k Top k results
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_match_text(clip_handle_t handle, const char *text, clip_result_item_t *results, int top_k);
/**
* @brief Image match CLIP database images (cosine similarity)
* @param handle Handle
* @param image Pointer to image structure
* @param results Pointer to result structure
* @param top_k Top k results
* @return clip_errcode_e Returns 0 on success, error codes see clip_errcode_e
*/
int clip_match_image(clip_handle_t handle, clip_image_t *image, clip_result_item_t *results, int top_k);
#if defined(__cplusplus)
}
#endif
#endif // __CLIP_H__ |