跳转至

Vlm pipeline多模态算法说明


REVISION HISTORY

Revision No.
Description
Date
1.0
  • First version
  • 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 成功
      其他 失败(详见错误码
    • 依赖

      • 结构体:VLMParams_tVLMInput_t

      • 头文件: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 人/车重识别质量评估模型
    • 相关数据类型及接口

      ALGO_VLM_Init

    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
    • 相关数据类型及接口

      VLMInput_t

    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 文搜视频的提示词
    • 相关数据类型及接口

      ALGO_VLM_Run

      ALGO_VLM_SetSot

    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
    • 相关数据类型及接口

      ALGO_VLM_Run

      VLMInput_t

    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 重识别目标的质量分阈值

      备注:

      • 狗的细分类别为:[边境牧羊犬、柴犬、德国牧羊犬、法国斗牛犬、贵宾犬、吉娃娃、金毛寻回犬、拉布拉多寻回犬、腊肠犬、约克夏梗]

      • 猫的细分类别为:[布偶猫、狸花猫、美国短毛猫、缅因猫、挪威森林猫、斯芬克斯猫、苏格兰折耳猫、暹罗猫、异国短毛猫、英国短毛猫]

      • 人的细分类别为:[人持刀,人持枪,人未持刀和枪]

    • 相关数据类型及接口

      ALGO_VLM_Run

    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区域图的特征
    • 相关数据类型及接口

      ALGO_VLM_Run

    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,静止区域对应0
      det_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 人/车重识别算法的输出结果个数
    • 相关数据类型及接口

      ALGO_VLM_Run

      VLMVRetResult

    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失败