一种视频监控新算法研究

2015-04-02 12:15朱金加楚栓成
软件导刊 2015年2期

朱金加 楚栓成

摘要:针对当前视频监控系统普遍存在的视频数据时间冗余多、系统资源利用率低等缺点,提出一种合理控制视频采集和录制的新算法。该算法以图像帧间相关度分析为基础,能及时准确地捕获监控区域的细节变化,并有效节约监控系统的硬盘资源。经过软件调试和指定平台上的多次测试,证实该算法是一种性能稳定、行之有效的控制算法,整个监控系统的资源利用率也有所提高。

关键词关键词:视频数据时间冗余;帧相关度;视频采集;资源利用率

DOIDOI:10.11907/rjdk.143836

中图分类号:TP311.5

文献标识码:A文章编号文章编号:16727800(2015)002007103

基金项目基金项目:国家自然科学基金项目(61162005)

作者简介作者简介:朱金加(1983-),男,湖北随州人,北方民族大学电信学院硕士研究生,研究方向为信号检测与信息处理;楚栓成(1963-),男,河南荥阳人,北方民族大学电信学院副教授、高级工程师,研究方向为电子与无线通信技术。

0引言

视频监控系统现已广泛应用于收费站、大型超市、仓库等地,监控管理员可通过观看各监控点的视频发现安全隐患。这类监控系统虽十分便利,但也存在如下问题:系统连续采集、录制,硬盘连续不断地被写入实时采集的视频数据,而在浏览监控录像时,如果监控画面长时间“无异常出现”,则必须多次快进直到出现新画面。在此过程中,存储设备损耗很大。而且,监控系统硬盘属于高消耗设备,应提高利用率。

事实上,大多数时候监控区域是安全状态,采集系统和录像系统这一阶段处理的是无应用价值的数据。有价值的信息往往是监控区域内“有异常”的细节变化。因此,笔者摸索出一种能减少资源损耗的控制算法,以期提高系统的资源利用率和实用性。

1算法设计

1.1算法功能概述

算法的目标是避免无效视频信息的录入,减少设备损耗,提高系统整体效率。算法设计的重难点是:根据经验数据提取控制参数,对监控系统的视频采集、录制进行合理控制。

一般而言,监控系统有固定的观察区,有人闯入或发生危险时,必然可以看到监控画面某部分出现连续变化,此变化速度通常低于采集设备的捕获速度。例如陌生人进入房间拿东西然后走开,正常情况下这一过程总能被及时捕获,也即人在观看监控画面或事后观看录像时总能从画面上发现有“异常”的信息,因此监控系统的视频数据必然存在时间冗余。

根据这一经验,将一段时间间隔内图像帧间变化较小甚至“长期静止”的部分视为冗余数据(称为“时间冗余引起的视觉冗余\[1\]”),将变化稍大的各连续帧保留下来,再按时序写入硬盘,最终得到的录像则是经“去时间冗余”处理的帧序列。硬盘空间将因此得到高效利用,驱动模块和传输模块的资源损耗也将降低。

上述方法有两个要点:一是录像结果不影响正常观看,二是要根据环境灵活设置和调整算法中的若干阈值。

1.2算法原理设计

(1)一般状态。系统开机(设为0时刻)即开始采集现场图像信息,系统将其处理成数字化的图像信号,此图像信号放入缓存(f_0),同时写入硬盘(m_0)作为稍后的参考数据。在一段时间后(假设为t时刻),将最近一次采集到的帧(即缓存中栈顶数据f_t)与最初(0时刻)采集的帧(m_0)做相关度运算,即使用矩阵相关性取得图像帧的差异\[3\],再取其标量数值e_0。

若e_0低于阈值(设定w),则认为监控画面无变化,仅需保留硬盘初始写入的图像数据(m_0)作为这一段时间内的“录像”,也即录像暂停;否则,系统连续向硬盘写入图像数据(从m_0到m_t)。显然,“录像”时间短于真实监控时间。由于t时间短,算法的时间复杂度低,故整个过程中时间延迟很小,不会影响系统的实时性。

(2)省电状态,即“休息”状态。如果在相当长的时间内(设为d,d=10×t)监控区域没有“异常”,将暂停采集(暂停时长取5×t)。在此过程中,采集和录像进程完全被挂起。“休息”结束后,监控系统的采集和录像进程进入就绪态,经过t间隔后,将缓存中的最新图像帧与硬盘最近一次写入的帧做比较。若比较结果超出阈值,采集和录像同时进入运行态,即“一般状态”。直到再次出现d时长的“静止”,并进入“休息”状态,如此循环。

1.3流程设计

根据上文所述,避免无效采集从而减少读写硬盘的时间是流程设计的关键。

具体的时间阈值t以及图像差运算的阈值w,应根据具体应用环境进行调整:人流量大或环境复杂的地方宜使用较短时间t和较大w,人流量小的环境应预留较长的t和保持较小的w。算法流程如图1所示。

图1算法流程

2算法实验平台

算法能否发挥作用,需要在实验平台上用具体程序实现,再经过反复测试、评估才能验证算法的可行性。

笔者利用S5PV210作主控芯片,附加必要的外设;采用1200线模拟摄像头(又称枪机)做视频采集设备;使用VGA接口输出,从而可用电脑显示器观察监控画面;此外,采用普通机械式4T容量的监控硬盘存储录像。

视频监控系统是一个复杂的工程,其中高速电路的设计、芯片选型、视频编码以及算法优化、编程语言的选择等共同制约着程序的健壮性和执行速度,最终影响实验结果,因此可能会出现画面清晰度不够或视频延迟等现象。

3算法实现和验证

3.1技术要点

在确定的平台上,算法的性能直接与数据结构设计、程序语言的运行效率等相关。因此,设计过程中必须作大量优化。

(1)在程序设计中,对监控区的亮度信号必须根据实际环境设定合适的阈值,以减少背景抖动带来的错误判断。具体取值要求反复实验查看效果来确定。

(2)录像系统暂停过程中,要求采集设备每t时间存储图像到缓存并与硬盘参考图像做相关度运算。因摄像头背景相对固定,所以相关度计算可采用较简单的帧间减法\[1\]实现。考虑到S5PV210开发板支持H.264编码,所以决定应用此编码,以体现出优越性。数据结构设计中,帧缓存采用栈实现。

(3)系统“休息”时,计数器继续工作,系统“休息”结束后归零。程序设计中,用多线程技术监听外界变化和保存现场。

3.2关键部分设计

算法使用VC++7.0和jdk7.0环境共同实现。考虑到各功能模块对实时性和内存控制的不同要求,实时控制部分用C++及OpenCV2.4工具辅助实现,其它用JAVA和JMF2.1实现,涉及混编的部分采用JNI技术。

在调试阶段,用断点调试方法观察计数器变量n的变化是否与设计逻辑相符,以验证对录像的控制是否准确。

调试成功后经交叉编译并移植到预装有Linux2.6的监控系统板上,然后开始对系统进行全面测试,包括硬件的工作稳定性、录像清晰度等。以下对关键部分编程技巧进行阐述。

3.2.1视频中图像帧获取

该步骤使用C++实现:首先建立通信环境。

String str_Cam="vfw:Microsoft WDM Image Capture (Win32):0"; //载入设备驱动程序

CaptureDeviceInfo di_Cam= CaptureDeviceManager.getDevice(str_Cam); //搜索采集设备

MediaLocator ml = di_Cam.getLocator();//建立数据源对象

try{

Player player=Manager.createRealizedPlayer(ml);

player.start();//取得图像流,线程启动

}catch(Exception e){...}

//线程资源准备就绪,开始读帧数据到缓冲区

FrameGrabbingControl fgc=

(FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");

...;//此处省略了C++内存环境异常等处理

Buffer bufFrame= fgc.grabFrame(); //此处调用抓帧方法,先捕获一帧数据,将其读入缓存

BufferToImage btoi=new BufferToImage((VideoFormat) buf.getFormat()); //该帧存图片

3.2.2相邻图像帧相关度计算

使用JAVA语言和OpenCV2.4实现:在t间隔后,取最近一次采集的图像帧读入缓存,再与硬盘最新帧进行比较,取得视频帧差并求图像帧间相关度,判断是否超出阈值\[2\]。

int count=0; //用10次计数获得“10×t间隔”时间

while(count<10){

for(i=0;i

for(j=0;j

...;//此处省略了帧差法中step等变量的定义,详见参考书目\[3,4\]

if(abs( data1\[i*step+j+0\]-data0\[i*step+j+0\])>e_t) //灰度差超阈值,监控区有异常

{break;...;} //跳出帧间比较;进入常态模式,向硬盘写入每一帧

else{...} //帧间相关度高,监控区安全;接着检查下一像素点

} //不需要把缓存帧写入硬盘,继续比较下一像素点

}count++; //计时间隔递增

}//若10倍t间隔内未见异常,则转入“休息”态,系统的采集与录像功能挂起

3.3实验结果

所得录像数据写入硬盘,对应不同时间的两帧,观看录像时取得的对应图片并作比较。两帧对应两幅图片。为考察算法运行效果,特选择两种极端情形进行测试:

第一幅图,显示的是静止的瓶子和旁边静坐着的人,表示系统暂时“休息”中。由于画面中塑料瓶和人都持续静止了一段时间,采集和录像部分将被挂起(时间设定为5个t间隔),届时系统停止向硬盘写入图像帧,只有针对t的计时器仍在工作。

第二幅图,某时刻突然取走塑料瓶,相比前一帧(从硬盘最近写入的栈获取)此时画面只剩下静坐着的人。系统检测到当前缓存帧与硬盘中最新一帧差异很大,应当判定监控区域有异常,立即进入连续采集并录像的状态。此时计数器置零,系统等待下一个t间隔的循环检查。

根据程序调试的打印n值结果可知:系统的计数器变化与采集状态能够对应,说明系统已能按照算法的设计流程判断采集图像的最佳时机,并通过与阈值做差运算最终实现对采集和录像模块的控制;多次实验过程中观看画面无跳跃,基本捕捉到了异常并录像。

4结语

从实验结果看,初步实现了减少采集次数和有效控制读写硬盘时间这一目的。限于笔者图像处理经验上的不足,本文算法仍存在局限性:摄像头对监控区域内不同位置或方向的分辨能力不同,视野边界部分和正对镜头的近距离区域在发生同样程度变化时,系统未能准确作出反应。此类不足,降低了算法的实用性。本文所述研究内容旨在抛砖引玉,如何克服弊端并提高系统的资源利用率,有待后期进一步研究与改进。

参考文献参考文献:

\[1\]HELD CORNELIUS,et al.Intelligent video surveillance\[J\].Computer,2012,45(3):8384.

\[2\]王建文,陆璐.视频监控的异常报警机制\[J\].计算机与数字工程,2007(5):121123.

\[3\]陆系群,陈纯.图像处理原理、技术与算法\[M\].杭州:浙江大学出版社,2001.

\[4\]章毓晋.图像处理和分析\[M\].北京:清华大学出版社,2000.

\[5\]刘宏飞.基于JMF的视频医疗系统的设计与实现\[D\].西安:西北大学,2004.

责任编辑(责任编辑:黄健)