邓丽萍
DOI:10.16644/j.cnki.cn33-1094/tp.2016.09.010
摘 要: 采用分布式存储和模块化结构研发出视频监控系统是未来的发展方向。本文研究并设计的基于嵌入式Web服务器的远程视频监控系统,解决了以往视频监控系统单机客户端无法联网、需要使用大量存储空间等问题。系统通过嵌入式Web服务器技术完成了视频的采集、处理、传输、存储及非法入侵自动报警等功能。实验证明,该系统的实时性、交互性较好,开发成本较低,可以广泛地应用于远程视频监控。
关键词: B/S; 嵌入式技术; 远程; 视频; 监控; Web服务器
中图分类号:TP3 文献标志码:A 文章编号:1006-8228(2016)09-37-04
Development of remote video monitoring system based on embedded Web server
Deng Liping
(Fujian Agricultural Vocation-Technical College, Fuzhou, Fujian 350007, China)
Abstract: To research and develop the video monitoring system with distributed storage and modular structure are the future development direction. This paper studies and designs a remote video monitoring system based on embedded Web server, solves the problems, which cannot be connected with the Internet and need to use a large amount of storage space, of the previous video monitoring system. Using the embedded Web server technology, the system realizes the video capture, processing, transmission, storage and automatic intrusion alarm and other functions. Experimental results show that the system has better real-time performance, better interaction and lower development cost. It can be widely used in remote video surveillance.
Key words: B/S; embedded technology; remote; video; monitoring; Web server
0 引言
以往的视频监控系统存在众多的局限性:传输距离短、无法连接Internet、存储量大、取证查询难。本文设计的远程视频监控系统主要基于嵌入式Web服务器,将Web技术和嵌入式技术相结合,结合ARM9硬件系统和Linux软件系统,是嵌入式远程视频监控系统。
系统采用嵌入式Linux操作系统,嵌入内置的Web服务器。摄像头送来的视频信号经过编码器压缩,通过视频传输协议传输,网络用户可以使用浏览器直接查看视频图像,实现目标场所的实时视频监控,以及识别非法闯入并报警,用户不需要单独的一台PC机用于监控,只要保证在网络连通,就可进行对现场的监控和相关的控制操作。
1 开发技术介绍
嵌入式技术的飞速发展不单使之成为当前计算机技术中的重要分支,同时也使计算机的分类变为了通用计算机和嵌入式系统之分。嵌入式系统的应用更是涉及信息家电、网络、金融、医疗、工业控制等各个领域,一些学者甚至认为嵌入式技术必将成为今后PC时代的主宰者。
而对于Web技术,则有以下特点。
⑴ 大量的视频、音频和图形信息会占用相当多磁盘空间。然而对于Web而言,信息可以放置在不同站点上,只需在浏览器中指明该站点路径。在用户看来这些信息是一体化的。
⑵ Web是动态、交互的,表现在其超链接上。用户的浏览完全由自己决定。另外通过表单的形式可以获得动态的信息。用户通过填写表单可以向服务器发送请求,服务器根据用户的请求信息进行相应。
本系统结合了嵌入式技术和Web技术的各自优点,将它们结合在一起,引入到系统研究中,发挥了最大的效率。
2 系统总体设计
本系统是基于视频处理技术,结合RAM9嵌入式硬件系统和Linux软件系统,以及嵌入式相关技术,设计并开发出的一套实用的嵌入式远程视频监控系统,主要包括视频采集、视频处理、视频存储、视频传输、图像识别报警、浏览器访问等六个功能模块。本系统结构图如图1所示。
本系统在总体布局上分为远程监控端(浏览器端)和现场采集端(服务器端)两个部分。
远程监控端运行于控制中心,它实时接收和显示视频数据,并且可以通过发出相应命令来控制现场的相关信息。本监控系统的节点运行于现场的远端,节点包括视频采集和处理两部分,负责视频信息的采集、处理并将视频数据通过网络向监控端发送。
节点控制处理器采用MINI2440系统板,它是基于S3C2440 处理器的开发系统板,系统用到的外设接口有:RS-232串口(COM1)、USB HOST接口、USB Slave B型接口、SD卡存储接口、10M以太网接口。通过RS-232接口连接到宿主机上,通过在USB接口上外接摄像头,将采集到的视频图像数据传输缓冲区中,然后运行图像处理程序,并通过以太网传到远端,历史视频记录保存到SD卡。系统硬件框架如图2所示。
本系统基于B/S模式的结构,服务器端包括 USB摄像头驱动、视频采集、视频处理、RTP/RTCP流媒体实时传输、图像识别自动报警等控制程序,远程监控端只需要安装播放器和JDK即可。系统软件层次如图3所示。
3 视频监控系统的实现
3.1 环境配置
本系统的主机采用x86体系结构的Linux系统。目标系统是三星的S3C2440A处理器,需要在主机上搭建交叉编译环境。交叉编译流程如图4所示。
由于系统前台的一些操作,如用户登录、注册等需要应用到perl编程,而开发板上使用的Linux内核是不支持perl程序的运行,因此要在Mini2440上搭建perl环境,即将perl移植到mini2440上,使得系统能运行perl脚本语言程序。
3.2 驱动加载
本系统平台上运行的是ARM Linux,在启动后,启用了内存管理单元,系统进入保护模式,应用程序不能直接读写外设的I/O区域(包括I/O端口和I/O内存),这时就要借助于外设的驱动来进入内核完成工作,因此,必须设计驱动并将其加载到内核中。
本系统主要用到了摄像头驱动,因此在进行应用程序开发之前,需将摄像头驱动加载到嵌入式Linux内核中。在台式机上一般采用动态加载的方式,但本系统是嵌入式产品,因此设计时先用动态加载的方式来对驱动进行调试,调试完毕后再编译到内核里。即先进行动态加载调试,后将其静态加载到内核中。利用交叉编译工具编译、链接驱动程序,生成驱动模块文件,利用insmod命令将其动态加载到内核,进行调试,正确后,在将其静态加载到内核。
3.3 Linux内核配置与移植
由于考虑到嵌入式资源和性能的特殊要求,必须对Linux进行裁剪,使得嵌入式Linux既能满足系统需求,也可满足资源要求,因此在做了驱动加载后,还必须对Linux内核进行重新配置并将其移植到开发板上。根据设计需求,必须配置USB模块以及video4linux的支持。
进入Linux内核文件,在终端中输入命令:
make menuconfig:
Device Drivers→Multimedia devices→<*>Video For Linux,
Device Drivers→USB support→<*> USB OV511
Camera support,
保存并退出后重新编译内核,运行命令:make dep和make zImage,即可生成配置好的内核映像文件。
3.4 实时视频监控
将视频采集和传输统一成一个应用程序,即实时视频,程序内创建两个线程,一个用来进行影像采集,采集的影像是JPEG格式;另外一个用来传输视频,然后配合JDK远程执行两个java程序:JWEBCAMPLAYER和SWINGWORKER以及JWEBCAMPLAYER.JAR,即可实现实时监控。
为了提高采集和传输效率,需实时监控,系统开辟了四个图像帧缓冲区(即OUTFRMNUMB=4)轮流进行采集,在缓冲区满后完成本次采集过程。随后摄像头重新回到预设状态,发送信号唤醒图像处理程序,利用jpeg压缩库(jpeglib)进行压缩编码,同时采集程序获得的帧图像并覆盖保存至另一个缓冲内,四个缓冲区轮流使用,不丢弃任何无用的帧,而且只传输JPEG文件的数据,头文件确保只传输一次,这样保证了传输的效率,并且图像采集与传输同步。根据以上的基本设计思路,画出程序设计流程图如图5所示。
采集程序使用了Video4Linux API,其中V4L为两层式架构,上层为V4L 驱动程序,下层是USB摄像头驱动程序。正确添加V4L和USB摄像头驱动后,系统会产生设备文件,即可进行视频采集。流程如图6。
[开始][获取设备信息和图像信息VIDIOCGCAP、VIDIOCGPICT][图像参数设定VIDIOCSPICT][内存映射MMAP][视频采集VIDIOCCAPTRUE][等待采集完成VIDIOSYNC][本缓冲区满] [发送信号唤醒图像处理进程][指向下一个缓冲区
Fbuffer_counter=(fbuffer_counter+1)%OUTBUFNUM][停止采集?] [关闭视频设备][结束] [否][否]
图6 视频采集流程图
系统结合影像采集程序和视频传输程序,采用多线程编程机制,将影像采集和视频传输分别在两个不同的线程内实现,通过信号量和相关线程锁的控制,解决了视频采集和传输同步问题,提高了系统的实时性。并且设计时利用JDK软件远程加载对相关java小程序,将本地IP与服务器进行了连接,实现了双方间的网络通信,保证了视频流的传输。而且系统可以通过网页上的控制按钮,来改变视频的亮度。
3.5 视频存储
此模块应用了强大的ffmpeg开源代码实现,ffmpeg能够快速实现音视频格式转换,也能从音视频源获取数据并将其保存。系统通过设置ffmpeg命令行的参数来控制音视频数据。由于嵌入式系统与PC上的CPU体系结构是不一致的,如在Mini2440试验系统上的CPU是基于ARM9的三星S3C2440处理器,而主机上的CPU为Intel X86体系结构的。ffmpeg针对X86体系结构下的Linux操作系统是可以直接编译通过并安装的,而在ARM体系结构下是需要交叉编译后才能使用。因此根据需求和ffmpeg内容,编写并修改Makefile文件,即可利用Make管理ffmpeg项目。
3.6 图像识别报警
此模块检测是否有不明物体进入监控现场,如果有,就驱动蜂鸣器响,实现当场报警。
[开始][打开视频设备][设置采集图片参数][是否打开成功] [采集BMP图片][打开服务器套接字
建立网络连接][与背景图片进行比对
提取相差部分][是否超过阀值] [驱动蜂鸣器报警][延续10秒的报警时间][报警结束,继续检测][关闭摄像设备][结束] [是] [否] [否][是]
图7 报警流程图
通过采集图片的程序,将摄像头直对的某个区域静止情况采集下来,保存成一张bmp图片(当作背景图片)(应该适时更新),然后启动另一个程序,隔一段时间采集一张此时情况下的图片,然后分别对两张图片进行二值化处理,加上系统的容错数据,即可检测是否有不明物体进入现场,即实现了自动报警。根据这一设计思想设计出报警检测流程图,如图7所示。
4 系统测试
4.1 实时监控测试
打开服务器,搭建好系统,设置浏览器端与服务器的网络连通,即可进行系统功能和性能测试。
4.2 视频保存功能测试
将采集的视频保存为文件video.avi,将其拷贝到PC机上,通过暴风影音等播放器,即可观看采集下来的历史视频记录。
4.3 自动报警功能测试
将物体或者人放在监控镜头的各个位置,判断此刻监控镜头中是否有不明物体出现。
测试条件:
⑴ 无物/人:表示此刻监控镜头没有任何物体存在,没人;
⑵ 有物:表示此刻监控镜头有物体进入,但不是人;
⑶ 有人:表示此刻监控镜头有人存在。
5 结论
本系统设计的重点是在处理将采集来的影像通过网络畅通的传输到远程监控端,因为视频流的畅通传输决定了本系统的性能,如果不能解决好此问题,整个系统是难以实现。针对这些问题,在视频采集时使用了四个缓冲区来存储采集的信号,四个缓冲区轮流使用,不丢弃任何帧,而且传输的时候只传输JPEG文件的数据,头文件只传输一次,这样保证了传输的效率,并且图像采集与传输同步进行。
从总体上看,本系统实现基于嵌入式Web的远程视频监控这一基本功能以及其他一般监控所具有的功能,并具有很强的交互性及实时性,开发成本低等特点,可以广泛地应用于远程视频监控。但是,系统仍然存在一些需要改进的地方,例如由于摄像头是普通的摄像头,性能存在不足,会影响最后的观察效果;另外,各模块之间存在结合不紧密的缺点。这些问题有待改进。
参考文献(References):
[1] 周小仨.基于嵌入式的多路视频监控传输系统研究[J].信息
与电脑,2015.4:1-2
[2] 伊国栋.ARM的嵌入式远程视频监控系统的设计[J].电子技
术与软件工程,2014.15:149-149
[3] 张桐.基于Linux的嵌入式远程视频监控系统设计[D].重庆大
学,2013.
[4] 刘金梅.基于B/S架构的嵌入式Web远程监控系统的研究
与实现[D].内蒙古大学,2012.
[5] 朱兆祺,李强,袁晋蓉.嵌入式Linux开发实用教程[M].人民邮
电出版社,2014.
[6] 蔡丽艳.嵌入式Web视频监控系统研究[J].计算机技术与发
展,2013.5:192-194,198
[7] 王峰,刘蓓莉,冯玉森.基于Hi3516的Web视频监控系统的
设计与实现[J].电子科技,2013.10:62-63,66
[8] 邸炜松.基于嵌入式Linux的温室远程监控系统的研究[D].天
津理工大学,2015.