移动侦测跟踪算法
REVISION HISTORY¶
Revision No. | Description | Date |
---|---|---|
1.0 | First version | 11/21/2023 |
2.0 | Sync with latest api | 08/06/2024 |
1. 概述¶
1.1. 算法说明¶
移动侦测跟踪算法实现对画面中的运动物体的检测和跟踪。
2. API参考¶
该功能模块提供以下API:
API名称 | 功能 |
---|---|
ALGO_MDT_CreateHandle | 创建句柄 |
ALGO_MDT_InitHandle | 初始化句柄 |
ALGO_MDT_SetParams | 设置算法的可定制参数 |
ALGO_MDT_Run | 运行移动侦测和跟踪算法 |
ALGO_MDT_Track | 运行跟踪算法 |
ALGO_MDT_GetMdMask | 获取运动区域的mask |
ALGO_MDT_DeinitHandle | 反初始化句柄 |
ALGO_MDT_ReleaseHandle | 释放句柄 |
ALGO_MDT_Detect | 运行移动侦测算法 |
2.1. ALGO_MDT_CreateHandle¶
-
功能
创建算法句柄。
-
语法
MI_S32 ALGO_MDT_CreateHandle(void **handle);
-
形参
参数名称 描述 输入/输出 handle 指向句柄的指针 输入 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.2. ALGO_MDT_InitHandle¶
-
功能
初始化算法句柄。
-
语法
MI_S32 ALGO_MDT_InitHandle(void *handle, const MdtInit_t *init_info);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 init_info 算法初始化参数(详见MdtInit_t) 输入 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.3. ALGO_MDT_SetParams¶
-
功能
设置算法的可定制参数。
-
语法
MI_S32 ALGO_MDT_SetParams(void *handle, const MdtParams_t *params);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 params 算法可定制参数(详见MdtParams_t ) 输入 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.4. ALGO_MDT_Run¶
-
功能
运行运动目标检测和跟踪算法。
-
语法
MI_S32 ALGO_MDT_Run(void *handle, const MdtInput_t* prev_frame, const MdtInput_t* current_frame, MdtBox_t boxes[MAX_NUM_MDT_OBJS], MI_S32 *num_boxes);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 prev_frame 前一帧输入图像的结构体指针(详见MdtInput_t) 输入 current_frame 当前帧输入图像的结构体指针(详见MdtInput_t) 输入 boxes 用于保存输出结果框的数组(详见MdtBox_t) 输出 num_boxes 用于保存输出结果框个数的指针 输出 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.5. ALGO_MDT_Track¶
-
功能
运行跟踪算法。
-
语法
MI_S32 ALGO_MDT_Track(void *handle, const MdtInput_t* current_frame, MdtBox_t boxes[MAX_NUM_MDT_OBJS], MI_S32 *num_boxes, MdtStage_e *mdt_stage);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 current_frame 当前帧输入图像的结构体指针(详见MdtInput_t) 输入 boxes 既是输入也是输出结果框,输入是检测的结果,输出是跟踪后的结果(详见MdtBox_t) 输入/输出 num_boxes 既是输入也是输出,输入是检测结果框的个数,输出是跟踪结果框个数的指针 输入/输出 mdt_stage 算法模式的指针(详见MdtStage_e) 输入 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.6. ALGO_MDT_GetMdMask¶
-
功能
获取运动区域的mask。
-
语法
MI_S32 ALGO_MDT_GetMdMask(void *handle, const MdtInput_t *prev_frame, const MdtInput_t *current_frame, MI_U8* mask, MI_S32 mask_w, MI_S32 mask_h);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 prev_frame 前一帧输入图像的结构体指针(详见MdtInput_t) 输入 current_frame 当前帧输入图像的结构体指针(详见MdtInput_t) 输入 mask 用于保存mask数据的内存指针(需要外部分配且长度必须为mask_w*mask_height),运动区域值为255,静止区域值为0 输出 mask_w mask的宽度 输入 mask_h mask的高度 输入 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.7. ALGO_MDT_DeinitHandle¶
-
功能
反初始化句柄。
-
语法
MI_S32 ALGO_MDT_DeinitHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.8. ALGO_MDT_ReleaseHandle¶
-
功能
释放句柄。
-
语法
MI_S32 ALGO_MDT_ReleaseHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
2.9. ALGO_MDT_Detect¶
-
功能
运行运动目标检测算法。
-
语法
MI_S32 ALGO_MDT_Detect(void *handle, const MdtInput_t *prev_frame, const MdtInput_t *current_frame, MdtBox_t boxes[MAX_NUM_MDT_OBJS], MI_S32 *num_boxes);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 prev_frame 前一帧输入图像的结构体指针(详见MdtInput_t) 输入 current_frame 当前帧输入图像的结构体指针(详见MdtInput_t) 输入 boxes 用于保存输出结果框的数组(详见MdtBox_t) 输出 num_boxes 用于保存输出结果框个数的指针 输出 -
返回值
返回值 描述 0 成功 其它 失败(详见错误码) -
依赖
- 头文件:sgs_mdt_api.h
- 库文件:libsgsalgo_mdt.a / libsgsalgo_mdt.so
3. 结构体说明¶
检测相关结构体定义如下:
数据类型 | 定义 |
---|---|
MdtInit_t | 算法初始化参数结构体 |
MdtParams_t | 算法可定制参数结构体 |
MdtInput_t | 算法输入图像帧结构体 |
MdtBox_t | 算法输出框结构体 |
MdtStage_e | 算法模式 |
3.1 MdtInit_t¶
-
说明
算法初始化参数结构体。
-
定义
typedef struct { MI_S32 ive_handle; MI_U32 in_width; MI_U32 in_height; MI_U32 in_stride; } MdtInit_t;
-
成员
成员名称 描述 ive_handle MI_IVE模块的handle in_width 输出图像的宽度 in_height 输出图像的高度 in_stride 输出图像buffer进行内存对齐后的行长度 -
相关数据类型及接口
3.2 MdtParams_t¶
-
说明
算法可定制参数结构体。
-
定义
typedef struct { MI_FLOAT track_threshold; // 0.0 ~ 1.0 default 0.3 MI_U8 detect_threshold; // 0 ~ 255, default 8 MI_FLOAT min_width; // 0.0 ~ 1.0 default 0.06 MI_FLOAT min_height; // 0.0 ~ 1.0 default 0.1 MI_FLOAT max_width; // 0.0 ~ 1.0 default 0.3 MI_FLOAT max_height; // 0.0 ~ 1.0 default 1.0 MI_FLOAT max_frame_gap; // 0.0 ms ~ INF ms default 100ms } MdtParams_t;
-
成员
成员名称 描述 track_threshold 跟踪算法的阈值,取值越小跟踪连贯性更好但是跟踪准确度越低,范围0-1,默认值0.3 detect_threshold 检测算法的阈值(判定运动物体的最小帧间差异),取值越小检测灵敏度越高,范围0-255,默认值8 min_width 最小目标宽度(归一化,相对于整个画面的宽度),范围0-1,默认值0.06 min_height 最小目标高度(归一化,相对于整个画面的高度),范围0-1,默认值0.1 max_width 最大目标宽度(归一化,相对于整个画面的宽度),范围0-1,默认值0.3 max_height 最大目标宽度(归一化,相对于整个画面的高度) ,范围0-1,默认值1.0 max_frame_gap 最大帧间间隔时间(间隔超过这一时间的两帧将会被忽略,当不需要对帧间间隔过滤时可设置为0.0,单位ms) ,默认值100.0 -
相关数据类型及接口
3.3 MdtInput_t¶
-
说明
输入图像帧的信息结构体。
-
定义
typedef struct { void *p_vir_addr; MI_PHY phy_addr; MI_U32 buf_size; MI_U64 pts; } MdtInput_t;
-
成员
成员名称 描述 p_vir_addr 输入图像帧的虚拟地址 phy_addr 输入图像帧的物理地址 buf_size 输入图像帧的buffer长度 pts 输入图像帧的时间戳 -
相关数据类型及接口
3.4 MdtBox_t¶
-
说明
算法输出框的结构体。
-
定义
typedef struct { MI_U32 x; MI_U32 y; MI_U32 width; MI_U32 height; MI_FLOAT score; MI_U64 track_id; MI_U64 pts; } MdtBox_t;
-
成员
成员名称 描述 x,y, width, height 结果框的左上点坐标和宽高 score 跟踪结果的分值 track_id 跟踪id pts 对应帧的时间戳 -
相关数据类型及接口
3.5 MdtStage_e¶
-
说明
算法模式。
-
定义
typedef enum { E_MDT_STAGE_INIT = 0, E_MDT_STAGE_DETECT, E_MDT_STAGE_TRACK, } MdtStage_e;
-
成员
成员名称 描述 E_MDT_STAGE_INIT 算法初始化 E_MDT_STAGE_DETECT 运动目标检测 E_MDT_STAGE_TRACK 运动目标跟踪 -
相关数据类型及接口
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 | 无效的算法输出数据维度 |
E_ALGO_INVALID_DECODE_MODE | 13 | 无效的解码模式 |
E_ALGO_MODEL_INVOKE_ERROR | 14 | 模型invoke错误 |
E_ALGO_INVALID_FILE | 15 | 无效的文件 |