跳转至

MI VDF API


REVISION HISTORY

Revision No.
Description
Date
2.03
  • Initial release
  • 11/12/2018
    2.04
  • Document refinement
  • 04/12//2019
    2.05
  • Add Work Flow
  • Fix MD param info
  • 10/12/2020
    2.06
  • Fix VG param info.
  • Add description of new structure.
  • 11/02/2020
    2.07
  • Add Flowchart Title
  • Add MI_MD_ResultSize_t struct
  • Fix variables and funcs hyperlinks
  • Add MI_OD_Result_t struct member
  • Add proc debug info
  • 11/10/2021
    2.08
  • Change 16RstBufSize to u32RstBufSize
  • 03/28/2022
    2.09
  • Add 64bit physical address of MD/OD
  • 04/12/2022
    2.10
  • Add polygon region detection for VG
  • 12/06/2023
    2.11
  • Modify vdf debug information
  • 03/10/2025
    2.12
  • Modify document layout
  • Add the introduction of Function, Application Scenario, Chip Difference and Development
  • 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 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 编译配置

    1. 进入alkaid project根目录,make menuconfig

    2. 回车键进入Generic Options子选项

    3. 回车键进入Interface Compile Config子选项

    4. 空格键选中VDF模块,并重新编译整个Image

    1.7.2 接口调用

    VDF模块的接口调用顺序如下:

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

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

    1.8 实例介绍

    1.8.1 vdf相关代码

    此处使用MD为例进行说明,VG、,接口调用顺序可以参考上述1.7.2接口调用中的图1-1流程对vdf进行设置即可。下列给出多通道的示例流程。开启了2个VDF通道,其中通道0设置为MD模式,通道1设置为OD模式。 本实例使用移动侦测进行说明。可以按照如下步骤进行。

    1. 设置MD的静态/动态参数--->创建通道--->使能通道

    2. user层获取运算结果--->归还结果buffer

    3. 注销通道

    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_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各区域是否检测到运动,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 目录: