MI VDF API¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 2.03 | 11/12/2018 | |
| 2.04 | 04/12//2019 | |
| 2.05 | 10/12/2020 | |
| 2.06 | 11/02/2020 | |
| 2.07 | 11/10/2021 | |
| 2.08 | 03/28/2022 | |
| 2.09 | 04/12/2022 | |
| 2.10 | 12/06/2023 | |
| 2.11 | 03/10/2025 | |
| 2.12 | 11/21/2025 |
1. 概 述¶
1.1. 模块说明¶
MI_VDF是一个基于算法库实现的移动侦测(Motion Detection,简称MD)、遮挡侦测(Occlusion Detection,简称:OD)以及虚拟围栏/线段侦测(Virtual Gate,简称:VG)的设备驱动。
1.2. 基本结构¶
VDF作为一个安全侦测的功能模块,前级一般接SCL,将被监测的画面进行缩放处理后,输入给到vdf进行算法运算,随后输出运算结果,直接供user使用,故vdf无需接后级。
一个典型的VDF应用场景:
如图1-1所示:
- 三路输入源经过SCL缩放等处理输出三路数据给VDF,进行MD、OD或VG进行侦测。侦测的结果直接反馈给user。
1.3 功能介绍¶
VDF支持以下功能:
1、支持移动侦测,当检测到有物体经过,并达到报警条件,触发报警
2、支持遮挡侦测,当检测到有物体遮挡摄像头时,并达到报警条件,触发报警
3、支持虚拟围栏、线段侦测,当检测到物体跨越虚拟围栏、线段时,并达到报警条件,触发报警
4、设置和获取通道的参数(算法静动态参数)
5、支持开启单/多通道,运行模式可以是单一的某种模式或多种混合模式(MD、OD和VG)
6、支持动态disable、enable指定某种模式
7、支持动态disable、enable指定某channel
1.4 应用场景¶
VDF模块既可应用于Pure Linux系统,也可以应用于Pure Rtos或DualOs系统。
1.5 芯片差异¶
VDF模块是一个纯软件的模块,在各芯片上没有差异。
1.6 工作原理¶
1.6.1 MD原理说明¶
MD算法分为三种模式(前景模式, SAD模式, 幀差模式)
前景模式(MDALG_MODE_FG):针对每个pixel建模,推算目前y值落在模型的前景分区或背景分区,从而判定此pixel为前景点还是背景点。
SAD模式(MDALG_MODE_SAD):根据block size为单位,计算当前帧与背景帧的差异从而判定此block为动态块或者静态块。背景帧初始化为第一帧,往后以pixel为单位,判定此pixel为前景点还是背景点,给定不同权重用于更新背景帧。
帧差模式(MDALG_MODE_FRAMEDIFF):根据block size为单位,计算当前帧与背景帧的差异从而判定此block为动态块或者静态块。
注:运算速度: SAD模式 > 帧差模式 > 前景模式。背景融合:帧差模式没有背景融合,SAD和FG有背景融合。推荐使用SAD模式
1.6.2 OD原理说明¶
先以M帧(建议为120帧)进行背景特征帧建立,并转存为二进制图像(二元图像),做为特征帧。当前帧的特征二元图与当前背景的特征二元图进行对比,以及多层阈值判断,决定是否触发报警。
1.6.3 VG原理说明¶
VG启动后,需要让画面静止3s,进行背景建立。随后判断当前画面帧的特征和背景帧的差异,差异大于阈值,则判断为前景。最后判断前景物件是否穿越设定的警报线段、区域,且是否满足方向性,进而决定是否进行报警。
1.7 开发流程¶
1.7.1 编译配置¶
-
进入alkaid project根目录,make menuconfig
-
回车键进入Generic Options子选项
-
回车键进入Interface Compile Config子选项
-
空格键选中VDF模块,并重新编译整个Image
1.7.2 接口调用¶
VDF模块的接口调用顺序如下:
图1-2:一路VDF通道的函数调用流程
每一路VDF通道,都要独立调用MI_VDF_CreateChn、MI_VDF_SetChnAttr、MI_VDF_EnableSubWindow、MI_VDF_GetResult、MI_VDF_PutResult、MI_VDF_DestroyChn等API做通道控制,通道属性,销毁等动作。
1.8 实例介绍¶
1.8.1 vdf相关代码¶
此处使用MD为例进行说明,VG、,接口调用顺序可以参考上述1.7.2接口调用中的图1-1流程对vdf进行设置即可。下列给出多通道的示例流程。开启了2个VDF通道,其中通道0设置为MD模式,通道1设置为OD模式。 本实例使用移动侦测进行说明。可以按照如下步骤进行。
-
设置MD的静态/动态参数--->创建通道--->使能通道
-
user层获取运算结果--->归还结果buffer
-
注销通道
1.8.1.1 构建vdf模块¶
#include <threads.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <signal.h>
#include <mi_sys_datatype.h>
#include <mi_sys.h>
#include <mi_vdf_datatype.h>
#include <mi_vdf.h>
MI_VDF_Init();
/* Turn on the MD mode master switch */
MI_VDF_Run(E_MI_VDF_WORK_MODE_MD);
MI_VDF_CHANNEL vdfChn = 0;
MI_VDF_ChnAttr_t stAttr;
MI_VDF_MdAttr_t stMdAttr;
int width = 640, height = 360;
/* Set static parameters */
stMdAttr.stMdStaticParamsIn.width = width;
stMdAttr.stMdStaticParamsIn.height = height;
stMdAttr.stMdStaticParamsIn.roi_md.num = 4;
stMdAttr.stMdStaticParamsIn.md_alg_mode = MDALG_MODE_SAD;
stMdAttr.stMdStaticParamsIn.mb_size = MDMB_MODE_MB_8x8;
stMdAttr.stMdStaticParamsIn.sad_out_ctrl = MDSAD_OUT_CTRL_8BIT_SAD;
stMdAttr.stMdStaticParamsIn.color = 1;
/* Effective Monitoring Range Coordinates */
stMdAttr.stMdStaticParamsIn.roi_md.pnt[0].x = 0;
stMdAttr.stMdStaticParamsIn.roi_md.pnt[0].y = 0;
stMdAttr.stMdStaticParamsIn.roi_md.pnt[1].x = width - 1;
stMdAttr.stMdStaticParamsIn.roi_md.pnt[1].y = 0;
stMdAttr.stMdStaticParamsIn.roi_md.pnt[2].x = width - 1;
stMdAttr.stMdStaticParamsIn.roi_md.pnt[2].y = height - 1;
stMdAttr.stMdStaticParamsIn.roi_md.pnt[3].x = 0;
stMdAttr.stMdStaticParamsIn.roi_md.pnt[3].y = height - 1;
/* Set dynamic parameters */
stMdAttr.stMdDynamicParamsIn.sensitivity = 80;
stMdAttr.stMdDynamicParamsIn.learn_rate = 2000;
stMdAttr.stMdDynamicParamsIn.md_thr = 16;
stMdAttr.stMdDynamicParamsIn.obj_num_max = 0;
stMdAttr.u8MdBufCnt = 4;
stMdAttr.u8VDFIntvl = 1;
stMdAttr.ccl_ctrl.u16InitAreaThr = 8;
stMdAttr.ccl_ctrl.u16Step = 2;
stMdAttr.u8Enable = 1
stAttr.stMdAttr = stMdAttr;
stAttr.enWorkMode = E_MI_VDF_WORK_MODE_MD;
/* Create a channel, this interface will set the relevant static and dynamic parameters */
ret = MI_VDF_CreateChn(vdfChn, &stAttr);
if (ret != MI_SUCCESS)
{
ST_DBG("MI_VDF_CreateChn ret=0x%x\n", ret);
}
/* enable this channel, start working normally*/
MI_VDF_EnableSubWindow(vdfChn, 0, 0, 1);
1.8.1.2 获取运算结果¶
/* Obtain monitoring results */
MI_MD_static_param_t *pstMdStaticParamsIn = NULL;
MI_U8 *stSadDataArry = NULL;
MI_U8 *fgDataArry = NULL;
int width,height,col,row;
int buffer_size;
pstMdStaticParamsIn = (MI_MD_static_param_t *)&stAttr.stMdAttr.stMdStaticParamsIn;
width = pstMdStaticParamsIn->width;
height = pstMdStaticParamsIn->height;
if (pstMdStaticParamsIn->mb_size == MDMB_MODE_MB_4x4)
{
col = width >> 2;
row = height >> 2;
}
else if (pstMdStaticParamsIn->mb_size == MDMB_MODE_MB_8x8)
{
col = width >> 3; // 40
row = height >> 3; // 22
}
else // MDMB_MODE_MB_16x16
{
col = width >> 4;
row = height >> 4;
}
buffer_size = col * row; // MDSAD_OUT_CTRL_8BIT_SAD
if (pstMdStaticParamsIn->sad_out_ctrl == MDSAD_OUT_CTRL_16BIT_SAD)
{
buffer_size *= 2;
}
if (stAttr.stMdAttr.stMdStaticParamsIn.md_alg_mode == MDALG_MODE_SAD)
{
stSadDataArry = (MI_U8 *)malloc(buffer_size + 1);
if (NULL == stSadDataArry)
{
ST_ERR("can not malloc stSadDataArry buf.\n");
goto exit;
}
memset(stSadDataArry, 0x0, buffer_size + 1);
ST_DBG("enter md task loop, md model is %d\n", MDALG_MODE_SAD);
}
if (stAttr.stMdAttr.stMdStaticParamsIn.md_alg_mode == MDALG_MODE_FG)
{
fgDataArry = (MI_U8 *)malloc(col * row + 1);
if (NULL == fgDataArry)
{
ST_ERR("can not malloc fgDataArry buf.\n");
goto exit;
}
memset(fgDataArry, 0x0, col * row + 1);
ST_DBG("enter md task loop, md model is %d\n", MDALG_MODE_FG);
}
MI_VDF_Result_t stVdfResult = { (MI_VDF_WorkMode_e)0 };
MI_U8 *pu8MdRstData = NULL;
/* Get the output buffer, which stores the calculation results */
ret = MI_VDF_GetResult(vdfChn, &stVdfResult, 0);
if (MI_SUCCESS == ret)
{
if (1 == stVdfResult.stMdResult.u8Enable)
{
if (stVdfResult.stMdResult.pstMdResultSad != NULL &&
stVdfResult.stMdResult.pstMdResultSad->enOutCtrl == MDSAD_OUT_CTRL_8BIT_SAD &&
stAttr.stMdAttr.stMdStaticParamsIn.md_alg_mode == MDALG_MODE_SAD)
{
pu8MdRstData = (MI_U8 *)stVdfResult.stMdResult.pstMdResultSad->paddr;
memcpy(stSadDataArry, pu8MdRstData, buffer_size);
sMdSADFlag = 1;
}
else if (stVdfResult.stMdResult.pstMdResultObj != NULL &&
stAttr.stMdAttr.stMdStaticParamsIn.md_alg_mode == MDALG_MODE_FG)
{
// value = 0 or 255
memcpy(fgDataArry, stVdfResult.stMdResult.pstMdResultStatus->paddr, col * row);
sMdFGFlag = 1;
}
if (sMdSADFlag && stAttr.stMdAttr.stMdStaticParamsIn.md_alg_mode == MDALG_MODE_SAD)
{
/* Print the calculation results */
printf("pu8MdRstData:===>\n");
for (int i = 0; i < row; i++)
{
printf("===>");
for (int j = 0; j < col; j++)
{
printf("%02d, ", stSadDataArry[i * col + j]);
}
printf("<===\n");
}
printf("<===\n");
}
if (sMdFGFlag && stAttr.stMdAttr.stMdStaticParamsIn.md_alg_mode == MDALG_MODE_FG)
{
/* Print the calculation results */
printf("pu8MdRstData:===>\n");
for (int i = 0; i < row; i++)
{
printf("===>");
for (int j = 0; j < col; j++)
{
printf("%02d, ", fgDataArry[i * col + j]);
}
printf("<===\n");
}
printf("<===\n");
}
}
/* Return output buffer */
MI_VDF_PutResult(vdfChn, &stVdfResult);
}
1.8.1.3 析构vdf模块¶
/* diable this channel, start working normally*/
MI_VDF_EnableSubWindow(vdfChn, 0, 0, 0);
/* Turn off the MD mode master switch */
MI_VDF_Stop(E_MI_VDF_WORK_MODE_MD);
/* Destroy this channel */
MI_VDF_DestroyChn(vdfChn);
MI_VDF_Uninit();
2. API参考¶
2.1. API列表¶
| API名 | 功能 |
|---|---|
| MI_VDF_Init | 初始化MI_VDF模块 |
| MI_VDF_Uninit | 析构MI_VDF模块 |
| MI_VDF_CreateChn | 创建视频侦测(MD/OD/VG)通道 |
| MI_VDF_DestroyChn | 销毁已创建的视频侦测(MD/OD/VG)通道 |
| MI_VDF_SetChnAttr | 设置视频侦测(MD/OD/VG)通道属性 |
| MI_VDF_GetChnAttr | 获取视频侦测(MD/OD/VG)通道属性 |
| MI_VDF_EnableSubWindow | 使能VDF视频侦测(MD/OD/VG)通道子窗口 |
| MI_VDF_Run | 开始运行视频侦测(MD/OD/VG) |
| MI_VDF_Stop | 停止运行视频侦测(MD/OD/VG) |
| MI_VDF_GetResult | 获取视频侦测(MD/OD/VG)结果 |
| MI_VDF_PutResult | 释放视频侦测(MD/OD/VG)结果 |
| MI_VDF_GetLibVersion | 获取VDF指定通道(MD/OD/VG)的版本号 |
| MI_VDF_GetDebugInfo | 获取VDF指定通道的Debuginfo(only VG支持) |
2.2. API说明¶
2.2.1. MI_VDF_Init¶
-
功能
初始化VDF模块。
-
语法
MI_S32 MI_VDF_Init(void); -
返回值
-
0:成功。
-
非0:失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
MI_VDF_Init需要在调用MI_SYS_Init之后调用。
-
不可以重复调用MI_VDF_Init。
-
-
相关主题
2.2.2. MI_VDF_Uninit¶
-
功能
析构MI_VDF系统, 调用MI_VDF_Uninit 之前,需要确保已创建的VDF通道都已经被disable,所有通道的视频检测结果都被释放。
-
语法
MI_S32 MI_VDF_Uninit (void); -
返回值
-
0:成功。
-
非0:失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
MI_VDF_Uninit 调用前需要确保所有创建的VDF通道都处于disable状态。
-
MI_VDF_Uninit 调用前需要确保所有创建的VDF通道的结果都释放。
-
-
举例
参见MI_VDF_Init举例。
2.2.3. MI_VDF_CreateChn¶
-
功能
创建视频侦测(MD/OD/VG)通道。
-
语法
MI_S32 MI_VDF_CreateChn(MI_VDF_CHANNEL VdfChn, const MI_VDF_ChnAttr_t* pstAttr); -
形参
参数名称 参数含义 输入/输出 VdfChn 指定视频侦测通道号。 输入 pstAttr 设置视频通道属性值。 输入 -
返回值
-
0:成功。
-
非0:失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
VdfChn不能重复指定。
-
VdfChn的有效值范围:0<= VdfCh < MI_VDF_CHANNEL_MAX,MI_VDF_CHANNEL_MAX定义在 mi_vdf_datatype.h。
-
-
相关主题
2.2.4. MI_VDF_DestroyChn¶
-
功能
销毁已创建的视频侦测通道。
-
语法
MI_S32 MI_VDF_DestroyChn(MI_VDF_CHANNEL VdfChn); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
VdfChn必须是已经创建的视频侦测通道。
-
VdfChn的有效值范围:0<= VdfCh < MI_VDF_CHANNEL_MAX,MI_VDF_CHANNEL_MAX定义在 mi_vdf_datatype.h。
-
2.2.5. MI_VDF_SetChnAttr¶
-
功能
设置视频侦测通道的属性。
-
语法
MI_S32 MI_VDF_SetChnAttr(MI_VDF_CHANNEL VdfChn, const MI_VDF_ChnAttr_t* pstAttr); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 pstAttr 源端口配置信息数据结构指针。 输入 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
VdfChn必须是已经创建的视频侦测通道。
-
该接口指定设置视频侦测通道的动态属性值,即MI_VDF_ChnAttr_t中的 stMdAttr.stMdDynamicParamsIn / stMdAttr.stOdDynamicParamsIn / stMdAttr.stVgAttr部分。
-
2.2.6. MI_VDF_GetChnAttr¶
-
功能
获取视频侦测通道属性。
-
语法
MI_S32 MI_VDF_GetChnAttr(MI_VDF_CHANNEL VdfChn, MI_VDF_ChnAttr_t* pstAttr); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 pstAttr 用来保存返回的视频侦测通道属性值 输出 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
2.2.7. MI_VDF_EnableSubWindow¶
-
功能
使能/关闭指定的视频侦测通道子窗口。
-
语法
MI_S32 MI_VDF_EnableSubWindow(MI_VDF_CHANNEL VdfChn, MI_U8 u8Col, MI_U8 u8Row, MI_U8 u8Enable); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 u8Col 子窗口的行地址(保留参数,暂不使用) 输入 u8Row 子窗口的列地址(保留参数,暂不使用) 输入 u8Enable 子窗口的使能控制标志 输入 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:Mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
u8Col, u8Row为API 接口向上兼容而保留,暂无实际作用,可以直接赋值0。
-
工作模式目前支持三种:MD,OD,VG。
-
MI_VDF_Run/MI_VDF_Stop函数作用的是整个工作模式(MD/OD/VG)下的所有视频侦测通道;而MI_VDF_EnableSubWindow则是作用于单个视频侦测通道。对于一个VdfChn来说,只有MI_VDF_Run和MI_VDF_EnableSubWindow都开启,才会开始运行。只要调用MI_VDF_Stop或者调用MI_VDF_EnableSubWindow的时候u8Enable设置成flase,都会停止。
-
2.2.8. MI_VDF_Run¶
-
功能
开启指定的视频侦测工作模式(MD/OD/VG)。
-
语法
MI_S32 MI_VDF_Run(MI_VDF_WorkMode_e enWorkMode); -
形参
参数名称 描述 输入/输出 enWorkMode 视频侦测(MD/OD/VG)工作模式。 输入 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
工作模式目前支持三种:MD,OD,VG。
-
MI_VDF_Run/MI_VDF_Stop函数作用于整个工作模式(MD/OD/VG)下的所有视频侦测通道。
-
2.2.9. MI_VDF_Stop¶
-
功能
停止视频侦测(MD/OD/VG)工作模式。
-
语法
MI_S32 MI_VDF_Stop(MI_VDF_WorkMode_e enWorkMode); -
形参
参数名称 描述 输入/输出 enWorkMode 视频侦测(MD/OD/VG)工作模式。 输入 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
工作模式目前支持三种:MD,OD,VG。
-
MI_VDF_Run/MI_VDF_Stop函数作用于整个工作模式(MD/OD/VG)下的所有视频侦测通道。
-
2.2.10. MI_VDF_GetResult¶
-
功能
获取指定视频侦测通道的检测结果。
-
语法
MI_S32 MI_VDF_GetResult(MI_VDF_CHANNEL VdfChn, MI_VDF_Result_t* pstVdfResult, MI_S32 s32MilliSec); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 pstVdfResult 用来保存返回的视频侦测结果 输出 s32MilliSec 输入时间参数(保留参数,暂不使用) 输入 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
-
VdfChn必须是已经创建的视频侦测通道。
-
s32MilliSec为API 接口向上兼容而保留,暂无实际作用,可以直接赋值0。
-
用于保存返回结果的指针不能为空。
-
2.2.11. MI_VDF_PutResult¶
-
功能
释放指定视频侦测通道的检测结果。
-
语法
MI_S32 MI_VDF_PutResult(MI_VDF_CHANNEL VdfChn, MI_VDF_Result_t* pstVdfResult); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 pstVdfResult 指定需要释放视频通道的结果参数 输入 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
- VdfChn必须是已经创建的视频侦测通道。
2.2.12. MI_VDF_GetLibVersion¶
-
功能
获取MD/OD/VG库版本号。
-
语法
MI_S32 MI_VDF_GetLibVersion(MI_VDF_CHANNEL VdfChn, MI_U32* u32VDFVersion); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 u32VDFVersion 存储版本号的整形指针(不能为空) 输出 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
2.2.13. MI_VDF_GetDebugInfo¶
-
功能
获取MD/OD/VG库的调试信息。
-
语法
MI_S32 MI_VDF_GetDebugInfo(MI_VDF_CHANNEL VdfChn, MI_VDF_DebugInfo_t *pstDebugInfo); -
形参
参数名称 描述 输入/输出 VdfChn 已经创建的视频侦测通道号。 输入 pstDebugInfo 存储VDF 调试信息的整形指针(不能为空) 输出 -
返回值
-
0:成功。
-
非0: 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys.h、mi_md.h、mi_od.h、mi_vg.h、mi_vdf.h
-
库文件:libOD_LINUX.a、libMD_LINUX.a、libVG_LINUX.a、libmi_vdf.a
-
-
注意
- 目前只支持返回VG的调试信息,当VdfChn的工作模式是VG时,才有效。
3. 数据类型¶
3.1. VDF结构体说明¶
| 结构体 | 定义 |
|---|---|
| MI_VDF_WorkMode_e | 定义VDF工作模式的枚举类型 |
| MI_VDF_Color_e | 定义视频侦测通道输入源的枚举类型 |
| MI_VDF_ODWindow_e | 定义OD时画面的子窗口数量的枚举类型 |
| MI_MD_Result_t | 定义MD结果的结构体 |
| MI_OD_Result_t | 定义OD结果的结构体 |
| MI_VG_Result_t | 定义VG结果的结构体 |
| MI_VDF_Result_t | 定义VDF工作模式对应结果的结构体 |
| MI_VDF_MdAttr_t | 定义MD通道属性的结构体 |
| MI_VDF_OdAttr_t | 定义OD通道属性的结构体 |
| MI_VDF_VgAttr_t | 定义VG通道属性的结构体 |
| MI_VDF_ChnAttr_t | 定义通道工作模式属性的结构体 |
| MDRST_STATUS_t | 定义侦测子窗口区域运动检测结果的结构体 |
| MI_MD_ResultSize_t | 定义MD结果长度的结构体 |
3.1.1. MI_VDF_WorkMode_e¶
-
说明
定义VDF工作模式的枚举类型。
-
定义
typedef enum { E_MI_VDF_WORK_MODE_MD = 0, E_MI_VDF_WORK_MODE_OD, E_MI_VDF_WORK_MODE_VG, E_MI_VDF_WORK_MODE_MAX }MI_VDF_WorkMode_e; -
成员
成员名称 描述 E_MI_VDF_WORK_MODE_MD MD工作模式 E_MI_VDF_WORK_MODE_OD OD工作模式 E_MI_VDF_WORK_MODE_VG VG工作模式 E_MI_VDF_WORK_MODE_MAX 工作模式的错误码标识
3.1.2. MI_VDF_Color_e¶
-
说明
定义视频侦测通道输入源的枚举类型
-
定义
typedef enum { E_MI_VDF_COLOR_Y = 1, E_MI_VDF_COLOR_MAX } MI_VDF_Color_e; -
成员
成员名称 描述 E_MI_VDF_COLOR_Y 视频侦测通道输入源类型的正确标识 E_MI_VDF_COLOR_MAX 视频侦测通道输入源类型的错误码标识
3.1.3. MI_VDF_ODWindow_e¶
-
说明
定义OD时画面的子窗口数量的枚举类型
-
定义
typedef enum { E_MI_VDF_ODWINDOW_1X1 = 0, E_MI_VDF_ODWINDOW_2X2, E_MI_VDF_ODWINDOW_3X3, E_MI_VDF_ODWINDOW_MAX } MI_VDF_ODWindow_e; -
成员
成员名称 描述 E_MI_VDF_ODWINDOW_1X1 OD画面分割为1个子窗口 E_MI_VDF_ODWINDOW_2X2 OD画面分割为2x2个子窗口 E_MI_VDF_ODWINDOW_3X3 OD画面分割为3x3个子窗口 E_MI_VDF_ODWINDOW_MAX OD画面子窗口数量的错误码标识
3.1.4. MI_MD_Result_t¶
-
说明
定义MD结果的结构体。
-
定义
typedef struct MI_MD_Result_s { MI_U64 u64Pts; //The PTS of Image MI_U8 u8Enable; //=1表明该结果值有效 MI_MD_ResultSize_t stSubResultSize; MDRST_STATUS_t* pstMdResultStatus; //The MD result of Status MDSAD_DATA_t* pstMdResultSad; //The MD result of SAD MDOBJ_DATA_t* pstMdResultObj; //The MD result of Obj }MI_MD_Result_t; -
成员
成员名称 描述 u64Pts 图像显示时间 u8Enable 表明该通道是否使能 u8Reading 表明该结果正在被应用层读取 stSubResultSize 描述MD返回的Sad、Obj、ReasultStauts子结构的Size pstMdResultStatus 描述MD各区域是否检测到运动,MB为单位进行输出,0-区块未检测运动,255-区块检测到运动 pstMdResultSad 描述MD的Sad值,例如输入图为640*360,MB:8x8,则会得到(640/8)x(360/8)=80x45个SAD value pstMdResultObj 描述MD的CCL值,做连通运算后的结果,是以物件为单位
3.1.5. MI_OD_Result_t¶
-
说明
定义OD结果的结构体。
-
定义
typedef struct MI_OD_Result_s { MI_U8 u8Enable; MI_U8 u8WideDiv; //The number of divisions of window in horizontal direction MI_U8 u8HightDiv; //The number of divisions of window in vertical direction MI_U8 u8DataLen; //OD detect result readable size MI_U64 u64Pts; //The PTS of Image MI_S8 u8RgnAlarm[3][3]; //The OD result of the sub-window MI_S8 s8OdStatus; //The OD detect status }MI_OD_Result_t; -
成员
成员名称 描述 u8Enable 表明该通道是否使能 u8WideDiv 获取OD在水平方向的窗口数量 u8HightDiv 获取OD在垂直方向的窗口数量 u8DataLen 设置OD测试结果的可读大小 u64Pts 图像显示时间 u8RgnAlarm[3][3] OD子窗口信息的结果
0:视窗没有被遮挡
1:视窗被遮挡
2:视窗特征不足
-1:失败s8OdStatus 1. s8OdStatus = 0 则No od detected
2. s8OdStatus = 1 则Od detected
3. s8OdStatus = -1 则Run od error -
注意事项
若user需要获取s8OdStatus这个值,只需关注状态值0或者1来进行条件判断。当其为-1时并不需要关注,OD已经run失败了,所以MI_VDF_GetResult会失败,从而不再拿到s8OdStatus值。
3.1.6. MI_VG_Result_t¶
-
说明
定义VG结果的结构体。
-
定义
typedef struct _MI_VgResult_t { int32_t alarm[MAX_NUMBER]; int32_t alarm_cnt; MI_VgBoundingBox_t bounding_box[20]; } MI_VgResult_t; -
成员
成员名称 描述 alarm 描述VG的检测结果 #define MAX_NUMBER 4 alarm_cnt 描述VG的警报次数 bounding_box 描述触发VG警报的物体信息
3.1.7. MI_VDF_Result_t¶
-
说明
定义VDF工作模式对应结果的结构体。
-
定义
typedef struct MI_VDF_Result_s { MI_VDF_WorkMode_e enWorkMode; VDF_RESULT_HANDLE handle; union { MI_MD_Result_t stMdResult; MI_OD_Result_t stOdResult; MI_VG_Result_t stVgResult; }; }MI_VDF_Result_t; -
成员
成员名称 描述 enWorkMode VDF工作模式(MD/OD/VG) handle 保存结果的handle stMdResult 描述MD结果的结构体 stOdResult 描述OD结果的结构体 stVgResult 描述VG结果的结构体
3.1.8. MI_VDF_MdAttr_t¶
-
说明
定义MD通道属性的结构体
-
定义
typedef struct MI_VDF_MdAttr_s { MI_U8 u8Enable; MI_U8 u8MdBufCnt; MI_U8 u8VDFIntvl; MI_U32 u32RstBufSize; MI_MD_ResultSize_t stSubResultSize; MDCCL_ctrl_t ccl_ctrl; MI_MD_static_param_t stMdStaticParamsIn; MI_MD_param_t stMdDynamicParamsIn; }MI_VDF_MdAttr_t; -
成员
成员名称 描述 u8Enable 表明该通道是否使能 u8MdBufCnt 设置可以缓存的MD结果数量 MD结果缓存个数取值范围:[1, 8] 静态属性 u8VDFIntvl 侦测间隔取值范围:[0, 29],以帧为单位 动态属性 u32RstBufSize MD返回结果的总大小 stSubResultSize MD返回结果各子结构体(struct MI_MD_ResultSize_s) (Sad值、CCL值、ResultStatus)的大小 ccl_ctrl ccl_ctrl属性设置 stMdStaticParamsIn MD静态属性参数设置 stMdDynamicParamsIn MD动态属性参数设置
3.1.9. MI_VDF_OdAttr_t¶
-
说明
定义OD通道属性的结构体
-
定义
typedef struct MI_VDF_OdAttr_s { MI_U8 u8Enable; MI_U8 u8OdBufCnt; MI_U8 u8VDFIntvl; MI_U32 u32RstBufSize; MI_OD_static_param_t stOdStaticParamsIn; MI_OD_param_t stOdDynamicParamsIn; }MI_VDF_OdAttr_t; -
成员
成员名称 描述 u8Enable 表明该通道是否使能 u8OdBufCnt OD结果缓存个数取值范围:[1, 16] 静态属性 u8VDFIntvl 侦测间隔取值范围:[0, 29],以帧为单位 动态属性 u32RstBufSize OD返回结果的总大小 stOdDynamicParamsIn OD动态属性参数设置 stOdStaticParamsIn OD静态属性参数设置
3.1.10. MI_VDF_VgAttr_t¶
-
说明
定义VG通道属性的结构体
-
定义
typedef struct MI_VDF_VgAttr_s { MI_U8 u8Enable; MI_U8 u8VgBufCnt; MI_U8 u8VDFIntvl; MI_U32 u32RstBufSize; MI_U16 width; MI_U16 height; MI_U16 stride; float object_size_thd; uint8_t indoor; uint8_t function_state; uint16_t line_number; MI_VgLine_t line[4]; MI_VgRegion_t vg_region; MI_VgSet_t stVgParamsIn; } MI_VDF_VgAttr_t; -
成员
成员名称 描述 u8Enable 表明该通道是否使能 u8VgBufCnt VG结果缓存个数取值范围:[1, 8] 静态属性 u8VDFIntvl 侦测间隔取值范围:[0, 29],以帧为单位 动态属性 u32RstBufSize VG返回结果的总大小 width 图像的宽度 height 图像的高度 stride 图像的stride object_size_thd 决定滤除物体占感兴趣区域的百分比大小 (若object_size_thd = 1,表示有物体面积小于图像画面中感兴趣区域的百分之一则会忽略不计算。) indoor 相机安装在室内或者室外,1-室内,0-室外 function_state 设定虚拟线段与区域入侵侦测模式类型: 1)VG_VIRTUAL_GATE,表示模式为虚拟线段; 2)VG_REGION_INVASION,表示模式为区域入侵 line_number 设定虚拟线段的数目,范围:[1-4] line[4] 表明虚拟线段的结构体,最多可设置4条 vg_region 表明区域入侵的相关参数 stVgParamsIn Vg属性参数结构体,无需设置,由API返回
3.1.11. MI_VDF_ChnAttr_t¶
-
说明
定义通道工作模式属性的结构体。
-
定义
typedef struct MI_VDF_ChnAttr_s { MI_VDF_WorkMode_e enWorkMode; union { MI_VDF_MdAttr_t stMdAttr; MI_VDF_OdAttr_t stOdAttr; MI_VDF_VgAttr_t stVgAttr; }; }MI_VDF_ChnAttr_t; -
成员
成员名称 描述 enWorkMode 工作模式(移动侦测,遮挡侦测,电子围栏) 静态属性 stMdAttr 移动侦测属性 stOdAttr 遮挡侦测属性 stVgAttr 电子围栏属性
3.1.12. MDRST_STATUS_t¶
-
说明
定义侦测子窗口区域运动检测结果的结构体
-
定义
typedef struct MDRST_STATUS_s { MI_U8 *paddr; } MDRST_STATUS_t; -
成员
成员名称 描述 paddr 指向运动检测状态的buf,每个区域占用1字节0-区块未检测运动,255-区块检测到运动
3.1.13. MI_MD_ResultSize_t¶
-
说明
定义MD结果长度的结构体。
-
定义
typedef struct MI_MD_ResultSize_s { MI_U32 u32RstStatusLen; MI_U32 u32RstSadLen; MI_U32 u32RstObjLen; }MI_MD_ResultSize_t; -
成员
成员名称 描述 u32RstStatusLen 描述MD检测到运动状态值的长度 u32RstSadLen 描述MD的Sad值的长度 u32RstObjLen 描述MD的CCL值的长度
3.2. MD结构体说明¶
| 数据类型 | 定义 |
|---|---|
| MDMB_MODE_e | 宏块的大小枚举值 |
| MDSAD_OUT_CTRL_e | SAD输出格式的枚举值 |
| MDALG_MODE_e | CCL连通区域的运算模式枚举值,可依前景结果或者SAD结果做CCL运算 |
| MDCCL_ctrl_t | 控制CCL运行的参数结构 |
| MDPreproc_ctrl_t | 控制MI_MD_Preproc运行的参数结构,VDF目前不支持该功能 |
| MDblock_info_t | ROI坐标结构 |
| MDPoint_t | 坐标结构 |
| MDROI_t | MD侦测区域结构 |
| MDSAD_DATA_t | MI_MD_ComputeImageSAD()函数输出的结构 |
| MDOBJ_t | 定义连通区域的信息:面积及最小包围矩形的坐标位置 |
| MDOBJ_DATA_t | CCL输出的结构 |
| MI_MD_IMG_t | 移动侦测的图像来源结构,分为实体与虚拟的内存地址指针。 |
| MI_MD_IMG64_t | 移动侦测的图像来源结构,分为64bit实体内存地址与虚拟的内存地址指针。 |
| MI_MD_static_param_t | MD静态参数设置结构 |
| MI_MD_param_t | MD动态参数设置结构 |
3.2.1. MDMB_MODE_e¶
-
说明
宏块的大小枚举值。
-
定义
typedef enum MDMB_MODE_E { MDMB_MODE_MB_4x4 = 0x0, MDMB_MODE_MB_8x8 = 0x1, MDMB_MODE_MB_16x16 = 0x2, MDMB_MODE_BUTT } MDMB_MODE_e; -
成员
成员名称 描述 MDMB_MODE_MB_4x4 使用4x4宏块 MDMB_MODE_MB_8x8 使用8x8宏块 MDMB_MODE_MB_16x16 使用16x16宏块
3.2.2. MDSAD_OUT_CTRL_e¶
-
说明
SAD输出格式的枚举值。
-
定义
typedef enum MDSAD_OUT_CTRL_E { MDSAD_OUT_CTRL_16BIT_SAD = 0x0, MDSAD_OUT_CTRL_8BIT_SAD = 0x1, MDSAD_OUT_CTRL_BUTT } MDSAD_OUT_CTRL_e; -
成员
成员名称 描述 MDSAD_OUT_CTRL_16BIT_SAD 16 bit输出 MDSAD_OUT_CTRL_8BIT_SAD 8 bit输出
3.2.3. MDALG_MODE_e¶
-
说明
CCL连通区域的运算模式枚举值,可依前景结果或者SAD结果做CCL运算。
-
定义
typedef enum MDALG_MODE_E { MDALG_MODE_FG = 0x0, MDALG_MODE_SAD = 0x1, MDALG_MODE_FRAMEDIFF = 0x2, MDALG_MODE_BUTT } MDALG_MODE_e; -
成员
成员名称 描述 MDALG_MODE_FG 前景模式 MDALG_MODE_SAD SAD模式 MDALG_MODE_FRAMEDIFF FrameDifference模式 -
Tips 前景模式(FG)是软件实现的,而SAD和Frame Diff模式则是有硬件算子的支持,且算子走硬件需要满足输入图像stride和width 16像素对齐、height 2像素对齐。
3.2.4. MDCCL_ctrl_t¶
-
说明
控制CCL运行的参数结构。
-
定义
typedef struct MDCCL_ctrl_s { uint16_t u16InitAreaThr; uint16_t u16Step; } MDCCL_ctrl_t; -
成员
成员名称 描述 u16InitAreaThr 区域面积的门坎值(这个值不是一定会用上,推荐值设定 8) u16Step 每提高一次门坎值的提升值(这个值不是一定会用上,推荐值设定 2)
3.2.5. MDPreproc_ctrl_t¶
-
说明
控制MI_MD_Preproc运行的参数结构。VDF目前不支持该功能。
-
定义
typedef struct MDPreproc_ctrl_s { uint16_t u16Md_rgn_size; uint16_t u16Align; } MDPreproc_ctrl_t; -
参数
参数 说明 u16Md_rgn_size 移动区域的大小范围门坎值,小于此门坎则不计算该区域为动态区域 u16Align 对应CNN model的align限制(HC/HD:32ss align, FD:64align)
3.2.6. MDblock_info_t¶
-
说明
描述一个block的ROI坐标结构。VDF目前不支持该功能。
-
定义
typedef struct MDblock_info_s { uint16_t st_x; uint16_t st_y; uint16_t end_x; uint16_t end_y; } MDblock_info_t; -
参数
参数 说明 st_x ROI的左上x坐标 st_y ROI的左上y坐标 end_x ROI的右下x坐标 end_y ROI的右下y坐标
3.2.7. MDPoint_t¶
-
说明
坐标结构。
-
定义
typedef struct MDPoint_s { uint16_t x; uint16_t y; } MDPoint_t; -
成员
成员名称 描述 x X坐标 y Y坐标
3.2.8. MDROI_t¶
-
说明
MD侦测区域结构。
-
定义
typedef struct MDROI_s { uint8_t num; MDPoint_t pnt[8]; } MDROI_t; -
成员
成员名称 描述 num MD侦测区域点数,目前仅支持设为4点 pnt[8] 四点坐标(须设为矩形) -
注意事项
要求设置为矩形且四个点有前后顺序约束,num=4,以左上角点开始,按照顺时针依序设置四个点,如图示。

3.2.9. MDSAD_DATA_t¶
-
说明
MI_MD_ComputeImageSAD函式输出的结构。
-
定义
typedef struct MDSAD_DATA_s { void *paddr; uint32_t stride; MDSAD_OUT_CTRL_e enOutCtrl; } MDSAD_DATA_t; -
成员
成员名称 描述 paddr 存放SAD结果的内存地址指针 stride Image stride enOutCtrl SAD输出格式的枚举值
3.2.10. MDOBJ_t¶
-
说明
定义连通区域的信息:面积及最小包围矩形的坐标位置。
-
定义
typedef struct MDOBJ_s { uint32_t u32Area; uint16_t u16Left; uint16_t u16Right; uint16_t u16Top; uint16_t u16Bottom; } MDOBJ_t; -
成员
成员名称 描述 u32Area 单一连通区域的像素总数 u16Left 最小矩形的左上x坐标 u16Right 最小矩形的右下x坐标 u16Top 最小矩形的左上y坐标 u16Bottom 最小矩形的右下y坐标 -
注意事项
举例说明:{3, 1, 2, 2, 3},元素1,代表该连通的某个label共有三个像数点,假设分别为:(1,3), (2,2), (2,3)。元素2,代表从这些像素点中取最小的x值,元素3,代表从这些像素点中取最大的x值,元素4、5分别是从这些像素点中取最小的y值和最大的y值。
3.2.11. MDOBJ_DATA_t¶
-
说明
MI_MD_CCL输出的结构。
-
定义
typedef struct MDOBJ_DATA_s { uint8_t u8RegionNum; MDOBJ_t *astRegion; uint8_t indexofmaxobj; uint32_t areaofmaxobj; uint32_t areaoftotalobj; } MDOBJ_DATA_t; -
成员
成员名称 描述 u8RegionNum 连通区域数量 astRegion 连通区域的信息:面积及最小包围矩形的坐标位置最大容许数量为255 indexofmaxobj 最大面积的连通区域索引值 areaofmaxobj 最大面积的连通区域面积值 areaoftotalobj 所有连通区域的面积和
3.2.12. MI_MD_IMG_t¶
-
说明
移动侦测的图像来源结构,分为物理与虚拟的内存地址指针。
-
定义
typedef struct MI_MD_IMG_s { void *pu32PhyAddr; uint8_t *pu8VirAddr; } MI_MD_IMG_t; -
成员
成员名称 描述 pu32PhyAddr 物理内存地址指针,若无请填NULL pu8VirAddr 虚拟内存地址指针
3.2.13. MI_MD_IMG64_t¶
-
说明
移动侦测的图像来源结构,分为64bit物理内存地址与虚拟的内存地址指针。
-
定义
typedef struct MI_MD_IMG64_s { uint64_t u64PhyAddr; uint8_t *pu8VirAddr; } MI_MD_IMG64_t; -
成员
成员名称 描述 u64PhyAddr 物理内存地址指针 pu8VirAddr 虚拟内存地址指针
3.2.14. MI_MD_static_param_t¶
-
说明
MD静态参数设置结构。
-
定义
typedef struct MI_MD_static_param_s { uint16_t width; uint16_t height; uint8_t color; uint32_t stride; MDMB_MODE_e mb_size; MDSAD_OUT_CTRL_e sad_out_ctrl; MDROI_t roi_md; MDALG_MODE_e md_alg_mode; } MI_MD_static_param_t; -
成员
成员名称 描述 width 输入图像宽 height 输入图像高 stride 输入图像的stride color MD输入图像的类型,目前MD只吃Y分量,固定设置为1,不做更改 mb_size 宏块的大小枚举值 sad_out_ctrl SAD输出格式的枚举值 roi_md MD侦测区域结构 md_alg_mode CCL连通区域的运算模式枚举值
3.2.15. MI_MD_param_t¶
-
说明
MD动态参数设置结构。
-
定义
typedef struct MI_MD_param_s { uint8_t sensitivity; uint16_t learn_rate; uint32_t md_thr; uint32_t obj_num_max; uint8_t LSD_open; } MI_MD_param_t; -
成员
成员名称 描述 sensitivity 算法灵敏度,范围[10,20,30,…,100],值越大越灵敏,输入的灵敏度如非 10 的倍数, 当运算后反馈, 有可能不为当初输入的数值, 会有 +-1 之偏差。仅于FG模式下有效。 learn_rate 随不同模式而有不同设定标准
MDALG_MODE_FG: 单位毫秒,范围[1000,30000],用于控制前端物体停止运动多久时,才作为背景画面
MDALG_MODE_SAD: 范围[1, 255],背景更新的权重比,建议设定值: 128。在FG中描述的是时间,在SAD中描述的是权重,学习的速度快或权重大则容易快速解除报警。举例说明:物体进入画面静止不动,若此时权重大或者学习速度快,则此物体会快速被学习从而成为背景,随后报警解除。反之,要较长时间才解除报警。md_thr 当呼叫MI_MD_CCL连通组件标记的运算时,作为判定移动有效的门坎值,随不同模式而有不同设定标准
MDALG_MODE_FG: 设置为百分比(%),范围[0, 99],判断MB是否为警报的门坎值。若MB size 8 * 8,md_thr=50,当MB中有32个以上的pixel为前景则此MB判为有效。
MDALG_MODE_SAD: 设置为pixel差值,范围[0, 255],判断MB是否为警报的门坎值。若MB size 8 * 8,md_thr=50,当MB中平均的pixel差值超过50,则此MB判为有效。obj_num_max CCL的连通区域数量限制值,目前无作用 LSD_open 决定是否作用MI_MD_LightSwitchDetect。范围[0,1],若在LSD_open=0的情况下调用LightSwitchDetect()函数,则无作用。目前VDF不支持该功能
3.3. OD结构体说明¶
| 枚举 | |
|---|---|
| MI_OD_WIN_STATE | OD检测窗口的结果 |
| ODColor_e | OD数据源输入的类型 |
| ODWindow_e | OD检测窗口的类型 |
| 结构 | |
| ODPoint_t | 坐标结构 |
| ODROI_t | OD侦测区域结构 |
| MI_OD_IMG_t | 遮挡侦测的图像来源结构,分为实体与虚拟的内存地址指针。 |
| MI_OD_IMG64_t | 遮挡侦测的图像来源结构,分为64bit实体内存地址与虚拟的内存地址指针。 |
| MI_OD_static_param_t | OD静态参数设置结构 |
| MI_OD_param_t | OD动态参数设置结构 |
3.3.1. MI_OD_WIN_STATE¶
-
说明
OD检测窗口的结果。
-
定义
typedef enum _MI_OD_WIN_STATE { MI_OD_WIN_STATE_NON_TAMPER = 0, MI_OD_WIN_STATE_TAMPER = 1, MI_OD_WIN_STATE_NO_FEATURE = 2, MI_OD_WIN_STATE_FAIL = -1, } MI_OD_WIN_STATE; -
成员
成员名称 描述 MI_OD_WIN_STATE_NON_TAMPER 窗口没遮挡 MI_OD_WIN_STATE_TAMPER 窗口被遮挡 MI_OD_WIN_STATE_NO_FEATURE 窗口特征不足 MI_OD_WIN_STATE_FAIL 失败
3.3.2. ODColor_e¶
-
说明
OD数据源输入的类型。
-
定义
typedef enum { OD_Y = 1, OD_COLOR_MAX } ODColor_e; -
成员
成员名称 描述 OD_Y YUV数据源中的y分量 OD_COLOR_MAX 输入图像类型的最大值
3.3.3. ODWindow_e¶
-
说明
OD检测窗口的类型,推荐值为OD_WINDOW_3X3,用于测试。
-
定义
typedef enum { OD_WINDOW_1X1 = 0, OD_WINDOW_2X2, OD_WINDOW_3X3, OD_WINDOW_MAX } ODWindow_e; -
成员
成员名称 描述 OD_WINDOW_1X1 1个窗口 OD_WINDOW_2X2 4个窗口 OD_WINDOW_3X3 9个窗口 OD_WINDOW_MAX 窗口类型的最大值
3.3.4. ODPoint_t¶
-
说明
坐标结构。
-
定义
typedef struct ODPoint_s { uint16_t x; uint16_t y; } ODPoint_t; -
成员
成员名称 描述 x X坐标 y Y坐标
3.3.5. ODROI_t¶
-
说明
OD侦测区域结构。
-
定义
typedef struct ODROI_s { uint8_t num; ODPoint_t pnt[8]; } ODROI_t; -
成员
成员名称 描述 num OD侦测区域点数,目前仅支持设为4点 pnt[8] 四点坐标(须设为矩形) -
注意
要求设置为矩形,num=4,左上角坐标顺时针依序设置四个点,如图示。

3.3.6. MI_OD_IMG_t¶
-
说明
遮挡侦测的图像来源结构,分为实体与虚拟的内存地址指针。
-
定义
typedef struct MI_OD_IMG_s { void *pu32PhyAddr; uint8_t *pu8VirAddr; } MI_OD_IMG_t; -
成员
成员名称 描述 pu32PhyAddr 实体的内存地址指针 pu8VirAddr 虚拟的内存地址指针
3.3.7. MI_OD_IMG64_t¶
-
说明
遮挡侦测的图像来源结构,分为64bit实体内存地址与虚拟的内存地址指针。
-
定义
typedef struct MI_OD_IMG64_s { uint64_t u64PhyAddr; uint8_t *pu8VirAddr; } MI_OD_IMG64_t; -
成员
成员名称 描述 u64PhyAddr 实体的内存地址 pu8VirAddr 虚拟的内存地址指针
3.3.8. MI_OD_static_param_t¶
-
说明
OD静态参数设置结构。
-
定义
typedef struct MI_OD_static_param_s { uint16_t inImgW; uint16_t inImgH; uint32_t inImgStride; ODColor_e nClrType; ODWindow_e div; ODROI_t roi_od; int32_t alpha; int32_t M; int32_t MotionSensitivity; } MI_OD_static_param_t; -
成员
成员名称 描述 inImgW 输入图像宽 inImgH 输入图像高 inImgStride 输入图像stride nClrType OD输入图像的类型 div OD检测窗口的类型 roi_od OD侦测区域结构 alpha 控制产生参考图像的学习速率 M 多少张图像更新一次参考图像 MotionSensitivity 移动敏感度设置 -
注意事项
-
设置范围 alpha : 0~10,建议设置 2,不建议更动。(alpha系数是背景特征帧在积累过程中使用的image blending 系数,alpha只有在走SW时才会起作用,走硬件算子则是内部固定。)
-
设置范围 MotionSensitivity: 0~5,设5表示对轻微的晃动都很敏感,容易发报;设0表示对轻微晃动的宽容性比较好,不会发报,这边指的轻微晃动是风吹摇曳之类的,建议初始可设5。
-
M建议设置120,不建议更动,即以多少帧进行背景融合处理。在未达M帧前,则使用当前现有帧数的积累进行融合成背景特征,达到M帧后,新进来的帧替代早进来的帧,例如在对比122帧,则背景融合帧为帧2~帧121。以此类推
-
-
Tips OD有硬件算子的支持,但算子走硬件需满足输入图像stride和width 16像素对齐,height 2像素对齐。
3.3.9. MI_OD_param_t¶
-
说明
OD动态参数设置结构。
-
定义
typedef struct MI_OD_param_s { int32_t thd_tamper; int32_t tamper_blk_thd; int32_t min_duration; } MI_OD_param_t; -
成员
成员名称 描述 thd_tamper 图像差异比例门坎值 tamper_blk_thd 图像被遮挡区域数量门坎值 min_duration 图像差异持续时间门坎值,单位是frame cnt -
注意事项
-
设置范围 thd_tamper : 0~10。若thd_tamper=3,表示超过70%画面遮挡即发报。
-
设置范围 tamper_blk_thd : 对应MI_OD_Init的窗口类型参数,若为OD_WINDOW_3X3,则tamper_blk_thd 最多不可超过9,即1~9。
-
例如MI_OD_Init的窗口类型参数为OD_WINDOW_3X3(9个子区域)tamper_blk_thd值为4时,当被遮挡的子区域的数量达到4个才触发MI_OD_Run的返回值为1。
-
min_duration数值越大,检测到被遮挡所需的时间越长。
-
MI_OD_Run的灵敏度可以通过设置tamper_blk_thd和min_duration来调节。对应高中低的推荐值如下:
参数名 高 中 低 tamper_blk_thd 2 4 8 min_duration 5 15 30
-
3.4. VG结构体说明¶
| 枚举 | |
|---|---|
| VgFunction | 侦测模式的枚举值 |
| VgRegion_Dir | 区域入侵的方向的枚举值 |
| VgSize_Sensitively | 灵敏度参数结构 |
| VgDirection_State | 区域入侵的侦测规则枚举值 |
| 结构 | |
| MI_VG_Point_t | 坐标点对应的结构 |
| MI_VgLine_t | 描述虚拟线段和方向的结构 |
| MI_VgRegion_t | 描述设置区域入侵的结构 |
| MI_VgSet_t | Vg对应参数设置的结构 |
| MI_VgResult_t | Vg检测结果对应的结构 |
| MI_VgBoundingBox_t | Vg检测结果对应的物件大小结构 |
| MI_VgDetectThd | Vg建立背景信息的参数设置的结构 |
3.4.1. VgFunction¶
-
说明
侦测模式的枚举值。
-
定义
typedef enum _VgFunction { VG_VIRTUAL_GATE = 2, VG_REGION_INVASION = 3 } VgFunction; -
成员
成员名称 描述 VG_VIRTUAL_GATE 表示模式为虚拟线段 VG_REGION_INVASION 表示模式为区域入侵
3.4.2. VgRegion_Dir¶
-
说明
区域入侵的方向的枚举值。
-
定义
typedef enum _VgRegion_Dir { VG_REGION_ENTER = 0, VG_REGION_LEAVING = 1, VG_REGION_CROSS = 2 } VgRegion_Dir; -
成员
成员名称 描述 VG_REGION_ENTER 表示要进入警报区域才触发警报 VG_REGION_LEAVING 表示要离开警报区域才触发警报 VG_REGION_CROSS 表示只要穿越警报区域就触发警报
3.4.3. VgSize_Sensitively¶
-
说明
灵敏度参数结构。
-
定义
typedef enum _VgSize_Sensitively { VG_SENSITIVELY_MIN = 0, VG_SENSITIVELY_LOW = 1, VG_SENSITIVELY_MIDDLE = 2, VG_SENSITIVELY_HIGH = 3, VG_SENSITIVELY_MAX = 4 } VgSize_Sensitively; -
成员
成员名称 描述 VG_SENSITIVELY_MIN 表示只侦测大于30%影像大小的物体 VG_SENSITIVELY_LOW 表示只侦测大于10%影像大小的物体 VG_SENSITIVELY_MIDDLE 表示只侦测大于5%影像大小的物体 VG_SENSITIVELY_HIGH 表示只侦测大于1%影像大小的物体 VG_SENSITIVELY_MAX 表示只侦测大于0.5%影像大小的物体
3.4.4. VgDirection_State¶
-
说明
区域入侵的侦测规则枚举值。
-
定义
typedef enum _VgDirection_State { VG_SPEC_DIRECTION_CLOSE = 0, VG_SPEC_DIRECTION_OPEN = 1 } VgDirection_State; -
成员
成员名称 描述 VG_SPEC_DIRECTION_CLOSE 关闭结果会区分进入和离开区域的功能 (设定 VG_REGION_CROSS 前提下,只侦测警报,无判断方向功能。) VG_SPEC_DIRECTION_OPEN 开启结果会区分进入和离开区域的功能 (设定 VG_REGION_CROSS 前提下,可判断出警报时的方向是进入还是离开。)
3.4.5. MI_VG_Point_t¶
-
说明
坐标点对应的结构。
-
定义
typedef struct _VG_Point_t { int32_t x; int32_t y; } MI_VG_Point_t; -
成员
成员名称 描述 x X坐标 y Y坐标
3.4.6. MI_VgLine_t¶
-
说明
描述虚拟线段和方向的结构。
-
定义
typedef struct _VG_Line_t { MI_VG_Point_t px; //point x MI_VG_Point_t py; //point y MI_VG_Point_t pdx; //point direction x MI_VG_Point_t pdy; //point direction y } MI_VgLine_t; -
注意
利用线段点和方向点进行构建,从特定方向穿过才报警,或者任意方向穿过才报警。报警的条件是物体中心位穿过。
特定方向:第一个方向点指向第二个方向点,为指定方向穿过才报警。
任意方向:将两个方向点都设置到线段的同一侧,或两个方向点设置坐标相同,或两坐标点和线段在同一直线上。
虚拟线段模式下,最多可以设置四条线段,每条线段都是对应有两个方向点,设置方式与上述相同。
-
成员
成员名称 描述 px 第一个线段点 py 第二个线段点 pdx 第一个方向点 pdy 第二个方向点
3.4.7. MI_VgRegion_t¶
-
说明
描述设置区域入侵的结构。
-
定义
typedef struct _VG_Region_t { MI_VG_Point_t p_one; //point one MI_VG_Point_t p_two; //point two MI_VG_Point_t p_three; //point three MI_VG_Point_t p_four; //point four int32_t region_dir; //Region direction; int32_t spec_dir_state; int32_t point_num; MI_VG_Point_t reg_coor[MAX_NUMBER]; //Region coordinate } MI_VgRegion_t; -
成员
成员名称 描述 p_one 描述区域的第一个点 p_two 描述区域的第二个点 p_three 描述区域的第三个点 p_four 描述区域的第四个点 region_dir 设定区域入侵的方向 spec_dir_state 设定区域入侵在region_dir= VG_REGION_CROSS时,是否区分进入和离开 point_num 设置多边形的点数 reg_coor[MAX_NUMBER] 设置多边形各点的坐标,其中MAX_NUMBER的数值为10
3.4.8. MI_VgSet_t¶
-
说明
Vg对应参数设置的结构。
-
定义
typedef struct _MI_VgSet_t { //Common Information float object_size_thd; uint16_t line_number; uint8_t indoor; //Line info MI_VG_Point_t fp[MAX_NUMBER]; //First point MI_VG_Point_t sp[MAX_NUMBER]; //Second point MI_VG_Point_t fdp[MAX_NUMBER]; //First direction point MI_VG_Point_t sdp[MAX_NUMBER]; //Second direction point //Function uint8_t function_state; //Region info MI_VG_Point_t first_p; //First point MI_VG_Point_t second_p; //Second point MI_VG_Point_t third_p; //Third point MI_VG_Point_t fourth_p; //Fourth point //Region direction uint8_t region_direction; //Magic_number int32_t magic_number; int32_t region_spdir_state; } MI_VgSet_t; -
成员
成员名称 描述 object_size_thd 决定滤除物体占感兴趣区域的百分比阀值 line_number 设定虚拟线段的数目,范围:[1-10] indoor 室内或者室外,相机安装的位置,1-室内,0-室外 fp[MAX_NUMBER] 第一个线段点数组 sp[MAX_NUMBER] 第二个线段点数组 fdp[MAX_NUMBER] 第三个线段点数组 sdp[MAX_NUMBER] 第四个线段点数组 function_state 设定虚拟线段、区域入侵侦测模式 first_p 入侵区域第一个点 second_p 入侵区域第二个点 third_p 入侵区域第三个点 fourth_p 入侵区域低四个点 region_direction 表明区域入侵的相关参数 magic_number Magic Number,算法内部debug参数,可不做配置 region_spdir_state 入侵区域的相关规则方向参数
3.4.9. MI_VgResult_t¶
-
说明
Vg检测结果对应的结构。
-
定义
typedef struct _MI_VgResult_t { int32_t alarm[MAX_NUMBER]; int32_t alarm_cnt; MI_VgBoundingBox_t bounding_box[20]; } MI_VgResult_t; -
成员
成员名称 描述 alarm[MAX_NUMBER] Vg的报警结果,MAX_NUMBER代表边数,1:该边触发报警,0:该边未触发报警 alarm_cnt Vg的报警次数,触发报警的边数 bounding_box Vg触发警报的对象信息,每一条边对应触发报警的物体尺寸
3.4.10. MI_VgBoundingBox_t¶
-
说明
Vg检测结果对应的物件大小结构。
-
定义
typedef struct _MI_VgBoundingBox_t { int32_t up; int32_t down; int32_t left; int32_t right; } MI_VgBoundingBox_t; -
成员
成员名称 描述 up 对象的最小 y 坐标信息 down 对象的最大 y 坐标信息 left 对象的最小 x 坐标信息 right 对象的最大 x 坐标信息
3.4.11. MI_VgDetectThd¶
-
说明
Vg建立背景资讯的参数设置的结构。
-
定义
typedef struct _MI_VdDetectThd_t { uint8_t function_switch; uint8_t detect_thd; } MI_VgDetectThd; -
成员
成员名称 描述 function_switch 自定义阀值建立背景的功能状态 (0-关,1-开) detect_thd 自定义阀值,范围:[1-50]
4. 错误码¶
表 4‑1 MI_VDF API Error Codes
| 错误代码 | 宏定义 | 描述 |
|---|---|---|
| 0xA0012001 | MI_ERR_VDF_INVALID_DEVID | 设备 ID 超出合法范围 |
| 0xA0012002 | MI_ERR_VDF_INVALID_CHNID | 通道组号错误或无效区域句柄 |
| 0xA0012003 | MI_ERR_VDF_ILLEGAL_PARAM | 参数超出合法范围 |
| 0xA0012004 | MI_ERR_VDF_EXIST | 重复创建已存在的设备、通道或资源 |
| 0xA0012005 | MI_ERR_VDF_UNEXIST | 试图使用或者销毁不存在的设备、通道或者资源 |
| 0xA0012006 | MI_ERR_VDF_NULL_PTR | 函数参数中有空指针 |
| 0xA0012007 | MI_ERR_VDF_NOT_CONFIG | 模块没有配置 |
| 0xA0012008 | MI_ERR_VDF_NOT_SUPPORT | 不支持的参数或者功能 |
| 0xA0012009 | MI_ERR_VDF_NOT_PERM | 该操作不允许,如试图修改静态配置参数 |
| 0xA001200C | MI_ERR_VDF_NOMEM | 分配内存失败,如系统内存不足 |
| 0xA001200D | MI_ERR_VDF_NOBUF | 分配缓存失败,如申请的数据缓冲区太大 |
| 0xA001200E | MI_ERR_VDF_BUF_EMPTY | 缓冲区中无数据 |
| 0xA001200F | MI_ERR_VDF_BUF_FULL | 缓冲区中数据满 |
| 0xA0012010 | MI_ERR_VDF_NOTREADY | 系统没有初始化或没有加载相应模块 |
| 0xA0012011 | MI_ERR_VDF_BADADDR | 地址非法 |
| 0xA0012012 | MI_ERR_VDF_BUSY | 系统忙 |
| 0xA0012013 | MI_ERR_VDF_CHN_NOT_STARTED | 通道没有开始 |
| 0xA0012014 | MI_ERR_VDF_CHN_NOT_STOPED | 通道没有停止 |
| 0xA0012015 | MI_ERR_VDF_NOT_INIT | 模块没有初始化 |
| 0xA0012016 | MI_ERR_VDF_INITED | 模块已经初始化 |
| 0xA0012017 | MI_ERR_VDF_NOT_ENABLE | 通道或端口没有ENABLE |
| 0xA0012018 | MI_ERR_VDF_NOT_DISABLE | 通道或端口没有DISABLE |
| 0xA0012019 | MI_ERR_VDF_TIMEOUT | 超时 |
| 0xA001201A | MI_ERR_VDF_DEV_NOT_STARTED | 设备没有开始 |
| 0xA001201B | MI_ERR_VDF_DEV_NOT_STOPED | 设备没有停止 |
| 0xA001201C | MI_ERR_VDF_CHN_NO_CONTENT | 通道没有资料 |
| 0xA001201D | MI_ERR_VDF_NOVASAPCE | 映射虚拟地址失败 |
| 0xA001201E | MI_ERR_VDF_NOITEM | 没有record记录 |
| 0xA001201F | MI_ERR_VDF_FAILED | 未明确定义的错误 |
5. PROCFS介绍¶
5.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_vdf/mi_vdf0 -
调试信息分析
记录当前 vdf 的状况以及相关属性、可以动态地获取到这些信息,方便调试和测试。
-
参数说明

Table 1-1:
参数 描述 Common info for mi_vdf ChnNum 该device的最大chn个数 EnChnNum 该device enabled的chn num个数 PassNum 该device pass的总数 InPortNum 该device inport的个数 OutPortNum 该device outport的个数 CollectSize 该device对应的AllocatorCollection含有allocator数目 Common info for mi_vdf only dump enabled chn ChnId Chn id PassNum Pass 总数 EnInPNum 该chn的enabled input port个数 EnOutPNum 该chn的enabled output port个数 MMAHeapName 如果有 SetChnMMAConf 的话,该值为对应的 mma heap name;如果没有设置的话,该值为 NULL current_buf_size 当前申请内存的大小 Peak_buf_size 使用内存的峰值 user_pid 当前进程pid号 
Table 1-2:
参数 描述 Input port bind info (only dump enabled Input port) ChnId 该 input port 所在的 channel 的id PassId 该device的passid PortId 该 device的InputPort 的端口id user_buf_quota 该 InputPort 的 buff 数目的Quota UsrInjectQ_cnt 该 InputPort 里的UsrInjectBufQueue 里的 buff 数目 BindInQ_cnt 该 InputPort 里的BindInputBufQueue 里的 buff 数目 TotalPendingBuf_size 该 InputPort里的cur_working_input_queue 里的buff 的总的 size usrLockedInjectCnt 用户层当前拿到了多少个 buf newPulseQ_cnt 该 InputPort里的new_pulse_fifo_inputqueue 里的buff 数目 nextTodoPulseQ_cnt 该 InputPort里的next_todo_pulse_inputqueue 里的 buff 数目 curWorkingQ_cnt 该 InputPort里的cur_working_input_queue 里的buff 数目 workingTask_cnt 该 InputPort里的input_working_tasklist 里的 buff数目 lazzyRewindTask_cnt 该 InputPort里的lazzy_rewind_inputtask_list 里的buff 数目(需要retry的task个数) Enable 1:使能 0:失能 bind_module_id 与该 input port进行了 binded 的output port 所在的 module 的 id bind_module_name 与该 input port 进行了 binded 的output port 所在的 module 的 name(如这里的mod_name是divp)divp->vdf bind_ChnId 与该 input port进行了 binded 的output port 所在的 channel 的 id bind_PortId 与该 input port进行了 binded 的output port 的 id bind_Type 0x00000001: Frame(frame mode,默认工作方式)
0x00000002: sw_low_latency(低时延工作方式)
0x00000004: realtime mode(硬件直连工作方式)
0x00000008: hw autosync(前后级 handshake,buffer size 与图像分辨率一致)
0x00000010: hw ring(前后级 handshake,ring buffer depth 可以调)bind_Param 绑定参数 enable 使能 SrcFrmrate 源帧率 DstFrmrate 目标帧率 GetFrame/Ms 实际帧率/所用时间 FPS 实际帧率 FinishCnt 处理完成个数 RewindCnt 需要Retry的task 个数 
Table 1-3:
参数 描述 output port bind info(only dump enabled output port) ChnId 该 output port 所在的 channel 的id PassId 该device的passid PortId 该 device的output port 的 id usrDepth User可以拿到的output port buf的最大个数 BufCntQuota 该 OutputPort 的可以申请buffer的最大个数 usrLockedCnt 从 UsrGetFifoBufQueue 里用户实际拿走了多少个 buffer totalOutPortInUsed Output实际申请到的buffer个数 DrvBkRefFifoQ_cnt 该OutputPort 的DrvBkRefFifoQueue里的buffer数目 (For special driver which need to refer back pre-processed buffer) DrvBkRefFifoQ_size 该OutputPort 的DrvBkRefFifoQueue 里所占用的 buffer size UsrGetFifoQ_cnt Dump到OutputPort UsrGetFifoBufQueue 所占用buffer数目 UsrGetFifoQ_size Dump到 OutputPort 的UsrGetFifoBufQueue所占用buffer size UsrGetFifoQ_seqnum OutputPort拿到的buffer总数 UsrGetFifoQ_discardnum 该OutputPort 由于申请新的buf需求而丢弃原来的buffer 累计丢弃数目。 finishedTask_cnt OutputPort完成task的个数 GetFrame/Ms 实际帧率/所用时间 FPS 实际帧率 FinishCnt 已完成个数 RewindCnt Retry task的个数 GetTotalCnt OutputPort拿到buffer的总数 GetOkCnt 统计E_MI_FRC_OBTAIN的帧数 

Table 1-4:
参数 描述 DEV info for VDF VDF Verison 版本信息 bInited Vdf模块是否初始化。(0-否,1-是) MDEnable MD是否使能状态。(0-否,1-是) ODEnable OD是否使能状态。(0-否,1-是) VGEnable VG是否使能状态。(0-否,1-是) CHN common info for VDF (only dump created chn) ChnId Chn id eStatus 0:Destroy 1:created 2:start 3:stop phandle OD/MD/VG init 句柄指针 FrameCnt 帧个数(暂不使用) FrameInv 间隔帧(暂不使用) YImgSize 一张yImage size(height*width)前级送来的size Calc Info for VDF (only dump created chn) ChnId Channel Id CalcGetCnt Vdf成功获取Input Image的次数 CalcGetFailCnt Vdf未能成功获取Input Image的次数 CalcDropCnt Vdf丢弃Input Image的次数 CalcDoneCnt Vdf成功处理完Input Image的次数 Fps Vdf处理Input Image的帧率 AlgoTime MD/OD/VG处理一帧的耗时(ms) Rst info for VDF (only dump created chn ) ChnId Channel Id RstGetCnt 用户获取运算结果成功次数 RstGetFailCnt 用户获取运算结果失败次数 RstDropCnt 丢弃(被新的数据覆盖而丢弃)运算结果的次数 RstPutCnt User使用完成,释放运算结果使用内存的次数 MD Attr info for VDF (only dump created chn) ChnId 通道号 [c_param] 常规参数 Enable 当前通道是否使能 MdBufCnt 设置的Md存放结果的缓冲队列深度 VDFIntvl 暂不使用 RstBufSize 一次返回结果的大小 SubRstObjLen CCL输出结果的大小 SubRstSadLen SAD输出结果的大小 SubRstStsLen 检查结果状态的大小 ccl_InitArea CCL区面积的门槛值 ccl_Step CCL每提高一次门槛值的提升值 [s_param] 静态参数 width MD输入Image宽 height MD输入Image高 stride MD输入Image stride color MD输入Image的类型 mb_size MD宏块大小 0-MB_4x4 1-MB_8x8 2-MB_16x16 sad_out_ctrl MD的SAD输出格式 0-16BIT_SAD 1-8BIT_SAD md_alg_mode CCL联通区域的运算模式 0-FG模式 1-SAD模式 roi_md_num 侦测区域边界点数量 Pnt[i].x 侦测区域每个边界点的x坐标 Pnt[i].y 侦测区域每个边界点的y坐标 [d_param] 动态参数 sensitivity 算法灵敏度,范围[10,20,30,…..100],值越大越灵敏,输入的灵敏 learn_rate 单位毫秒,范围[1000,30000],用于控制前端物体停止运动多久时,才作为背景画面 md_thr 判断移动的门坎值,随不同模式而有不同设定标准 obj_num_max CCL的连通区域数量限制值 OD Attr info for VDF (only dump created chn) ChnId 通道号 [c_param] 常规参数 Enable 当前通道是否使能 OdBufCnt 设置的Od存放结果的缓冲队列深度 VDFIntvl 暂不使用 RstBufSize 一次返回结果的大小 [s_param] 静态参数 inImgW OD输入Image宽 inImgH OD输入Image高 inImgStride OD输入Image stride nClrType OD輸入影像的類型 2-y数据 alpha 控制产生参考图像的学习速率 div OD检测窗口的类型 0-1个窗口 1-4个窗口 2-9个窗口 M 多少张影像更新一次参考图像 MotionSensit 移动敏感度设置 roi_od_num 侦测区域边界点数量 pnt[i].x 侦测区域每个边界点的x坐标 pnt[i].y 侦测区域每个边界点的y坐标 [d_param] 动态参数 thd_tamper 图像差异比例门坎值 tamper_blk_thd 图像被遮挡区域数量门坎值 min_duration 图像差异持续时间门坎值 VG Attr info for VDF (only dump created chn) ChnId 通道号 [c_param] 常规参数 Enable 当前通道是否使能 VgBufCnt 设置的Vg存放结果的缓冲队列深度 VDFIntvl 暂不使用 RstBufSize 一次返回结果的大小 [s_param] 静态参数 width VG输入Image宽 height VG输入Image高 stride VG输入Image stride obj_size_thd 滤除物体占感兴趣区域的百分比大小 indoor 相机架设区域 0-室外 1-室内 func_state 侦测模式 2-VG_VIRTUAL_GATE,表示模式为虚拟线段。 3-VG_REGION_INVASION,表示模式区域入侵。 line_number 虚拟线段的数目,支持1到4条虚拟线段 (侦测模式为VG_VIRTUAL_GATE起效) p[i].x 线段n的x坐标 (侦测模式为VG_VIRTUAL_GATE起效) p[i].y 线段n的y坐标 (侦测模式为VG_VIRTUAL_GATE起效) pd[i].x 线段n的第一个方向点 (侦测模式为VG_VIRTUAL_GATE起效) pd[i].y 线段n的第二个方向点 (侦测模式为VG_VIRTUAL_GATE起效) region_dir 设定区域入侵的方向,目前有进入、离开及穿越三种方向可以选择。 0-REGION_ENTER,进入警报区域触发警报。 1-REGION_LEAVING,离开警报区域触发警报。 2-REGION_CROSS,表示穿越警报区域触发警报。 (侦测模式为VG_REGION_INVASION起效) Pnt[i].x 区域的第i个点的x坐标 (侦测模式为VG_REGION_INVASION起效) Pnt[i].x 区域的第i个点的y坐标 (侦测模式为VG_REGION_INVASION起效) dump buf status Channel[xxx] channel id Input/Output sequenceNum buffer 的唯一标识:序列号ID status buffer 的状态。(ready:vdf成功申请到buf;geted:算法成功拿到buf;drop:异常情况,丢弃处理;done:算法运算成功;del:待释放内存) bufinfo buffer的内存地址 getTime vdf 成功获取到task buffer 所需要的时间(us) processTime vdf 从enqueueTask 到dequeueTask 所需要的时间(us)
5.2. echo¶
# echo help > /proc/mi_modules/mi_vdf/mi_vdf0

Echo help 查看可用命令
Table 2-1:
| 功能 | 使能/失能 en_workmode(od/md/vg) |
|---|---|
| 命令 | echo en_workmode param1 param2 > /proc/mi_modules/mi_vdf/mi_vdf0 |
| 参数说明 | param1: [md/od/vg] param2: [0-1] 0-disable, 1-enable |
| 举例 | echo en_workmode md 0 > /proc/mi_modules/mi_vdf/mi_vdf0 |
Table 2-2:
| 功能 | 开关vdf chn |
|---|---|
| 命令 | echo en_chn param1 param2 > /proc/mi_modules/mi_vdf/mi_vdf0 |
| 参数说明 | param1: [chnId] chnId 0-63 param2: [0-1] 0-disable, 1-enable |
| 举例 | echo en_chn 0 0 > /proc/mi_modules/mi_vdf/mi_vdf0 再次cat /proc/mi_modules/mi_vdf/mi_vdf0 可以看到input/output的ch0已经关闭 |
Table 2-3:
| 功能 | Dump yuv |
|---|---|
| 命令 | echo dump_image [param1, param2, param3] > /proc/mi_modules/mi_vdf/mi_vdf0 |
| 参数说明 | param1: [chnId] chnId 0-15 Param2: [dumpNum] 0-xxxx Param3: [dumpPath] yourPath |
| 举例 | echo dump_image 0 10 /mnt > /proc/mi_modules/mi_vdf/mi_vdf0 |
例如dump chn0 10张YUV到/mnt 目录:
