yanjinbin

yanjinbin

0个粉丝

9

问答

0

专栏

0

资料

yanjinbin  发布于  2017-09-04 10:16:44
采纳率 0%
9个问答
3337

海思遮挡报警怎么做

 
本帖最后由 yanjinbin 于 2017-9-4 10:18 编辑

我使用的是HI3521A芯片.
我的需求是:摄像头被人为遮挡就报警,测试时可用人手挡住摄像头。

有人推荐我使用视频侦测分析(vda)接口来完成这个功能,但是我使用这个接口来测试发现了两个问题。
第一:镜头被人手挡住会报警,但是松开手时也会产生同样的报警.
       那我只需要人挡住那个报警,人松开那个报警不需要应该怎么办。

第二:不挡住镜头,在白天挡住红外检测头,让红外起作用,发现也会产生报警.
        事实这个时候镜头没被挡住,只是彩色转成黑白镜头了,这个应该怎么处理。


测试样例:VI直接绑定VDA,例题如下:
//启动VDA
HI_S32 VDA_OdStart(VDA_CHN VdaChn, HI_U32 u32Chn, SIZE_S *pstSize)
{
    VDA_CHN_ATTR_S stVdaChnAttr;
    MPP_CHN_S stSrcChn, stDestChn;
    HI_S32 s32Ret = HI_SUCCESS;
   
    if (VDA_MAX_WIDTH < pstSize->u32Width || VDA_MAX_HEIGHT < pstSize->u32Height)
    {
        printf("Picture size invaild!\n");
        return HI_FAILURE;
    }
   
    /********************************************
     步骤 1 : 创建vda通道
    ********************************************/
    stVdaChnAttr.enWorkMode = VDA_WORK_MODE_OD;
    stVdaChnAttr.u32Width   = pstSize->u32Width;
    stVdaChnAttr.u32Height  = pstSize->u32Height;

    stVdaChnAttr.unAttr.stOdAttr.enVdaAlg      = VDA_ALG_REF;//VDA_ALG_REF,VDA_ALG_BG
    stVdaChnAttr.unAttr.stOdAttr.enMbSize      = VDA_MB_8PIXEL;
    stVdaChnAttr.unAttr.stOdAttr.enMbSadBits   = VDA_MB_SAD_8BIT;
    stVdaChnAttr.unAttr.stOdAttr.enRefMode     = VDA_REF_MODE_DYNAMIC;
    stVdaChnAttr.unAttr.stOdAttr.u32VdaIntvl   = 4;
    stVdaChnAttr.unAttr.stOdAttr.u32BgUpSrcWgt = 128;
   
    stVdaChnAttr.unAttr.stOdAttr.u32RgnNum = 1;
   
    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].stRect.s32X = 0;
    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].stRect.s32Y = 0;
    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].stRect.u32Width  = pstSize->u32Width;
    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].stRect.u32Height = pstSize->u32Height;

    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].u32SadTh      = 100;//100;
    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].u32AreaTh     = 95;//60;95
    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].u32OccCntTh   = 10;//6;20;10
    stVdaChnAttr.unAttr.stOdAttr.astOdRgnAttr[0].u32UnOccCntTh = 2;
   
    s32Ret = HI_MPI_VDA_CreateChn(VdaChn, &stVdaChnAttr);
    if(s32Ret != HI_SUCCESS)
    {
        printf("err!\n");
        return(s32Ret);
    }

    /********************************************
     步骤 2 : 绑定vi通道到vda 通道
    ********************************************/
    stSrcChn.enModId = HI_ID_VIU;
    stSrcChn.s32DevId = 0;
    stSrcChn.s32ChnId = 0;    //测试强制为视频通道0

    stDestChn.enModId  = HI_ID_VDA;
    stDestChn.s32ChnId = VdaChn;
    stDestChn.s32DevId = 0;

    s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);
    if(s32Ret != HI_SUCCESS)
    {
        printf("err!\n");
        return s32Ret;
    }

    /* vda启动图像接受 */
    s32Ret = HI_MPI_VDA_StartRecvPic(VdaChn);
    if(s32Ret != HI_SUCCESS)
    {
        printf("err!\n");
        return(s32Ret);
    }

    /* 启动运行线程 */
    gs_stOdParam.bThreadStart = HI_TRUE;
    gs_stOdParam.VdaChn   = VdaChn;
    pthread_create(&gs_VdaPid, 0, Thread_VDA_OdGetResult, (HI_VOID *)&gs_stOdParam);
   
    return HI_SUCCESS;
}


//监测线程:实时监测vda结果
HI_VOID *Thread_VDA_OdGetResult(HI_VOID *pdata)
{
    HI_S32 i;
    HI_S32 s32Ret;
    VDA_CHN VdaChn;
    VDA_DATA_S stVdaData;
    HI_U32 u32RgnNum;
    VDA_OD_PARAM_S *pgs_stOdParam;
    static HI_U8 stat = 0;
   
    pgs_stOdParam = (VDA_OD_PARAM_S *)pdata;
    VdaChn    = pgs_stOdParam->VdaChn;
   
    while(HI_TRUE == pgs_stOdParam->bThreadStart)
    {
        s32Ret = HI_MPI_VDA_GetData(VdaChn,&stVdaData,-1);  //获取视频侦测分析结果
        if(s32Ret != HI_SUCCESS)
        {
            printf("HI_MPI_VDA_GetData failed with %#x!\n", s32Ret);
            return NULL;
        }
        //打印结果
        for(i=0; i         {
            printf("OD region[%d]: %d\n", i, stVdaData.unData.stOdData.abRgnAlarm);
        }
   
        u32RgnNum = stVdaData.unData.stOdData.u32RgnNum;
               
        for(i=0; i         {
            if(HI_TRUE == stVdaData.unData.stOdData.abRgnAlarm)
            {
                //printf("################VdaChn--%d,Rgn--%d,Occ!\n",VdaChn,i);
                s32Ret = HI_MPI_VDA_ResetOdRegion(VdaChn,i);   //重新进行遮挡侦测
                if(s32Ret != HI_SUCCESS)
                {
                    printf("HI_MPI_VDA_ResetOdRegion failed with %#x!\n", s32Ret);
                    return NULL;
                }
            }
        }

        s32Ret = HI_MPI_VDA_ReleaseData(VdaChn,&stVdaData);   //释放视频侦测分析结果。
        if(s32Ret != HI_SUCCESS)
        {
            printf("HI_MPI_VDA_ReleaseData failed with %#x!\n", s32Ret);
            return NULL;
        }

        usleep(500*1000);
    }
    return HI_NULL;
}
我来回答
回答6个
时间排序
认可量排序

yanjinbin

0个粉丝

9

问答

0

专栏

0

资料

yanjinbin 2017-09-04 17:52:49
认可0
有人研究过遮挡报警的问题吗,请指教下。谢谢。

yanjinbin

0个粉丝

9

问答

0

专栏

0

资料

yanjinbin 2017-09-05 11:24:46
认可0
有人做过这个功能吗?

yanjinbin

0个粉丝

9

问答

0

专栏

0

资料

yanjinbin 2017-09-06 10:21:05
认可0
好悲剧啊,研究了下设置不同阈值它还是报警。

flyarcher

0个粉丝

0

问答

0

专栏

0

资料

flyarcher 2017-09-08 13:55:55
认可0
没用过VDA,LZ可以测一下手遮住之后VDA是否一直报警?如果是的话,建议对报警结果处理一下,比如连续几秒钟报警才算真正被遮挡

chaochao

0个粉丝

6

问答

0

专栏

0

资料

chaochao 2019-06-26 15:56:12
认可0
做完了吗?、                                               ,

yanjinbin

0个粉丝

9

问答

0

专栏

0

资料

yanjinbin 2017-09-07 10:50:49
认可0
好难啊。......
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区