邵晓 杨斌 李光 贾π
海军蚌埠士官学校 安徽 233012
本文提出一种嵌入式智能网络视频监控系统设计与实现方法,其特点是基于嵌入式系统进行设计与开发,系统体积小、成本低、便于安装与维护、具备较强的可扩展性。同时系统还具有运动对象检测功能,可快速检测出监控画面中的运动物体并发出报警信号。系统可实现无人值守,非常适合住宅小区、银行、仓库等单位的安全防范。
本系统的总体结构如图1所示,包括网络视频监控服务器端、客户端和控制端三大部分。
整个系统按照B/S模式开发,网络上的授权用户只需利用标准的浏览器便可访问该系统,不用安装任何特定的软件。结合性能和成本的考虑,本系统采用TI公司的TMS320DM642为系统微处理器和自行研制的DSP开发板。
图1 系统总体结构图
视频监控服务器端用来提供监控视频流,图2描述了它的功能结构。
图2 视频监控服务器端功能结构图
图3描述了视频监控服务器端的工作流程。系统采用运动检测技术以提高系统的智能化程度。目前运动检测主要采用光流法、帧差法和背景减法。背景减法是安全监控中最常用的运动对象检测算法,综合性能最好。考虑速度和稳健性两个方面,本系统采用背景减法实现运动检测和实时报警功能。
基于自行研制的嵌入式DSPIC开发平台(DSP for Picture Processing,图像处理DSP平台),我们设计实现了视频监控服务器端。DSPIC开发平台采用TI公司TMS320DM642 DSP作为嵌入式处理器,该处理器主频600MHz,可支持8路指令并行处理。DSPIC平台集成有32MB外部存储器,4MB FLASH存储器,具有视频信号采集和网络传输模块。
在DSPIC开发平台上,我们采用TVP5150芯片将摄像头输出PAL格式的模拟视频信号转化为YUV格式的数字信号,图像大小设置为D1格式(704×576),每秒采集25帧。
图3 视频监控服务器端工作流程图
针对YUV信号采用背景减法进行运动对象检测。考虑到摄像机刚启动可能造成第一帧图像失真,系统固定选取第二帧图像作为背景帧。为了节省硬件的内存空间和提高运算速度,把背景帧作一个宏块化的压缩处理:对于图像中每个8×8的宏块取像素平均值,得到只有原图像1/64大小的小图像。然后根据背景减法的原理,将每一帧图像宏块化之后再和背景帧作差,当连续有两个差值大于某个阈值时,则认为当前所处区域是属于运动对象的,这样可以消除一些小的水平方向的噪声,因为噪声一般都是孤立的、小范围的,大多只能引起一个宏块的变化。最终检测出的运动对象区域用一个方框表示,方框位置由左上角点和右下角点确定,这两点的坐标数据会随视频流一并传送至客户端。
为了缩短开发周期,系统采用MJPEG标准进行视频压缩。根据不同的网络状况和应用需求,可更换DSP的编码算法。由于DM642性能较高,可以实现实时编码并使系统具备良好的性能。由于是在嵌入式系统上实现视频压缩以及运动对象检测,受到硬件条件的限制,要保证算法的执行速度,需要对程序进行优化。该算法通过和硬件相配套的标准汇编语言实现,采用流水线技术和并行技术实现了速度的极大提高,满足实时性要求。
系统采用TI公司推出的TCP/IP NDK实现网络服务器模块。系统启动时需配置DM642的网络环境,包括完成协议栈系统的初始化工作,创建配置文件和为视频服务添加网页文件。客户端所看到的Web页面以及负责解码显示的ActiveX控件均需要添加至视频服务器中。另外还需编写CGI程序以实现视频监控控制端与服务器端的交互功能。
视频监控客户端主要由三部分组成:视频数据获取模块、解压缩与显示模块和显示参数调节模块。主要功能是从服务器端抓取视频数据并负责解码显示。视频数据获取模块的主要功能是通过服务器端的网络接口不断从视频服务器上获取经过压缩的视频数据,然后交由解压缩与显示模块负责解码和在浏览器中显示;由服务器端的实时时钟提供的时间信息以及运动对象的位置信息会一并随着视频数据传送至客户端并在浏览器中显示。显示参数调节模块负责对视频图像显示效果进行调节,如显示分辨率、亮度与对比度等。
为方便使用起见,我们采用ActiveX技术完成了对客户端程序的实现,用户无需安装任何客户端软件,通过IE浏览器便可看到监控视频。
ActiveX是Microsoft提出的一组基于组件模型(Component Object Model,COM),且与具体编程语言无关的技术,被广泛应用于Web服务器以及各种客户端的应用开发。将ActiveX控件嵌入监控页面,一并添加至视频监控服务器上的视频服务器中,即能实现在PC端用IE浏览器访问服务器监控页面时,ActiveX控件自动识别版本、下载、注册、安装并运行的功能。客户端无需任何配置,只要安装IE3.0以上版本的浏览器即可。
为了使生成的控件尽量小,尽量不依赖客户端环境,我们选用VC提供的ATL方法开发ActiveX控件。控件采用了基于套接字(Socket)通信来实现视频数据获取模块,主要是利用了Windows Sockets 1.1提供的API函数与视频监控服务器端建立连接,并发送HTTP请求以获取视频服务器上编码完成的一帧图像数据;解压缩与显示模块的主要部分是一高效的JPEG解码类,当一帧图像数据全部下载完之后,调用该类对图像数据进行解码,并在浏览器中显示。
显示参数调节模块是通过在HTML文件中添加VBScript脚本代码来实现的。用户可利用监控页面提供的交互功能来改变控件的各属性值,从而使用户在观看监控视频时可自由设定图像显示分辨率,调节图像亮度和对比度,选择是否显示系统当前时间和帧率等。
视频监控控制端用于设置和修改服务器端的各种运行参数,从功能上主要分为四个模块:网络设置模块主要负责对服务器端的网络服务器模块进行操作,主要设置和修改其IP地址等各项网络参数;图像设置模块对服务器端的视频压缩与编码模块发生作用,负责设置和修改其压缩生成的图像分辨率以及图像质量,主要是为了增强系统对应用环境的适应性,如在网络环境较差的情况下可选择较低的编码质量和较小的图像分辨率以减少网络传输数据量,以保证系统的正常运行;时钟设置模块用于调节服务器端的实时时钟,以便给监控视频提供准确的时间信息,并且还负责设定系统报警时段,使得系统只有在特定时间内检测到运动对象才发出报警信息,以增强报警机制的灵活性,扩大其适用范围;云台控制模块通过服务器端的串口对云台产生控制,以调节摄像头的位置和方向。视频监控控制端各模块对服务器端的作用关系如图4所示。
图4 视频监控控制端功能模块与作用关系
通用网关接口(Common Gateway Interface)是外部扩展应用程序与Web服务器交互的一种通用的接口标准,给Web服务器提供一个执行外部程序的通道。系统采用CGI程序实现控制端与服务器端的交互。CGI程序由控制端发送的基于HTTP协议的请求和命令触发,然后将控制端的请求和命令传送给服务器端,服务器端应用程序则执行相应的操作。
我们采用Borland公司推出的可视化应用程序开发工具Borland C++Builder 6开发控制端软件。主要利用C++Builder 6提供的HTTP服务客户端控件TIdHTTP向服务器端相应的CGI程序发送HTTP请求,CGI程序接收到请求之后根据指令做相应操作。软件在启动时将从一配置文件中读取服务器的MAC地址、IP地址等网络参数,用户可根据不同的网络环境来修改IP地址。软件退出时会将新设置的IP地址写回配置文件,以便下一次启动时能够以正确的IP地址来访问视频监控服务器。
目前该网络视频监控系统已全部开发完成,将该系统在局域网上试运行,监控视频的左上角显示系统时间,右上角显示帧率。经测试,此时视频监控服务器每秒生成25帧D1格式的视频图像,客户端ActiveX控件抓取并显示图像序列的速度为32fps。由该实验结果可看出,本系统对视频图像的压缩编码效果良好,监控视频清晰流畅,无抖动现象,视觉效果好。系统可实时检测出监控画面中的运动对象,用红色方框标出,并发出报警信号。经测试,系统可在2ms以内准确检测出运动对象,具备实时报警的功能。
[1]欧扬,付保川.一种嵌入式智能网络视频监控终端的研究与设计[J].微计算机信息.2005.
[2]TMS320DM642 Video/Imaging Fixed-Point Digital Signal Processor Data Manual,Literature Number.SPRS200B.Texas Instruments Incorporated.2003.
[3]邓诚强.实时视频中运动对象的检测及跟踪[D].武汉:华中师范大学.2004.
[4]周霖.DSP信号处理技术应用[M].北京:国防工业出版社.2004.
[5]汪国有,赵蓝兰.采用DM642平台设计MPEG-4视频流传输系统[J].电视技术.2005.
[6]王国伟,宋铁成,陈正石.基于嵌入式Web Server的视频监控服务器[J].计算机工程.2005.