检测跟踪算法说明


REVISION HISTORY

Revision No.
Description
Date
1.0 First version 05/15/2024
2.0 Second version 07/09/2024

1. 概述

1.1. 算法说明

本算法库可以实现以下基础功能:人形检测、人脸检测,车辆检测,非机动车检测,宠物检测,检测目标(人、人脸、车、非机动车、宠物等)跟踪。

比如需要同时检测人形,车辆和宠物,则在初始化的模型中配置SD,检测接口会对这几类同时进行检测。

还可以实现应用功能:区域人数统计/区域入侵(非法停车)/拌线入侵/徘徊检测/快速移动。

支持检测模型包括:行人检测(SYPD)、人非车检测(SYPCN)、人宠物检测(SYPCD)、车牌检测(SYLPD)、人脸检测(SYFD)、火焰烟雾(SYFSD)、人形+人头+人脸检测(SPD)、人非车宠物检测 (SD)。具体的检测类别说明如下:

  • 行人检测(SYPD)输出的类别共1类,为行人(class_id=0)。

  • 人非车检测(SYPCN)输出的类别共6类,分别为行人(class_id=0)、自行车(class_id=1)、轿车(class_id=2) 、摩托车(class_id=3)、公交车(class_id=4)、卡车(class_id=5)。

  • 人宠物检测(SYPCD)输出的类别共3类,分别为行人(class_id=0)、猫(class_id=1)、狗(class_id=2)。

  • 车牌检测(SYLPD)输出的类别共1类,分别为车牌(class_id=0)。

  • 人脸检测(SYFD)输出的类别共1类,分别人脸(class_id=0)。

  • 火焰烟雾(SYFSD)输出的类别共2类,分别为火焰(class_id=0)、烟雾(class_id=1)。

  • 人+人头+人脸检测(SPD)输出的类别共3类,分别为行人(class_id=0)、人头(class_id=1)、人脸(class_id=2)。

  • 人+车+宠物+人头+人脸检测(SD)输出的类别共10类,分别为行人(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)。

1.2. 算法规格

  • 行人检测(SYPD)

    • 板端资源(在377平台(IPU clock@800MHz)下测得)

      Model Name Model Version Resolution Input Format Rom Ram Inference Time PostProcess Time
      SYPD36 310 640x352 yuv_nv12 772KB 1780KB 6.5ms 约1.0ms
      SYPD48 310 800x480 yuv_nv12 828KB 2540KB 10.9ms 约1.2ms
      SYPD58 310 896x512 yuv_nv12 848KB 3048KB 13.0ms 约1.5ms
  • 人非车检测(SYPCN)

    • 板端资源(在377平台下测得)

      Model Name Model Version Resolution Input Format Rom Ram Inference Time PostProcess Time
      SYPCN36s 310 640x352 yuv_nv12 880KB 1928KB 6.6ms 约1.2ms
      SYPCN48s 310 800x480 yuv_nv12 936KB 2720KB 11.1ms 约1.6ms
      SYPCN58s 310 896x512 yuv_nv12 960KB 3256KB 13.3ms 约2.0ms
      SYPCN36l 310 800x480 yuv_nv12 3216KB 5176KB 15.7ms 约1.2ms
      SYPCN48l 310 896x512 yuv_nv12 3340KB 6660KB 26.4ms 约1.6ms
  • 人宠物检测(SYPCD)

    • 板端资源(在377平台下测得)

      Model Name Model Version Resolution Input Format Rom Ram Inference Time PostProcess Time
      SYPCD36s 310 640x352 yuv_nv12 772KB 1796KB 6.5ms 约1.1ms
      SYPCD48s 310 800x480 yuv_nv12 828KB 2572KB 11.0ms 约1.5ms
      SYPCD58s 310 896x512 yuv_nv12 852KB 3092KB 13.1ms 约1.8ms
  • 火焰烟雾检测(SYFSD)

    • 板端资源(在377平台下测得)

      Model Name Model Version Resolution Input Format Rom Ram Inference Time PostProcess Time
      SYFSDY36l 310 640x352 yuv_nv12 2579KB 4489KB 14.76ms 约1.1ms
      SYFSDY48l 310 800x480 yuv_nv12 2689KB 5940KB 24.67ms 约1.5ms

2. API参考

该功能模块提供以下API:

API名称 功能
ALGO_DT_CreateHandle 创建句柄
ALGO_DT_InitHandle 初始化句柄
ALGO_DT_GetInputAttr 获取模型的属性信息
ALGO_DT_SetParams 设置算法参数
ALGO_DT_Detect 运行检测算法,对目标进行检测
ALGO_DT_Track 对检测目标进行跟踪
ALGO_DT_Count 对区域流量进行统计
ALGO_DT_RoiAlarmDetect 区域入侵检测
ALGO_DT_RoiWanderDetect 区域徘徊检测
ALGO_DT_RoiFastMovingDetect 快速移动检测
ALGO_DT_LineAlarmDetect 拌线入侵检测
ALGO_DT_DeinitHandle 停止跟踪算法
ALGO_DT_ReleaseHandle 释放句柄

2.1. ALGO_DT_CreateHandle

  • 功能

    创建句柄

  • 语法

    MI_S32 ALGO_DT_CreateHandle(void **handle);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.2. ALGO_DT_InitHandle

  • 功能

    初始化句柄

  • 语法

    MI_S32 ALGO_DT_InitHandle(void *handle, DtInit_t *init_info);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    init_info 算法配置项,详见DtInit_t 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 相关结构体

    DtInit_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.3. ALGO_DT_GetInputAttr

  • 功能

    获取模型的属性信息,包括模型输入分辨率以及输入数据的类型,主要两种格式 1->NV12,7->ARGB888

  • 语法

    MI_S32 ALGO_DT_GetInputAttr(void *handle, DtInputAttr_t *input_attr);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    input_attr 保存属性信息指针,详见DtInputAttr_t 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 相关结构体

    DtInputAttr_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.4. ALGO_DT_SetParams

  • 功能

    设置算法的参数

  • 语法

    MI_S32 ALGO_DT_SetParams(void *handle, const DtParams_t *params);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    params 算法参数,详见DtParams_t 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 相关结构体

    DtParams_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.5. ALGO_DT_Detect

  • 功能

    运行模型推理,对人形等目标进行检测,获得检测结果

  • 语法

    MI_S32 ALGO_DT_Detect(void *handle, const DtInput_t *algo_input, DtBox_t bboxes[MAX_DT_OBJECT], MI_S32 *num_bboxes);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    algo_input 输入图像的buffer信息,根据前面接口获取模型的输入大小,一般模型名称会包含输入信息,比如sypdy36**,就是yuv_nv12的352(高) * 640(宽)输入 输入
    bboxes 用于保存检测结果框的数组 输出
    num_bboxes 用于保存检测结果框个数的指针 输出
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 调用流程

    ALGO_DT_CreateHandle->ALGO_DT_InitHandle->ALGO_DT_SetParams->ALGO_DT_Detect

  • 相关结构体

    DtInput_t

    DtBox_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.6. ALGO_DT_Track

  • 功能

    对检测结果进行跟踪,获取跟踪结果,并获得跟踪id

  • 语法

    MI_S32 ALGO_DT_Track(void *handle, DtBox_t bboxes[MAX_DT_OBJECT], MI_S32 *num_bboxes);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    bboxes 既是输入也是输出结果框,输入是检测的结果,输出是跟踪后的结果,会根据参数设置输出对应的目标框 输入/输出
    num_bboxes 既是输入也是输出,输入是检测结果框的个数,输出是跟踪结果框个数的指针 输入/输出
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 调用流程

    ALGO_DT_CreateHandle->ALGO_DT_InitHandle->ALGO_DT_SetParams->ALGO_DT_Detect->ALGO_DT_Track

  • 相关结构体

    DtBox_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.7. ALGO_DT_Count

  • 功能

    对指定区域内的客流进行统计

  • 语法

    MI_S32 ALGO_DT_Count(void *handle, CountRoi_t rois[MAX_DT_ROI], MI_S32 num_rois, DtBox_t bboxes_input[MAX_DT_OBJECT], MI_S32 num_bboxes_input);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    rois 流量统计的区域数组 输入 /输出
    num_rois 流量统计的区域个数 输入
    bboxes_input 用于输入跟踪结果框的数组 输入
    num_bboxes_input 输入跟踪结果框个数 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 调用流程

    ALGO_DT_CreateHandle->ALGO_DT_InitHandle->ALGO_DT_SetParams->ALGO_DT_Detect->ALGO_DT_Track->ALGO_DT_Count

  • 相关结构体

    CountRoi_t

    DtBox_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.8. ALGO_DT_RoiAlarmDetect

  • 功能

    对区域内的目标进行区域入侵判断

  • 语法

    MI_S32 ALGO_DT_RoiAlarmDetect(void* handle, ALGO_DtRoiAlarm_t rois[MAX_DT_ROI], MI_S32 num_rois, DtBox_t bboxes_input[MAX_DT_OBJECT], MI_S32 num_bboxes_input);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    rois 设置警戒区域 输入/输出
    num_rois 设置区域的个数 输入
    bboxes_input 跟踪结果框 输入
    num_bboxes_input 跟踪结果框个数 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 调用流程

    ALGO_DT_CreateHandle->ALGO_DT_InitHandle->ALGO_DT_SetParams->ALGO_DT_Detect->ALGO_DT_Track->ALGO_DT_RoiAlarmDetect

  • 相关结构体

    ALGO_DtRoiAlarm_t

    DtBox_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.9. ALGO_DT_RoiWanderDetect

  • 功能

    对区域内目标进行徘徊检测

  • 语法

    MI_S32 ALGO_DT_RoiWanderDetect(void* handle, ALGO_DtRoiWander_t rois[MAX_DT_ROI], MI_S32 num_rois, DtBox_t bboxes_input[MAX_DT_OBJECT], MI_S32 num_bboxes_input);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    rois 设置区域信息 输入/输出
    num_rois 设置区域个数 输入
    bboxes_input 跟踪结果框信息 输入
    num_bboxes_input 跟踪结果框个数 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 调用流程

    ALGO_DT_CreateHandle->ALGO_DT_InitHandle->ALGO_DT_SetParams->ALGO_DT_Detect->ALGO_DT_Track->ALGO_DT_RoiWanderDetect

  • 相关结构体

    ALGO_DtRoiWander_t

    DtBox_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.10. ALGO_DT_RoiFastMovingDetect

  • 功能

    区域内的目标快速移动检测

  • 语法

    MI_S32 ALGO_DT_RoiFastMovingDetect(void* handle, ALGO_DtRoiFastMove_t rois[MAX_DT_ROI], MI_S32 num_rois, DtBox_t bboxes_input[MAX_DT_OBJECT], MI_S32 num_bboxes_input);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    rois 区域信息 输入/输出
    num_rois 区域个数 输入
    bboxes_input 检测框信息 输入
    num_bboxes_input 检测框个数 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 调用流程

    ALGO_DT_CreateHandle->ALGO_DT_InitHandle->ALGO_DT_SetParams->ALGO_DT_Detect->ALGO_DT_Track->ALGO_DT_RoiFastMovingDetect

  • 相关结构体

    ALGO_DtRoiFastMove_t

    DtBox_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.11. ALGO_DT_LineAlarmDetect

  • 功能

    对拌线进行目标入侵判断

  • 语法

    MI_S32 ALGO_DT_LineAlarmDetect(void* handle, ALGO_DtLineAlarm_t lines[MAX_DT_ROI], MI_S32 num_lines, DtBox_t bboxes_input[MAX_DT_OBJECT], MI_S32 num_bboxes_input);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
    lines 拌线信息 输入/输出
    num_lines 拌线数量 输入
    bboxes_input 跟踪结果框信息 输入
    num_bboxes_input 跟踪结果框数量 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 调用流程

    ALGO_DT_CreateHandle->ALGO_DT_InitHandle->ALGO_DT_SetParams->ALGO_DT_Detect->ALGO_DT_Track->ALGO_DT_LineAlarmDetect

  • 相关结构体

    ALGO_DtLineAlarm_t

    DtBox_t

  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.12. ALGO_DT_DeinitHandle

  • 功能

    停止算法

  • 语法

    MI_S32 ALGO_DT_DeinitHandle(void *handle);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

2.13. ALGO_DT_ReleaseHandle

  • 功能

    释放句柄占用资源

  • 语法

    MI_S32 ALGO_DT_ReleaseHandle(void *handle);
    
  • 形参

    参数名称 描述 输入/输出
    handle 句柄 输入
  • 返回值

    返回值 描述
    0 成功
    其它 失败(详见错误码)
  • 依赖

    • 头文件:sgs_dt_api.h

    • 库文件:libsgsalgo_dt.a / libsgsalgo_dt.so

3. 结构体/枚举类型说明

相关数据类型定义如下:

数据类型 定义
DtInit_t 算法参数相关结构体
DtInputAttr_t 算法输入属性结构体
DtParams_t 算法输入参数结构体
DtInput_t 算法输入图像数据信息
DtBox_t 检测和跟踪的输出结构体
DtPoint_t 顶点像素坐标
DtRoi_t 多边形区域位置
CountRoi_t 区域流量统计信息
RoiAlarmMode_e 区域入侵模式
ALGO_DtRoiAlarm_t 区域入侵结构体
ALGO_DtRoiFastMove_t 区域目标快速移动结构体
ALGO_DtRoiWander_t 区域目标徘徊结构
DtLine_t 拌线结构体
ALGO_DtLineAlarm_t 拌线入侵结构体
Label_PD_Person_e 行人检测算法class_id和类别名称的对应
Label_FD_Face_e 人脸检测算法class_id和类别名称的对应
Label_PCN_e 人非车检测算法class_id和类别名称的对应
Label_PCD_e 人宠物检测算法class_id和类别名称的对应
Label_FSD_e 火焰烟雾检测算法class_id和类别名称的对应
Label_SD_e 人+车+宠物+人头+人脸检测算法class_id和类别名称的对应
Label_SPD_e 人+人头+人脸检测算法class_id和类别名称的对应

3.1 DtInit_t

  • 说明

    算法相关配置项

  • 定义

    typedef struct
    {
        char ipu_firmware_path[MAX_DT_STRLEN];
        char model_path[MAX_DT_STRLEN];
        MI_BOOL create_device;
        MI_BOOL destroy_device;
        void *model_buffer;
        MI_U32 model_buffer_len;
    } DtInit_t;
    
  • 成员

    成员名称 描述
    ipu_firmware_path[MAX_DT_STRLEN] ipu_firmware_path路径
    model_path[MAX_DT_STRLEN] 模型文件路径
    create_device 是否在算法库内进行IPUDevice的创建,默认为true,即在库内创建,在需同时调用算法库时可设置为false并在外部手动创建IPUDevice
    destroy_device 是否在算法库内进行IPUDevice的销毁,默认为true,即在库内销毁,在需同时调用算法库时可设置为false并在外部手动销毁IPUDevice
    model_buffer 使用model_path时请设置为NULL,将model_path置空并且设置model_buffer和model_buffer_len可用于从模型内存块初始化算法
    model_buffer_len 使用model_path时请设置为0,设置model_buffer内存块长度
  • 相关数据类型及接口

    ALGO_DT_InitHandle

3.2 DtInputAttr_t

  • 说明

    定义分辨率大小和模型类型

  • 定义

    typedef struct
    {
        MI_U32 width;
        MI_U32 height;
        MI_IPU_ELEMENT_FORMAT format;
    } DtInputAttr_t;
    
  • 成员

    成员名称 描述
    width 模型输入数据的宽
    height 模型输入数据的高
    format 模型输入数据的类型
  • 相关数据类型及接口

    ALGO_DT_GetInputAttr

3.3 DtParams_t

  • 说明

    算法相关配置项

  • 定义

    typedef struct
    {
        MI_S32 disp_width;               // default=1920
        MI_S32 disp_height;              // default=1080
    
        // detect
        MI_FLOAT conf_threshold=0.5;     // default=0.5
    
        // track
        MI_BOOL ignore_static_objects;   // default=false
        MI_BOOL stable_bbox;             // default=false
        MI_FLOAT stable_iou_threshold;   // default=0.65
        MI_FLOAT static_iou_threshold;   // default=0.85
        MI_S32 ignore_frame_number;      // default=0
        MI_FLOAT ignore_static_time;     // default=0
        MI_BOOL use_detect_bbox;         // default=false
        MI_BOOL strict_mode;             // default=false
    } DtParams_t;
    
  • 成员

    成员名称 描述
    disp_width 显示码流的分辨率宽度(用于映射检测框位置),默认值1920
    disp_height 显示码流的分辨率高度(用于映射检测框位置),默认值1080
    conf_threshold 检测算法的阈值,默认值0.5
    ignore_static_objects 是否忽略静止目标,默认为false,即动态和静态目标均检测
    stable_bbox 是否进行稳框
    stable_iou_threshold 稳框算法的灵敏度,取值0.0~1.0,取值越小稳框效果越强,默认值为0.65
    ignore_frame_number 忽略目标的前8帧的检测结果,主要用于静止过滤,如果要静止过滤则建议设为8,否则为0
    ignore_static_time 只有静止超过设定的时间才会忽略静止目标,单位为秒
    use_detect_bbox 跟踪算法中,是否使用检测的结果框,若为false,则使用跟踪的结果框
    strict_mode 是否使用strict检测模式,默认值false
  • 相关数据类型及接口

    ALGO_DT_SetParams

3.4 DtInput_t

  • 说明

    算法输入图像数据信息

  • 定义

    typedef struct
    {
        void *p_vir_addr;
        MI_PHY phy_addr;
        MI_U32 buf_size;
        MI_U64 pts;
    } DtInput_t;
    
  • 成员

    成员名称 描述
    p_vir_addr 输入buffer的虚拟地址
    phy_addr 输入buffer的物理地址
    buf_size 输入buffer的长度
    pts 输入buffer时间戳
  • 相关数据类型及接口

    ALGO_DT_Detect

3.5 DtBox_t

3.6 DtPoint_t

  • 说明

    顶点像素坐标

  • 定义

    typedef struct
    {
        MI_U32 x;
        MI_U32 y;
    } DtPoint_t;
    
  • 成员

    成员名称 描述
    x 顶点横坐标
    y 顶点纵坐标
  • 相关数据类型及接口

    DtRoi_t

    DtLine_t

3.7 DtRoi_t

3.8 CountRoi_t

  • 说明

    区域流量统计信息

  • 定义

    typedef struct
    {
        DtRoi_t roi;
        MI_U32 count;
        MI_FLOAT interval;
        MI_U32 interval_in_count;
        MI_U32 interval_out_count;
        MI_U32 count_cls[MAX_DT_NUM_CLASS];
        MI_S16 num_count_cls;
    } CountRoi_t;
    
  • 成员

    成员名称 描述
    roi 多边形区域位置,区域点顺时针或逆时针配置
    count 区域流量计数值
    interval 统计进出人数间隔时间段(单位:秒)
    interval_in_count 时间段内进区域的人数,每次到达间隔时间将清0
    count_cls 需要计数的类别数组
    num_count_cls 需要计数的类别数,若为0,则对所有类别计数
  • 相关数据类型及接口

    DtRoi_t

    ALGO_DT_Count

3.9 RoiAlarmMode_e

  • 说明

    区域入侵模式,正常模式还是非法停车模式

  • 定义

    typedef enum
    {
        E_NORMAL_ROI_ALARM = 0,
        E_ILLEGAL_PARKING,
    } RoiAlarmMode_e;
    
  • 成员

    成员名称 描述
    E_NORMAL_ROI_ALARM 正常区域入侵
    E_ILLEGAL_PARKING 非法停车
  • 相关数据类型及接口

    ALGO_DtRoiAlarm_t

3.10 ALGO_DtRoiAlarm_t

  • 说明

    区域入侵结构体信息

  • 定义

    typedef struct
    {
        DtRoi_t roi;
        RoiAlarmMode_e roi_model;
        MI_BOOL inbreak;
        DtBox_t inbreak_box[MAX_DT_OBJECT];
        MI_U32  inbreak_box_num;
        MI_BOOL target_enter;
        DtBox_t target_enter_box[MAX_DT_OBJECT];
        MI_U32  target_enter_box_num;
        MI_BOOL target_leave;
        DtBox_t target_leave_box[MAX_DT_OBJECT];
        MI_U32  target_leave_box_num;
    }ALGO_DtRoiAlarm_t;
    
  • 成员

    成员名称 描述
    roi 区域信息,区域点顺时针或逆时针配置
    roi_model 报警模式
    inbreak 是否入侵
    inbreak_box 入侵目标框
    inbreak_box_num 入侵目标个数
    target_enter 是否有目标进入
    target_enter_box 进入区域目标框
    target_enter_box_num 进入区域目标个数
    target_leave 是否有目标离开
    target_leave_box 离开区域目标框
    target_leave_box_num 离开区域目标个数
  • 相关数据类型及接口

    DtBox_t

    DtRoi_t

    RoiAlarmMode_e

    ALGO_DT_RoiAlarmDetect

3.11 ALGO_DtRoiFastMove_t

  • 说明

    区域目标快速移动结构体

  • 定义

    typedef struct
    {
        DtRoi_t roi;
        MI_BOOL fase_move;
        DtBox_t fast_move_box[MAX_DT_OBJECT];
        MI_U32  fast_move_box_num;
        MI_FLOAT sensitive;
    }ALGO_DtRoiFastMove_t;
    
  • 成员

    成员名称 描述
    roi 区域信息,区域点顺时针或逆时针配置
    fase_move 区域内目标是否发生快速移动
    fast_move_box 区域内发生快速移动的目标框
    fast_move_box_num 区域内发生快速移动的个数
    sensitive 快速移动的灵敏度,0.0-5.0,越大需移动越快
  • 相关数据类型及接口

    DtBox_t

    DtRoi_t

    ALGO_DT_RoiFastMovingDetect

3.12 ALGO_DtRoiWander_t

  • 说明

    区域目标徘徊结构体

  • 定义

    typedef struct
    {
        DtRoi_t roi;
        MI_BOOL wander;
        DtBox_t target_wander_box[MAX_DT_OBJECT];
        MI_U32  target_wander_num;
        MI_FLOAT interval;
    }ALGO_DtRoiWander_t;
    
  • 成员

    成员名称 描述
    roi 区域信息,区域点顺时针或逆时针配置
    wander 区域内是否发生目标徘徊
    target_wander_box 区域内目标徘徊框
    target_wander_num 区域内目标徘徊个数
    interval 徘徊的时间设定
  • 相关数据类型及接口

    DtBox_t

    DtRoi_t

    ALGO_DT_RoiWanderDetect

3.13 DtLine_t

  • 说明

    拌线结构体信息

  • 定义

    typedef struct
    {
        DtPoint_t point1;
        DtPoint_t point2;
    }DtLine_t;
    
  • 成员

    成员名称 描述
    point1 拌线的第一个点
    point2 拌线的第二个点
  • 相关数据类型及接口

    DtPoint_t

    ALGO_DtLineAlarm_t

    ALGO_DtLineAlarm_t

3.14 ALGO_DtLineAlarm_t

  • 说明

    拌线入侵的结构体

  • 定义

    typedef struct
    {
        DtLine_t line;
        MI_BOOL inbreak;
        DtBox_t inbreak_box[MAX_DT_OBJECT];
        MI_U32  inbreak_box_num;
        MI_BOOL cross_line;
        DtBox_t cross_line_box[MAX_DT_OBJECT];
        MI_S32  cross_line_orien[MAX_DT_OBJECT];
        MI_S32  cross_line_num;
        MI_FLOAT sensitive; //between(-1.0 - 1.0)
    }ALGO_DtLineAlarm_t;
    
  • 成员

    成员名称 描述
    line 拌线信息
    inbreak 是否发生拌线入侵
    inbreak_box 发生拌线入侵的目标框
    inbreak_box_num 发生拌线入侵的框数量
    cross_line 是否发生了越线,越线是目标从拌线一边到另外一边
    cross_line_box 发生越线的目标框坐标
    cross_line_orien 发生越线目标的方向,目标的方向,1是从左到右,2是从右到左,3是从上到下,4是从下到上
    cross_line_num 发生越线目标的个数
    sensitive (-0.1 - 1.0) 缩放框设置,中心保持不变,宽高变化,width = width - sensitive * width,height = height - sensitive * height,防止框过大而没有对目标进行越线判断
  • 相关数据类型及接口

    DtBox_t

    DtLine_t

    ALGO_DT_LineAlarmDetect

3.15 Label_PD_Person_e

  • 说明

    检测模型类别和class_id的对应关系

  • 定义

    typedef enum
    {
        E_PD_PERSON = 0
    } Label_PD_Person_e;
    
  • 成员

    成员名称 描述
    E_PD_PERSON 行人类别(class_id=0)

3.16 Label_FD_Face_e

  • 说明

    人脸检测模型类别和class_id的对应关系

  • 定义

    typedef enum
    {
        E_FD_FACE = 0,
    } Label_FD_Face_e;
    
  • 成员

    成员名称 描述
    E_FD_FACE 人脸类别(class_id=0)

3.17 Label_PCN_e

  • 说明

    人/非机动车/车辆检测模型类别和class_id的对应关系

  • 定义

    typedef enum
    {
        E_PCN_PERSON = 0,
        E_PCN_BICYCLE,
        E_PCN_CAR,
        E_PCN_MOTOCYCLE,
        E_PCN_BUS,
        E_PCN_TRUCK
    } Label_PCN_e;
    
  • 成员

    成员名称 描述
    E_PCN_PERSON 行人类别(class_id=0)
    E_PCN_BICYCLE 自行车类别(class_id=1)
    E_PCN_CAR 轿车类别(class_id=2)
    E_PCN_MOTOCYCLE 摩托车类别(class_id=3)
    E_PCN_BUS 公交车类别(class_id=4)
    E_PCN_TRUCK 卡车类别(class_id=5)

3.18 Label_PCD_e

  • 说明

    定义人宠物检测模型类别和class_id的对应关系

  • 定义

    typedef enum
    {
        E_PCD_PERSON,
        E_PCD_CAT,
        E_PCD_DOG
    } Label_PCD_e;
    
  • 成员

    成员名称 描述
    E_PCN_PERSON 行人类别(class_id=0)
    E_PCN_CAT 猫类别(class_id=1)
    E_PCN_DOG 狗类别(class_id=2)

3.19 Label_FSD_e

  • 说明

    定义火焰烟雾检测模型类别和class_id的对应关系

  • 定义

    typedef enum
    {
        E_FSD_FIRE,
        E_FSD_SMOKE
    } Label_FSD_e;
    
  • 成员

    成员名称 描述
    E_FSD_FIRE 火焰类别(class_id=0)
    E_FSD_SMOKE 烟雾类别(class_id=1)

3.20 Label_SD_e

  • 说明

    定义人+车+宠物+人头+人脸检测模型类别和class_id的对应关系

  • 定义

    typedef enum
    {
        E_SD_PERSON = 0,
        E_SD_BICYCLE,
        E_SD_CAR,
        E_SD_MOTOCYCLE,
        E_SD_BUS,
        E_SD_TRUCK,
        E_SD_CAT,
        E_SD_DOG,
        E_SD_HEAD,
        E_SD_FACE,
    } LABEL_SD_e;
    
  • 成员

    成员名称 描述
    E_SD_PERSON 行人类别(class_id=0)
    E_SD_BICYCLE 自行车类别(class_id=1)
    E_SD_CAR 轿车类别(class_id=2)
    E_SD_MOTOCYCLE 摩托车类别(class_id=3)
    E_SD_BUS 公交车类别(class_id=4)
    E_SD_TRUCK 卡车类别(class_id=5)
    E_SD_CAT 猫类别(class_id=6)
    E_SD_DOG 狗类别(class_id=7)
    E_SD_HEAD 人头类别(class_id=8)
    E_SD_FACE 人脸类别(class_id=9)

3.21 Label_SPD_e

  • 说明

    定义人+人头+人脸检测模型类别和class_id的对应关系

  • 定义

    typedef enum
    {
        E_SPD_PERSON = 0,
        E_SPD_HEAD,
        E_SPD_FACE
    } LABEL_SPD_e;
    
  • 成员

    成员名称 描述
    E_SPD_PERSON 行人类别(class_id=0)
    E_SPD_HEAD 人头类别(class_id=1)
    E_SPD_FACE 人脸类别(class_id=2)

4. 错误码

错误码 数值 描述
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 无效的算法输出数据维度