MI VDF API

1. 概 述

1.1. 模块说明

VDF实现MD,OD,VG视频通道的初始化,通道管理,视频检测结果的管理和通道销毁等功能。

1.2. 流程框图

图1-1:一路VDF通道的函数调用流程

上图是开启一路VDF的调用流程,但是VDF可以支持多路通道,每个通道都可以设置MD/OD/VG其中一种工作模式。

每一路VDF通道,都要独立调用MI_VDF_CreateChnMI_VDF_SetChnAttrMI_VDF_EnableSubWindowMI_VDF_GetResultMI_VDF_PutResultMI_VDF_DestroyChn等API做通道控制,通道属性,销毁等动作。

如下图所示,开启了4个VDF通道,其中通道0和通道1设置为MD模式,通道2和通道3设置为OD模式。

图1-2:4路VDF通道的函数调用流程

1.3. 关键字说明

  • MD:移动侦测

  • OD:遮挡侦测

  • VG:虚拟围栏


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_Uninit


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。

  • 相关主题

    MI_VDF_DestroyChn


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

  • 注意


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各区域是否检测到运动
    pstMdResultSad 描述MD的Sad值
    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_U16 u16RstBufSize;
        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],以帧为单位 动态属性
    u16RstBufSize 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_U16 u16RstBufSize;  
        MI_OD_static_param_t stOdStaticParamsIn;    
        MI_OD_param_t stOdDynamicParamsIn;
    }MI_VDF_OdAttr_t;
    
  • 成员

    成员名称 描述
    u8Enable 表明该通道是否使能
    u8OdBufCnt OD结果缓存个数取值范围:[1, 16] 静态属性
    u8VDFIntvl 侦测间隔取值范围:[0, 29],以帧为单位 动态属性
    u16RstBufSize 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_U16 u16RstBufSize;
    
        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],以帧为单位 动态属性
    u16RstBufSize 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运行的参数结构
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_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模式

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运行的参数结构。

  • 定义

    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坐标结构。

  • 定义

    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.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_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输入图像的类型
    mb_size 宏块的大小枚举值
    sad_out_ctrl SAD输出格式的枚举值
    roi_md MD侦测区域结构
    md_alg_mode CCL连通区域的运算模式枚举值

3.2.14. 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
    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()函数,则无作用。

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_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_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,不建议更动。

    • 设置范围 MotionSensitivity: 0~5,设5表示对轻微的晃动都很敏感,容易发报;设0表示对轻微晃动的宽容性比较好,不会发报,这边指的轻微晃动是风吹摇曳之类的,建议初始可设5。

    • M建议设置120,不建议更动。

3.3.8. 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;
    } MI_VgRegion_t;
    
  • 成员

    成员名称 描述
    p_one 描述区域的第一个点
    p_two 描述区域的第二个点
    p_three 描述区域的第三个点
    p_four 描述区域的第四个点
    region_dir 设定区域入侵的方向
    spec_dir_state 设定区域入侵在region_dir= VG_REGION_CROSS时,是否区分进入和离开

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[4];   //First point
        MI_VG_Point_t sp[4];   //Second point
        MI_VG_Point_t fdp[4];  //First direction point
        MI_VG_Point_t sdp[4];  //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-4]
    indoor 室内或者室外,1-室内,0-室外
    fp[4] 第一个线段点数组
    sp[4] 第二个线段点数组
    fdp[4] 第三个线段点数组
    sdp[4] 第四个线段点数组
    function_state 设定虚拟线段、区域入侵侦测模式
    first_p 入侵区域第一个点
    second_p 入侵区域第二个点
    third_p 入侵区域第三个点
    fourth_p 入侵区域低四个点
    region_direction 表明区域入侵的相关参数
    magic_number Magic Number
    region_spdir_state 入侵区域的相关规则方向参数

3.4.9. MI_VgResult_t

  • 说明

    Vg检测结果对应的结构。

  • 定义

    typedef struct _MI_VgResult_t
    {
        int32_t alarm[4];
        int32_t alarm_cnt;
        MI_VgBoundingBox_t bounding_box[20];
    } MI_VgResult_t;
    
  • 成员

    成员名称 描述
    alarm[4] Vg的报警结果
    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 INTRODUCTION

5.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_shadow/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-是)
    YuvTaskExit 获取yuv数据的线程是否退出状态。(0-否,1-是)
    MDTaskExit MD运算线程是否退出状态。(0-否,1-是)
    ODTaskExit OD运算线程是否退出状态。(0-否,1-是)
    VGTaskExit VG运算线程是否退出状态。(0-否,1-是)
    DbgLevel Vdf模块的debug等级。 参数说明: 0-disable 1-error 2-warn 3-info 4-debug 5-trace
    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
    ImageQCnt 当前队列里有几张未处理的yImage个数
    Input Port info for VDF (only dump created chn) InGetCnt Input端得到的yImage次数
    InGetFailCnt Input端得到的yImage失败次数
    InDropCnt Intput端丢弃的yImage次数
    InDoneCnt Intput端处理完成的yImage数据次数
    InFps Intput 端获取yImage的帧率
    Output Port info for VDF (only dump created chn ) OutGetCnt Output 端拿到用来存放运算结果的内存次数
    OutGetFailCnt Output 端拿到用来存放运算结果的内存失败的次数
    OutDropCnt Output 端丢弃的不处理内存次数
    OutDoneCnt Output 端写入运算结果到内存成功次数
    RstGetCnt 用户获取运算结果成功次数
    RstGetFailCnt 用户获取运算结果失败次数
    RstDropCnt 丢弃(被新的数据覆盖而丢弃)运算结果的次数
    RstPutCnt User使用完成,释放运算结果使用内存的次数
    OutFps output运算结果的统计帧率
    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起效)

5.2. echo

# echo help > /proc/mi_modules/mi_shadow/mi_vdf0

Echo help 查看可用命令

Table 2-1:

功能
修改打印等级
命令 echo log_level param1 > /proc/mi_modules/mi_shadow/mi_vdf0
参数说明 param1的值是0~6
举例 echo log_level 5 > mi_vdf0

Table 2-2:

功能
设置 sem_check
命令 echo sem_check param1 > /proc/mi_modules/mi_shadow/mi_vdf0
参数说明 param1的值是0~1。0:disable,1:enable
举例 echo sem_check 1 > /proc/mi_modules/mi_shadow/mi_vdf0

Table 2-3:

功能
使能/失能 en_workmode(od/md/vg)
命令 echo en_workmode param1 param2 > /proc/mi_modules/mi_shadow/mi_vdf0
参数说明 param1: [md/od/vg]
param2: [0-1] 0-disable, 1-enable
举例 echo en_workmode md 0 > /proc/mi_modules/mi_shadow/mi_vdf0

Table 2-4:

功能
开关vdf chn
命令 echo en_workmode param1 param2 > /proc/mi_modules/mi_shadow/mi_vdf0
参数说明 param1: [chnId] chnId 0-63
param2: [0-1] 0-disable, 1-enable
举例 echo en_chn 0 0 > /proc/mi_modules/mi_shadow/mi_vdf0
再次cat /proc/mi_modules/mi_shadow/mi_vdf0 可以看到input/output的ch0已经关闭

Table 2-5:

功能
Enable auto_check
命令 echo auto_check param1 > /proc/mi_modules/mi_shadow/mi_vdf0
参数说明 param1: [0-1] 0-disable, 1-enable
举例 echo auto_check 1 > /proc/mi_modules/mi_shadow/mi_vdf0

默认关闭,打开后,cat /proc/mi_modules/mi_shadow/mi_vdf0 会多出一些打印帮你检查比如YImageSize,chn等等。

Table 2-6:

功能
是否dump vdf所有信息
命令 echo dump_all param1 > /proc/mi_modules/mi_shadow/mi_vdf0
参数说明 param1: [0-1] 0-disable, 1-enable
举例 echo dump_all 1 > /proc/mi_modules/mi_shadow/mi_vdf0

包含Table 2-5功能。

Table 2-7:

功能
Dump yuv
命令 echo dump_image [param1, param2, param3] > /proc/mi_modules/mi_shadow/mi_vdf0
参数说明 param1: [chnId] chnId 0-15
Param2: [dumpNum] 0-xxxx
Param3: [dumpPath] yourPath
举例 echo dump_image 0 10 /mnt > /proc/mi_modules/mi_shadow/mi_vdf0

例如dump chn0 10张YUV到/mnt 目录: