Vlm pipeline多模态算法说明¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 09/16/2025 |
1. 概述¶
1.1. 算法说明¶
vlm pipeline多模态算法能够实现对图片的万物检测、多目标跟踪、person画中画跟踪、以文搜图、图生文、文搜视频等多个功能。
由于此pipeline集成多个功能,各个功能之间可以相互配合达到更好的效果,所以本文档为了用户更好地使用和集成算法,特此对不同的功能进行说明。
-
首先对第一种使用方式:检测->以文搜图的视觉部分,具体代码可参考test.cpp中 runRetVisionDemo
算法开启了检测和以文搜图的视觉部分
接口调用为:ALGO_VLM_Create -> ALGO_VLM_Init -> ALGO_VLM_Run -> ALGO_VLM_Deinit -> ALGO_VLM_Release
初始化参数和运行参数设置见cpp中runRetVisionDemo。
-
第二种方式:以文搜图,具体代码可参考test.cpp中 runRetTextDemo
算法只开启以文搜图的文本部分(搜索),因为文本部分的模型较大,在开启搜索过程中,可以release第一种方式注册过程
接口调用为:ALGO_VLM_Create -> ALGO_VLM_Init -> ALGO_VLM_Run -> ALGO_VLM_GetCosSimi -> ALGO_VLM_Deinit -> ALGO_VLM_Release
初始化参数和运行参数设置见test.cpp中runRetTextDemo。主要区别是handle的初始化参数和运行过程中参数的设置。
-
第三种运行方式:检测、多目标跟踪,具体代码参考test.cpp,runDetMotDemo
算法运行会进行检测和多目标跟踪,输入检测框和跟踪id
接口调用为:ALGO_VLM_Create -> ALGO_VLM_Init -> ALGO_VLM_Run -> ALGO_VLM_Deinit -> ALGO_VLM_Release
具体参数详见test.cpp的代码
配置环境变量export SGS_DET_SAVE_DIR=dump可以保存检测算法输入图像数据(数据类型与模型输入数据类型一致),其中dump为输入保存的文件夹,需要用户自行创建。
-
第四种运行方式:远距离检测/跟踪,具体代码参考test.cpp,runLongDisDetDemo
算法开启了运动检测(md),目标检测(det)以及单目标跟踪(sot)三个算法。
具体流程为先从画面中定位运动区域,然后对运动区域进行目标检测,然后在目标检测的结果中选定一个目标开始跟踪。
接口调用为:ALGO_VLM_Create -> ALGO_VLM_Init -> ALGO_VLM_Run -> ALGO_VLM_SetSot -> ALGO_VLM_Deinit -> ALGO_VLM_Release
-
第五种运行方式:文搜视频,具体代码参考test.cpp,runVRetDemo
如果是以文搜视频,则流程和以文搜图类似,先测试离线视频的embedding,后续用文本的embedding进行搜索。
runVRetDemo展示了文搜视频的一种分类用法。具体使用参考代码。
接口调用为:ALGO_VLM_Create -> ALGO_VLM_Init -> ALGO_VLM_Run -> ALGO_VLM_GetCosSimi -> ALGO_VLM_Deinit -> ALGO_VLM_Release
-
第六种运行方式:人/车重识别(reid)算法,具体代码参考test.cpp,runReIdDemo
首先检测画面中的人/车目标,然后进行目标质量评估(可选),如果目标质量满足要求则提取对应的目标区域的特征,与特征库中的特征进行匹配判断是否为同一目标。
接口调用为:ALGO_VLM_Create -> ALGO_VLM_Init -> ALGO_VLM_Run -> ALGO_VLM_Deinit -> ALGO_VLM_Release
-
第七种方式:图生文,具体代码可参考test.cpp,runSgptvDemo
接口调用为:ALGO_VLM_Create -> ALGO_VLM_Init -> ALGO_VLM_Run -> ALGO_VLM_Deinit -> ALGO_VLM_Release
备注:图生文的prompt,中文模型一定为“简要描述图片内容”,英文模型为“Briefly describe the content of the picture”,区域检测为“What does the region
describe?”,“ ”替换为实际区域坐标。注意文件的编码格式一定要为utf-8
1.2. 模型和算法性能¶
| 算法列表 | model | 耗时(ms) | ROM(MB) | RAM(MB) | bandwidth(MB) |
|---|---|---|---|---|---|
| 图生文 | vision | 17.578 | 31.56 | 32.18 | 37 |
| llm | 71.78+5.1/token | 52.1 | 54.32 | 44/token+27 | |
| 以文搜图 | vision | 17.578 | 31.56 | 32.18 | 37 |
| text | 6.1 | 98.9 | 98.98 | 49 | |
| 万物检测 | ovdet | 23.2 | 8.8 | 15.4 | 171 |
| 文搜视频 | vret_text | 6.5 | 102.9 | 102.9 | 53.6 |
| vret_vision | 275 | 34.7 | 43 | 539 |
| pipeline | 模型列表 | 耗时(ms) | ROM(MB) | RAM(MB) | bandwidth(MB) |
|---|---|---|---|---|---|
| (视觉理解流程)万物检测+图像特征+图生文 | ovdet+vision+llm | 112.558+5.1/token | 92.46 | 101.9 | 235+44/token |
| 文搜流程 | text | 6.1 | 98.9 | 98.98 | 49 |
1.3. 检测模型类别说明¶
| 模型 | 功能 | 输入维度(w*h) | 输入格式 |
|---|---|---|---|
| sovd_sd_sfsd_sbdy48.img | 输出的类别共13类,分别为行人(class_id=0)、自行车(class_id=1)、轿车(class_id=2) 、摩托车(class_id=3)、公交车(class_id=4)、卡车(class_id=5)、猫(class_id=6)、狗(class_id=7)、人头(class_id=8)、人脸(class_id=9)、火焰(class_id=10)、烟雾(class_id=11)、包裹(class_id=12) | 800*480 | yuvsp420_nv12 |
| sovd_sad_sd_sfsd_sbdy48.img | 输出的类别共15类,分别为熊(class_id=0)、鳄鱼(class_id=1)、行人(class_id=2)、自行车(class_id=3)、轿车(class_id=4) 、摩托车(class_id=5)、公交车(class_id=6)、卡车(class_id=7)、猫(class_id=8)、狗(class_id=9)、人头(class_id=10)、人脸(class_id=11)、火焰(class_id=12)、烟雾(class_id=13)、包裹(class_id=14) | 800*480 | yuvsp420_nv12 |
2. API参考¶
该功能模块提供以下API:
| API名称 | 功能 |
|---|---|
| ALGO_VLM_Create | 创建句柄 |
| ALGO_VLM_Init | 初始化句柄 |
| ALGO_VLM_Run | 运行算法 |
| ALGO_VLM_SetSot | 运行图片描述和理解 |
| ALGO_VLM_GetCosSimi | 计算余弦相似度 |
| ALGO_VLM_Deinit | 反初始化句柄 |
| ALGO_VLM_Release | 删除句柄 |
2.1. ALGO_VLM_Create¶
-
功能
创建句柄
-
语法
MI_S32 ALGO_VLM_Create(VLMPipeline_t* pipeline); -
形参
参数名称 描述 输入/输出 pipeline 句柄 输入 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_vlm_api.h
-
库文件:libsgsalgo_vlm.a/libsgsalgo_vlm.so
-
2.2. ALGO_VLM_Init¶
-
功能
初始化句柄
-
语法
MI_S32 ALGO_VLM_Init(VLMPipeline_t pipeline, const VLMInit_t *init); -
形参
参数名称 描述 输入/输出 pipeline 句柄 输入 init 配置tokenizer文件夹路径,模型文件路径等 输入 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
结构体 VLMInit_t
-
头文件:sgs_vlm_api.h
-
库文件:libsgsalgo_vlm.a/libsgsalgo_vlm.so
-
2.3. ALGO_VLM_Run¶
-
功能
算法运行,根据不同的设置参数,运行不同的功能
-
语法
MI_S32 ALGO_VLM_Run(VLMPipeline_t pipeline, const VLMParams_t *params, const VLMInput_t *input, VLMOutput_t *output); -
形参
参数名称 描述 输入/输出 pipeline 句柄 输入 params 配置参数,参数配置不同开启的功能不同 输入 input 图像数据或者prompt 输入 output 各个功能的结果 输出 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_vlm_api.h
-
库文件:libsgsalgo_vlm.a/libsgsalgo_vlm.so
2.4. ALGO_VLM_SetSot¶
-
功能
设置单目标跟踪的目标。
-
语法
MI_S32 ALGO_VLM_SetSot(VLMPipeline_t pipeline, const VLMInput_t *input, VLMOutput_t *output); -
形参
参数名称 描述 输入/输出 pipeline 句柄 输入 input 图片和目标个坐标信息 输入 output 输出的目标跟踪结果 输出 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_vlm_api.h
-
库文件:libsgsalgo_vlm.a/libsgsalgo_vlm.so
-
2.5. ALGO_VLM_GetCosSimi¶
-
功能
计算以文搜图中的余弦相似度
-
语法
MI_S32 ALGO_VLM_GetCosSimi(VLMPipeline_t pipeline, const MI_FLOAT* query, MI_FLOAT* source, MI_U32 batch, MI_FLOAT* similarity); -
形参
参数名称 描述 输入/输出 pipeline 句柄 输入 query 文本的特征 输入 source 注册的图片特征 输入 batch 注册照片特征数量 输入 similarity 余弦相似度 输出 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_vlm_api.h
-
库文件:libsgsalgo_vlm.a/libsgsalgo_vlm.so
-
2.6. ALGO_VLM_Deinit¶
-
功能
反初始化句柄
-
语法
MI_S32 ALGO_VLM_Deinit(VLMPipeline_t pipeline); -
形参
参数名称 描述 输入/输出 pipeline 句柄 输入 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_vlm_api.h
-
库文件:libsgsalgo_vlm.a/libsgsalgo_vlm.so
-
2.7. ALGO_VLM_Release¶
-
功能
删除句柄
-
语法
MI_S32 ALGO_VLM_Release(VLMPipeline_t pipeline); -
形参
参数名称 描述 输入/输出 pipeline 句柄 输入 -
返回值
返回值 描述 0 成功 -
依赖
-
头文件:sgs_vlm_api.h
-
库文件:libsgsalgo_vlm.a/libsgsalgo_vlm.so
-
3. 结构体说明¶
vlm相关数据类型定义如下:
| 数据类型 | 定义 |
|---|---|
| VLMInit_t | 算法初始化结构体 |
| VLMImage_t | 图像数据结构体 |
| VLMInput_t | 算法输入参数结构体 |
| VLMBox_t | 检测跟踪框结构体 |
| VLMParams_t | 算法输入结构体 |
| VLMRetSgptvResult | 文搜图和图生文视觉输出结构体 |
| VLMOutput_t | 算法输出结构图 |
| VLMCropFunc | 扣图函数 |
| VLMVRetResult | 文搜视频输出结构体 |
| VLMFrResult_t | 人脸识别算法输出结构体 |
| VLMReIdResult_t | 人/车重识别算法输出结果结构体 |
3.1 VLMInit_t¶
-
说明
算法初始化结构体
-
定义
typedef struct { // common char ipu_firmware_path[MAX_VLM_STRLEN]; // ipu_firmware.bin path MI_BOOL create_device; // set false to create ipu device outside algo lib MI_BOOL destroy_device; // set false to destroy ipu device outside algo lib VLMCropFunc crop_func; // md MI_BOOL init_md; MI_S32 ive_handle; MI_U32 md_in_width; MI_U32 md_in_height; MI_U32 md_in_stride; //det and track MI_BOOL init_det; MI_BOOL init_mot; char det_model[MAX_VLM_STRLEN]; char det_cls[MAX_VLM_STRLEN]; // sot MI_BOOL init_sot; char det4sot_model[MAX_VLM_STRLEN]; char sot_model[MAX_VLM_STRLEN]; //fr MI_BOOL init_fr; char fr_det_model[MAX_VLM_STRLEN]; char fr_quality_model[MAX_VLM_STRLEN]; char fr_feat_model[MAX_VLM_STRLEN]; char fr_emo_model[MAX_VLM_STRLEN]; //ret_sgptv MI_BOOL init_ret; char vision_model[MAX_VLM_STRLEN]; char json_path4ret[MAX_VLM_STRLEN]; char ret_text_model[MAX_VLM_STRLEN]; MI_BOOL init_sgptv; char sgptv_vision_model[MAX_VLM_STRLEN]; char llm_head_model[MAX_VLM_STRLEN]; char llm_decoder_model[MAX_VLM_STRLEN]; char llm_embedding_model[MAX_VLM_STRLEN]; char json_path4spgtv[MAX_VLM_STRLEN]; //vret MI_BOOL init_vret; char vret_vision_model[MAX_VLM_STRLEN]; char json_path4vret[MAX_VLM_STRLEN]; char vret_text_model[MAX_VLM_STRLEN]; //reid MI_BOOL init_reid; char reid_feat_model[MAX_VLM_STRLEN]; char reid_quality_model[MAX_VLM_STRLEN]; } VLMInit_t; -
成员
成员名称 描述 ipu_firmware_path ipu_firmware的路径,没有则不用填 create_device 是否在算法库内进行IPU device的创建,默认为true,即在库内创建,在需同时调用算法库时可设置为false并在外部手动创建IPU device destroy_device 是否在算法库内进行IPU device的销毁,默认为true,即在库内销毁,在需同时调用算法库时可设置为false并在外部手动销毁IPU device crop_func 扣图函数,具体可参考test.cpp中cropByScalar函数 init_md 是否初始化运动目标检测算法 ive_handle 开启md时需要ive的句柄 md_in_width ive sad输入宽(一般按照输入帧宽高将长边缩放至约480后的宽度,比如输入1920x1080可设置为480) md_in_height ive sad输入高(一般按照输入帧宽高将长边缩放至约480后的高度, 比如输入1920x1080可设置为272) md_in_stride ive sad输入stride init_det 是否初始化检测功能 init_mot 初始化多目标跟踪算法 det_model 检测模型 det_cls 万物检测配置的类别,只有ovdet才需要配置 init_sot 是否开启单目标跟踪 det4sot_model 开启单目标跟踪所需的检测模型 sot_model 单目标跟踪的模型 init_ret 是否初始化以文搜图 init_sgptv 是否初始化图生文 vision_model 以文搜图视觉模型 sgptv_vision_model 图生文视觉模型 json_path4ret 以文搜图tokenizer的json文件夹,只有在文搜的时候配置 ret_text_model 以文搜图的文本模型 llm_head_model 图生文的语言模型的head 模型路径 llm_decoder_model 图生文的语言decoder 模型路径 llm_embedding_model 图生文的embedding 模型路径 json_path4spgtv 图生文的tokenizer的json文件夹 init_vret 是否初始化文搜视频算法 vret_vision_model 文搜视频的视觉模型 json_path4vret 文搜视频tokenizer的json文件夹 vret_text_model 文搜视频的文本模型 init_reid 是否开启人/车重识别 reid_feat_model 人/车重识别特征提取模型 reid_quality_model 人/车重识别质量评估模型 -
相关数据类型及接口
3.2 VLMImage_t¶
-
说明
图片数据结构体
-
定义
typedef struct { void *p_vir_addr; MI_PHY phy_addr; MI_U32 buf_size; MI_U64 pts; MI_U16 width; MI_U16 height; MI_IPU_ELEMENT_FORMAT format; MI_U16 width_stride; MI_U16 height_stride; } VLMImage_t; -
成员
成员名称 描述 p_vir_addr 图像数据的虚拟地址 phy_addr 图像数据的物理地址 buf_size 图像数据buffer的大小 pts 图像数据的pts width 图像的宽 height 图像的高 format 图像的数据格式 width_stride 图片宽的stride height_stride 图片高的stride -
相关数据类型及接口
3.3 VLMInput_t¶
-
说明
算法输入数据结构体
-
定义
typedef struct { // common VLMImage_t current_frame; // sot VLMBox_t track_obj; //ret char prompt[MAX_VLM_STRLEN]; VLMBox_t ret_roi; //sgptv char sgptv_prompt[MAX_VLM_STRLEN]; VLMBox_t vision_roi; //vret char vret_prompt[MAX_VLM_STRLEN]; } VLMInput_t; -
成员
成员名称 描述 current_frame 当前帧的数据 track_obj 单目标跟踪设置的跟踪目标 prompt 文搜过程中的提示词 ret_roi 指定文搜区域 (参数设置ret_topk_boxes为1) sgptv_prompt 图生文的提示词 vision_roi 指定图生文区域,优先级最高,指定后视觉特征也是此区域 vret_prompt 文搜视频的提示词 -
相关数据类型及接口
3.4 VLMBox_t¶
-
说明
检测跟踪框结构体
-
定义
typedef struct { MI_U32 x; MI_U32 y; MI_U32 width; MI_U32 height; MI_U32 class_id; MI_FLOAT score; MI_FLOAT distance; MI_U64 pts; MI_U64 track_id; } VLMBox_t; -
成员
成员名称 描述 x 框的左上横坐标 y 框的左上纵坐标 width 框的宽 height 框的高 class_id 框的检测类别id score 宽的类别置信度 distance 框和单目标跟踪框的距离 pts 框的时间戳 track_id 跟踪id -
相关数据类型及接口
3.5 VLMParams_t¶
-
说明
算法运行的实时参数设置
-
定义
typedef struct { // common MI_S32 disp_width; // default=1920 MI_S32 disp_height; // default=1080 // md MI_BOOL run_md; MI_U8 md_threshold; // 0 ~ 255, default 8 MI_FLOAT md_min_width; // 0.0 ~ 1.0 default 0.06 MI_FLOAT md_min_height; // 0.0 ~ 1.0 default 0.1 MI_FLOAT md_max_width; // 0.0 ~ 1.0 default 0.3 MI_FLOAT md_max_height; // 0.0 ~ 1.0 default 1.0 MI_FLOAT md_max_frame_gap; // 0.0 ms ~ INF ms default 100ms MI_U32 md_max_num_boxes; // max num detected boxes, default 1 // det and track MI_BOOL run_det; MI_BOOL run_mot; MI_FLOAT detect_threshold; // default=0.5 MI_BOOL ignore_static_objects; // default=false MI_FLOAT static_sensitive; // default=0.85 MI_BOOL stable_bbox; // default=false MI_FLOAT stable_sensitive; // default=0.63 MI_S32 ignore_frame_number; // [0-5] ignore the id first number box of detect,default=0 // sot MI_BOOL run_sot; MI_U32 template_min_width; MI_U32 missing_detection_times_end_track; MI_U32 lost_times_end_track; MI_FLOAT track_threshold; MI_S32 head_cls_id; //fr MI_BOOL run_fr; VLMFrDetMode_e fr_det_mode; MI_FLOAT fr_det_threshold; MI_FLOAT fr_quality_threshold; MI_FLOAT fr_min_eye_distance; MI_FLOAT fr_min_face_size; MI_FLOAT fr_emo_threshold; //ret MI_BOOL run_ret; MI_U32 ret_topk_boxes; //topk by boxes size MI_BOOL run_ret_cls; // MI_S32 person_class; //class in detect model,if not exists set -1 MI_S32 dog_class; // class in detect model,if not exists set -1 MI_S32 cat_class; // class in detect model,if not exists set -1 //sgptv MI_BOOL run_sgptv; MI_U32 sgptv_top_k; // top-K sampling parameter for token generation, currently only top-K=1 is supported MI_FLOAT sgptv_top_p; MI_FLOAT sgptv_temperature; // sampling temperature, affecting the randomness of token selection. MI_FLOAT sgptv_repeat_penalty; MI_BOOL sgptv_do_sample; //vret MI_BOOL run_vret; MI_BOOL first_frame; MI_U32 frame_step; MI_U32 frame_shift; // reid MI_BOOL run_reid; MI_S32 reid_class; MI_FLOAT reid_quality_threshold; } VLMParams_t; -
成员
成员名称 描述 disp_width 显示宽,设置和输入图片的宽一致 disp_height 显示高,设置和输入图片的高一致 run_md 是否运行运动目标检测 md_threshold 运动目标检测阈值,建议值为8 md_min_width 运动目标归一化后的最小范围宽,建议值为0.06 md_min_height 运动目标归一化后的最小范围高,建议值为0.1 md_max_width 运动目标归一化后的最大范围宽,建议值为0.3 md_max_height 运动目标归一化后的最大范围高,建议值为1.0 run_det 是否开启检测 run_mot 是否开启多目标跟踪 detect_threshold 检测的阈值 ignore_static_objects 忽略静态物体 static_sensitive 忽略静态物体的灵敏度,建议值为0.85 stable_bbox 是否开启稳框 stable_sensitive 稳框灵敏度,建议值为0.63 ignore_frame_number 忽略目标的前几帧检测结果 run_sot 是否运行单目标跟踪 template_min_width 跟踪模板的最小宽 missing_detection_times_end_track 丢失检测帧数结束跟踪 lost_times_end_track 跟踪失败次数结束跟踪 track_threshold 跟踪阈值 head_cls_id 检测中头类别的id,属于第几类 run_ret 是否开启以文搜图 ret_topk_boxes 对k个最大的检测框进行图像特征的提取,建议值为1,如果没开启检测,则对原图的min(width,height)进行特征提取 run_ret_cls 是否进行人/宠物细致分类,需要配置检测 person_class 行人在检测器中的类别 dog_class 狗在检测器中的类别 cat_class 猫在检测器中的类别 run_sgptv 是否运行图生文 sgptv_top_k smaple 后处理的选则topk个进行后处理,当前只支持topk=1 sgptv_top_p sample后处理中选出累计概率大于top_p的值,建议值为0.85 sgptv_temperature 后处理的温度参数,当开启do_sample时生效,建议值为1.0 sgptv_repeat_penalty 重复惩罚系数,建议值为1.0 sgptv_do_sample 是否做sample采样,建议值false run_vret 是否运行文搜视频 first_frame 是否是视频的第一帧,离线视频时,每个视频的第一帧都需要设置为true frame_step 间隔多少帧,间隔多少帧取一帧加入模型推理缓存,当缓存到了8帧模型推理一次 frame_shift 平移模型缓存几帧,模型输入总共8帧,shift值为[1-8],推荐值为4 run_reid 是否运行人/车重识别 reid_class 重识别目标的检测类别class_id reid_quality_threshold 重识别目标的质量分阈值 备注:
-
狗的细分类别为:[边境牧羊犬、柴犬、德国牧羊犬、法国斗牛犬、贵宾犬、吉娃娃、金毛寻回犬、拉布拉多寻回犬、腊肠犬、约克夏梗]
-
猫的细分类别为:[布偶猫、狸花猫、美国短毛猫、缅因猫、挪威森林猫、斯芬克斯猫、苏格兰折耳猫、暹罗猫、异国短毛猫、英国短毛猫]
-
人的细分类别为:[人持刀,人持枪,人未持刀和枪]
-
-
相关数据类型及接口
3.6 VLMRetSgptvResult¶
-
说明
文搜图和图生文视觉结果结构体
-
定义
typedef struct { MI_U32 x; MI_U32 y; MI_U32 width; MI_U32 height; MI_U32 dog_cls; MI_U32 person_cls; MI_U32 cat_cls; MI_FLOAT feature[VLM_FEATURE_LEN]; }VLMRetSgptvResult; -
成员
成员名称 描述 x crop区域的左上横坐标 y crop区域的左上纵坐标 width crop区域的宽 height crop区域的高 dog_cls 细分狗的类别 person_cls 细分人的类别 cat_cls 细分猫的类别 feature 以文搜图中crop区域图的特征 -
相关数据类型及接口
3.7 VLMOutput_t¶
-
说明
算法结果的结构体
-
定义
typedef struct { // md VLMBox_t md_rois[MAX_VLM_ROIS]; MI_S32 num_md_rois; MI_FLOAT md_diff_ratio; VLMImage_t md_mask; //det VLMBox_t det_boxes[MAX_VLM_OBJS]; MI_S32 num_det_boxes; // sot VLMBox_t track_result; VLMBox_t track_roi; MI_BOOL tracking; //ret VLMRetSgptvResult vision_features[MAX_RET_VISIOM_NUM]; MI_U32 ret_feature_num; MI_FLOAT text_feature[VLM_FEATURE_LEN]; //sgptv MI_U8 description[MAX_VLM_STRLEN]; //fr VLMFrResult_t fr_result[VLM_MAX_FACE]; int num_fr_results; //vret VLMVRetResult vret_result; //reid VLMReIdResult_t reid_result[MAX_VLM_REID_OBJS]; int num_reid_results; } VLMOutput_t; -
成员
成员名称 描述 md_rois 运动区域 num_md_rois 运动区域个数 md_diff_ratio 运动区域面积占比(0.0-1.0) md_mask (可选)运动区域的mask输出,需要分配并给入size为 md_in_width x md_in_height x sizeof(MI_U8)的内存块,运动区域对应255,静止区域对应0det_boxes 检测框 num_det_boxes 检测框个数 track_result 单目标跟踪结果 track_roi 单目标跟踪的搜索区域 tracking 跟踪状态 vision_features 文搜图和图生文的视觉结果 ret_feature_num 文搜图的特征个数 description 图生文的描述结果 text_feature 文搜图的图片特征 fr_result 人脸识别算法的输出结果 num_fr_results 人脸识别算法的输出结果个数 vret_result 文搜视频的结果 reid_result 人/车重识别算法的输出结果 num_reid_results 人/车重识别算法的输出结果个数 -
相关数据类型及接口
3.8 VLMCropFunc¶
-
说明
扣图函数
-
定义
typedef int (*VLMCropFunc)(const VLMImage_t *in, const VLMBox_t *box, VLMImage_t *out); -
成员
成员名称 描述 in 原图 box 对应的crop区域 out 扣图后的结果
3.9 VLMVRetResult¶
-
说明
文搜视频的输出结构体
-
定义
typedef struct { MI_BOOL has_vision_feature; MI_FLOAT vision_feature[VLM_FEATURE_LEN]; MI_FLOAT text_feature[VLM_FEATURE_LEN]; }VLMVRetResult; -
成员
成员名称 描述 has_vision_feature 是否有视觉特征返回,因为是视频模型,所以并不是每一帧都有视觉特征返回,跟设置的参数有关 vision_feature 视觉特征 text_feature 文本特征
3.10 VLMFrResult_t¶
-
说明
人脸识别算法输出结果结构体
-
定义
typedef struct { MI_U32 x; MI_U32 y; MI_U32 width; MI_U32 height; MI_U64 track_id; MI_FLOAT keypts[VLM_FACE_KEYPTS][3]; MI_FLOAT pitch; MI_FLOAT yaw; MI_FLOAT roll; MI_FLOAT quality_score; MI_BOOL befiltered; MI_FLOAT feature[VLM_FEATURE_LEN]; MI_U64 recog_id; MI_FLOAT recog_simi; MI_S32 emo_type; }VLMFrResult_t; -
成员
成员名称 描述 x crop区域的左上横坐标 y crop区域的左上纵坐标 width crop区域的宽 height crop区域的高 track_id 人脸的跟踪id keypts 人脸的关键点坐标 pitch 人脸俯仰角 yaw 人脸偏航角 roll 人脸翻滚角 quality_score 人脸角度综合得分 befiltered 人脸是否被过滤(因质量分过低) feature 人脸特征向量 recog_id 人脸识别id recog_simi 人脸识别相似度 emo_type 人脸表情类别
3.11 VLMReIdResult_t¶
-
说明
人/车重识别算法输出结果结构体
-
定义
typedef struct { MI_U32 x; MI_U32 y; MI_U32 width; MI_U32 height; MI_U32 class_id; MI_FLOAT score; MI_U64 pts; MI_FLOAT quality_score; MI_FLOAT feature[VLM_FEATURE_LEN]; }VLMReIdResult_t; -
成员
成员名称 描述 x crop区域的左上横坐标 y crop区域的左上纵坐标 width crop区域的宽 height crop区域的高 class_id 目标的类别id score 目标的检测得分 pts 目标对应帧的时间戳 quality_score 目标质量得分 feature 目标特征向量
4. errorcode¶
| 错误码 | 数值 | 描述 |
|---|---|---|
| E_ALGO_SUCCESS | 0 | 操作成功 |
| E_ALGO_HANDLE_NULL | 1 | 算法句柄为空 |
| E_ALGO_INVALID_PARAM | 2 | 无效的输入参数 |
| E_ALGO_DEVICE_FAULT | 3 | 硬件错误 |
| E_ALGO_LOADMODEL_FAIL | 4 | 加载模型失败 |
| E_ALGO_INIT_FAIL | 5 | 算法初始化失败 |
| E_ALGO_NOT_INIT | 6 | 算法尚未初始化 |
| E_ALGO_INPUT_DATA_NULL | 7 | 算法输入数据为空 |
| E_ALGO_INVALID_INPUT_SIZE | 8 | 无效的算法输入数据维度 |
| E_ALGO_INVALID_LICENSE | 9 | 无效的license许可 |
| E_ALGO_MEMORY_OUT | 10 | 内存不足 |
| E_ALGO_FILEIO_ERROR | 11 | 文件读写操作错误 |
| E_ALGO_INVALID_OUTPUT_SIZE | 12 | 无效的算法输出数据维度 |
| E_ALGO_INVALID_DECODE_MODE | 13 | 无效解码模式 |
| E_ALGO_MODEL_INVOKE_ERROR | 14 | Invoke失败 |