3543
- 收藏
- 点赞
- 分享
- 举报
海思遮挡报警怎么做
本帖最后由 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;
}
我使用的是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个
时间排序
认可量排序
认可0
认可0
认可0
认可0
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
22014-06-12 09:30:32
-
2014-11-10 17:10:50
-
2018-12-22 10:09:12
-
2015-05-28 17:41:59
-
2018-11-16 10:49:36
-
2019-01-24 09:28:39
-
2017-12-04 12:03:08
-
2015-09-07 17:45:28
-
2018-07-20 17:24:12
-
2017-08-16 19:15:36
-
2019-03-27 14:26:02
-
2020-10-14 19:35:43
-
2017-08-17 13:35:43
-
2018-08-24 09:59:18
-
2015-07-22 09:38:59
-
2021-01-06 14:55:42
-
2018-12-20 14:14:21
-
2020-10-27 14:27:38
-
2021-01-14 17:44:43
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
20帮忙交叉编译个源码
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认