一.原理:

   IVS(Intelligent Video Surveillance)是海思媒体处理芯片解决方案中比 IVE(Intelligent
Video Engine,智能加速引擎)更高层次的智能视频监控应用 API。用户基于 IVS 可以
快速开发出相关智能应用。当前 IVS 支持的智能应用有:MD(Motion Detection,移
动侦测)。
移动侦测通过检测视频的亮度变化,侦测视频的运动状态,得出视频侦测分析结果。
二.代码实现过程
1.初始化

static HI_S32 SAMPLE_IVE_Md_Init(SAMPLE_IVE_MD_S *pstMd,HI_U32 u32Width,HI_U32 u32Height)
{
    HI_S32 s32Ret = HI_SUCCESS;
    HI_S32 i;
    HI_U32 u32Size;
    HI_U8 u8WndSz;

for (i = 0;i < SAMPLE_IVE_MD_IMAGE_NUM;i++)
    {
        s32Ret = SAMPLE_COMM_IVE_CreateImage(&pstMd->astImg[i],IVE_IMAGE_TYPE_U8C1,u32Width,u32Height);
        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, MD_INIT_FAIL,"Error(%#x),Create img[%d] image failed!\n", s32Ret,i);
    }
    
    u32Size = sizeof(IVE_CCBLOB_S);
    s32Ret = SAMPLE_COMM_IVE_CreateMemInfo(&pstMd->stBlob,u32Size);
    SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, MD_INIT_FAIL,"Error(%#x),Create blob mem info failed!\n", s32Ret);

//Set attr info
    pstMd->stMdAttr.enAlgMode                   = MD_ALG_MODE_BG;
    pstMd->stMdAttr.enSadMode                   = IVE_SAD_MODE_MB_4X4;
    pstMd->stMdAttr.enSadOutCtrl                = IVE_SAD_OUT_CTRL_THRESH;
    pstMd->stMdAttr.u16SadThr                   = 100 * (1 << 1);//100 * (1 << 2);
    pstMd->stMdAttr.u32Width                    = u32Width;
    pstMd->stMdAttr.u32Height                   = u32Height;
    pstMd->stMdAttr.stAddCtrl.u0q16X            = 32768;
    pstMd->stMdAttr.stAddCtrl.u0q16Y            = 32768;
    pstMd->stMdAttr.stCclCtrl.enMode            = IVE_CCL_MODE_4C;
    u8WndSz                                     = (1 << (2 + pstMd->stMdAttr.enSadMode));
    pstMd->stMdAttr.stCclCtrl.u16InitAreaThr    = u8WndSz * u8WndSz;
    pstMd->stMdAttr.stCclCtrl.u16Step           = u8WndSz;

s32Ret = HI_IVS_MD_Init();
    SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, MD_INIT_FAIL, "Error(%#x),HI_IVS_MD_Init failed!\n", s32Ret);

MD_INIT_FAIL:

if(HI_SUCCESS != s32Ret)
    {
        SAMPLE_IVE_Md_Uninit(pstMd);
    }
    return s32Ret;

2.处理过程

s32Ret = HI_IVS_MD_CreateChn(MdChn,&(pstMd->stMdAttr));    
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_IVS_MD_CreateChn fail,Error(%#x)\n",s32Ret);
        return ;
    }
        
    while (group.running)
    {    
      if(s_bStopSignal == FALSE)
      {
            s32Ret = HI_MPI_VPSS_GetChnFrame(s32VpssGrp, as32VpssChn, &stBaseFrmInfo, s32MilliSec);            
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("HI_MPI_VPSS_GetChnFrame fail,Error(%#x)\n",s32Ret);
                continue;
            }
            
            if (HI_TRUE != bFirstFrm)
            {        
                s32Ret = SAMPLE_COMM_IVE_DmaImage(&stBaseFrmInfo, &pstMd->astImg[s32CurIdx], bInstant);
                SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,EXT_RELEASE,"SAMPLE_COMM_DmaImage fail,Error(%#x)\n",s32Ret);            
            }
            else
            {        
                s32Ret = SAMPLE_COMM_IVE_DmaImage(&stBaseFrmInfo, &pstMd->astImg[1 - s32CurIdx], bInstant);            
                SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, EXT_RELEASE,"SAMPLE_COMM_DmaImage fail,Error(%#x)\n",s32Ret);    
            
                bFirstFrm = HI_FALSE;            
                goto CHANGE_IDX;//first frame just init reference frame

}
        
            s32Ret = HI_IVS_MD_Process(MdChn,&pstMd->astImg[s32CurIdx],&pstMd->astImg[1 - s32CurIdx],NULL,&pstMd->stBlob);        
            SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, EXT_RELEASE,"HI_IVS_MD_Process fail,Error(%#x)\n",s32Ret);           
         
            SAMPLE_COMM_IVE_BlobToRect(SAMPLE_COMM_IVE_CONVERT_64BIT_ADDR(IVE_CCBLOB_S,pstMd->stBlob.u64VirAddr),&(pstMd->stRegion),IVE_RECT_NUM,8,
            pstMdAttr->u32Width,pstMdAttr->u32Height,stBaseFrmInfo.stVFrame.u32Width,stBaseFrmInfo.stVFrame.u32Height);

pstBlob = SAMPLE_COMM_IVE_CONVERT_64BIT_ADDR(IVE_CCBLOB_S,pstMd->stBlob.u64VirAddr);

//printf("u8RegionNum:%d\n",pstBlob->u8RegionNum);
            if(pstBlob->u8RegionNum > 0)
            {
                xTotal = 0;
                st_osddrv_rect_clear(osdHandle);
                
                   for(i = 0;i < pstBlob->u8RegionNum;i++)
                {            
                    printf("(%d,%d)\n",    pstMd->stRegion.astRect[i].astPoint[0].s32X,
                                    pstMd->stRegion.astRect[i].astPoint[0].s32Y);    
                    printf("(%d,%d)\n",    pstMd->stRegion.astRect[i].astPoint[1].s32X,
                                    pstMd->stRegion.astRect[i].astPoint[1].s32Y);
                    printf("(%d,%d)\n",    pstMd->stRegion.astRect[i].astPoint[2].s32X,
                                    pstMd->stRegion.astRect[i].astPoint[2].s32Y);
                    printf("(%d,%d)\n",    pstMd->stRegion.astRect[i].astPoint[3].s32X,
                                    pstMd->stRegion.astRect[i].astPoint[3].s32Y);
                    printf("\n");

st_osddrv_rect_draw(osdHandle,0,pstMd->stRegion.astRect[i].astPoint[0].s32X*3 , 
                                                    pstMd->stRegion.astRect[i].astPoint[0].s32Y*3 , 
                                                    pstMd->stRegion.astRect[i].astPoint[2].s32X*3 , 
                                                    pstMd->stRegion.astRect[i].astPoint[2].s32Y*3);

xTotal += pstMd->stRegion.astRect[i].astPoint[0].s32X + pstMd->stRegion.astRect[i].astPoint[2].s32X;

}

st_osddrv_rect_flush(osdHandle);    
            }
            
CHANGE_IDX:
            //Change reference and current frame index
            s32CurIdx =    1 - s32CurIdx;
        
EXT_RELEASE:
            s32Ret = HI_MPI_VPSS_ReleaseChnFrame(s32VpssGrp, as32VpssChn, &stBaseFrmInfo);

3.结果演示

海思16DV300 移动侦测相关推荐

  1. 海思16DV300系统搭建过程

    uboot : 编译: make ARCH=arm CROSS_COMPILE=arm-himix200-linux- hi3516dv300_config make ARCH=arm CROSS_C ...

  2. 海思Hi3518E+AR0130之移动侦测篇(一)

    本篇着重记录项目中有关移动侦测的开发记录,初次接触海思Hi3518和摄像头AR0130,作为一个小白,开始慢慢摸索. 海思对Hi3518等系列芯片都有海思自家的MPP(Media Process Pl ...

  3. 开发板_Hi3516DV300核心板/开发板;Hi3516EV100+4G+AUDIO RTMP开发板;海思系列开发板/核心板定制开发...

    1.海思Hi3516DV300核心板/开发板 一,芯片参数 1. 处理器内核 *双核ARM Cortex-A7@ 900MHz,32KB I-Cache,32KB D-Cache,256KB L2 C ...

  4. 高清 网络摄像机 华为海思3510芯片

    给大家介绍一款,采用海思3510芯片 的网络摄像机 IP camera. 海思半导体有限公司成立于2004年10月,前身是创建于1991年的华为集成电路设计中心.海思公司总部位于深圳,在北京.上海.美 ...

  5. TI 海思 安霸 智利普 等顶级摄像机芯片简要介绍

    很多年以前业界就谈到安防视频监控领域的三个趋势:数字化.网络化.智能化.目前国内市场上安防视频监控系统的主流产品已经从十多年前的纯模拟视频监控系统,逐步转变成了纯数字的百万高清视频监控系统,即从视频采 ...

  6. 海思3559A sample的整体架构

    sample的整体架构 1.sample的整体架构: sample中有很多个例程,所以有很多个main函数,common是通用性的主题函数,我们分析的是sample_venc 2.基本的架构是:ven ...

  7. 海思芯片-Hi3512参数规格介绍

    今日,给大家分享的是海思芯片平台的Hi3512处理器,本文主要介绍Hi3512的芯片参数,内容非常详细,有不足之处,可在喜爱方留言,若需要相关技术资料,可到一牛网论坛. Hi3512芯片参数: CPU ...

  8. 海思hi3531处理器参数,hi3531芯片详细信息简介

    Hi3531是海思半导体针对多路D1和多路高清DVR.NVR产品应用开发的一款专业高端SOC芯片.高度集成和丰富的外围接口,在满足客户差异化产品功能.性能.图像质量要求的同时,可大大降低ebom成本. ...

  9. 海思3559开发常识储备:相关名词全解

    前言   接连啃了两个sample,还是觉得笼笼统统模模糊糊,没有达到想要的一目了然的程度,那就再整理整理资料,补些硬货吧 图像和像素格式 颜色: (1)颜色是主观还是客观存在?    颜色的本质是光 ...

  10. 海思芯片资料,Hi3518A处理器参数说明

    Hi3518A作为新一代HD IP摄像机SOC,集成新一代ISP,优化后的编码前图像处理算法和新一代H.264编码器,同时采用先进低功耗工艺和内部的低功耗架构设计,这一切将使得Hi3518A在低码率, ...

最新文章

  1. 解析Makefile文件的构建规则
  2. delphi xls 线程_锐龙9 5950X怒超近6GHz!关键是16核心32线程全开-锐龙,锐龙9 5950X,超频 ——快科技(驱动之家旗下媒体)-...
  3. OC中的字符串常用方法
  4. linux修改文件句柄数生效_linux系统层面调优和常见的面试题
  5. 华为与奔驰展开合作 HMS for Car登陆S级轿车
  6. php无框架开发web项目,web.framework
  7. java导出到txt_Java生成TXT文本并下载
  8. 【log4】c++日志工具之——log4cpp
  9. 【HTML/CSS/计算机网络】75道高频面试题【看这一篇就够啦!】
  10. 索博士面膜app开发
  11. 变分法与最速降线问题
  12. 如何在Python中四舍五入数字
  13. [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
  14. 一代互联网人,知了天命后
  15. 科大星云诗社动态20210130
  16. 第101章 SQL函数 NVL
  17. Python中怎么解决GIL锁与深浅拷贝问题【详细】
  18. 【强化学习】《动手学强化学习》马尔可夫决策过程
  19. linux限速软件,一步步教你用linux做路由器限速
  20. C语言+windows API仿写类酷狗播放器(1)

热门文章

  1. 全网最详细教程(上):教你如何从0-1制作出一张可视化大屏
  2. CRC循环冗余校验码的C语言实现
  3. 详谈软件工程之软件测试与维护
  4. 交换机三种端口模式Access、Hybrid和Trunk
  5. 网络安全学习笔记-入侵检测系统IDS
  6. oracle查询备份存储路径,Oracle 数据库备份与恢复(RMAN介绍一)
  7. docker bi工具superset汉化
  8. 利用Github服务器做一个软件自动升级系统
  9. LayoutInflater原理分析
  10. 华为手机连电脑当摄像头用_怎么用华为手机当电脑摄像头