有一个人员在岗算法,该算法对一帧图像进行检测,当检测到图像无人时,会调用报警回调函数(只在无人的时候才会调用报警回调)。
现在要实现人员不在岗5min后报警一次,而不是每一帧没人都报警。
该人员在岗算法函数为另一个人封装,不能得到一帧图像是否有人的bool返回值,只能在报警回调函数里实现逻辑处理。
在这里假设每一帧处理间隔时间为0.1s,默认的一个值,刚开始想到了统计无人帧在5min内的数目,大于某值就报警,后面仔细思考了下,发现没有必要,而且逻辑比较复杂。
最终实现了如下方法:
//设t为上一无人帧的时间,t0为进行5min报警统计的开始时间,cur为当前无人帧的时间
//在这里,初始值t,t0默认为系统启动时间。 if((cur-t)>0.1s) // 即两个无人帧之间有人 { t0=cur; //更新进行报警统计的开始时间 } t=cur; //更新上一无人帧的时间 if((cur-t0)>5mins) //即5mins内没有大于0.1s的两帧,默认中间无人 { // 报警内容;
t0=cur; //更新进行报警统计的开始时间 }