基于ARM嵌入式的视频监控系统的设计

2011-06-05 11:01龙世瑜卢碧燕
电子设计工程 2011年17期
关键词:缓冲区内核浏览器

龙世瑜,魏 武,卢碧燕

(湛江师范学院 信息科学与技术学院,广东 湛江 524048)

目前,嵌入式系统在视频监控中的应用越来越广泛。伴随着网络的强大功能,视频监控更侧重网络监控方案,要求体积小、远程化、成本低、功耗小、操作界面人性化等。本系统基于嵌入式Linux平台上利用USB摄像头采集视频图像,通过视频图像压缩及结合网络进行视频图像传输,使远程监控成为可能。

1 系统概述

视频图像监控系统由4部分组成,分别为视频图像采集、视频图像处理、视频图像传输、视频图像显示。视频图像采集部分由数字摄像头、USB通道和嵌入式处理器构成、视频图像处理主要是视频图像压缩,由算法实现、视频图像传输主要利用视频服务器来实现、视频图像显示主要是在远程的主机上实现视频图像的浏览、保存和处理等,Linux主机上由应用程序实现,Windows主机上通过浏览器上的JAVA程序实现。系统原理框图如图1所示。

图1 系统框图Fig.1 System block diagram

2 系统硬件

CPU处理器使用Samsung S3C2440A,主频400 MHz,最高533 MHz;64 M SDRAM、32 bit数据总线、SDRAM 时钟频率 100 MHz;256 M/1 GB Nand Flash, 掉电非易失、2 M Nor Flash,掉电非易失;统宝3.5真彩LCD,屏集成4线电阻式触摸屏,屏幕分辨率可以达到 1 024×768象素;100 M以太网RJ-45接口 (采用DM9000网络芯片)、 串行口 、USB Host、USB Slave B型接口、SD卡存储接口、路立体声音频输出接口,麦克风接口、JTAG接口、4 USER Leds、6 USER buttons(带引出座)、I2C总线AT24C08芯片、20 pin摄像头接口;摄像头用良田,兼容SN9C20X系列芯片的驱动,本系统的内核中集成了该驱动。

3 系统软件

3.1 Linux内核的移植

移植新内核主要是为了给LCD以及摄像头添加相应的驱动支持,在Fedora 9中打开内核的目录,使用缺省配置文件进行配置:在内核中添加V4L支持、添加万能USB摄像头驱动GSPCA[1]。

3.2 基于V4L2的图像采集程序

系统使用的交叉编译工具为arm-linux-gcc-4.3.2。设计使用到的应用程序都要通过该编译器编译后下载到开发板上运行。将编好的应用程序V4L2.c交叉编译后下载到板。

V4L(Video for Linux)是Linux下提供的一个音视频接口规范,所有的音视频驱动编写都要用到这些接口。

V4L从2.4.1.x的内核版本中开始出现,设计使用的Video for Linux2(简称V4L2)是V4L的改进版,修复了第一代中的部分BUG[2]。

设计的图像采集及处理程序主要基于V4L2架构,通过对一些ioctl函数的调用来实现视频设备的打开,图像的采集处理,图像的显示等。几个主要的ioctl函数的简介:

1)ioctl(fd,VIDIOC_S_FMT, &fmt):用于设置图像的格式。

2)ioctl(fd, VIDIOC_REQBUFS, &req):向内存申请缓冲区,申请的buffer个数存在count中。

3)ioctl(fd, VIDIOC_QUERYBUF, &buf):查询已经分配的V4L2的视频缓冲区的相关信息,包括视频缓冲区的使用状态、在内核空间的偏移地址、缓冲区长度等。

4)ioctl(fd, VIDIOC_QBUF, &buf):放一个空的视频缓冲区到视频缓冲区输入队列中,函数执行成功后,指令的视频缓冲区进入视频输入队列,在启动视频设备拍摄图像时,相应的视频数据被保存到视频输入队列相应的视频缓冲区中。

5)ioctl(fd, VIDIOC_STREAMON, &type):启动视频采集命令,应用程序调用VIDIOC_STREAMON启动视频采集命令后,视频设备驱动程序开始采集视频数据,并把采集到的视频数据保存到视频驱动的视频缓冲区中。

图像采集处理流程图如图2所示。

图2 图像采集处理流程图Fig.2 Image sampling flow chart

3.3 网络服务器

系统采用Boa服务器。Boa是一种非常小巧的Web服务器,其可执行代码只有大约60 kB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,Boa支持CGI,能够为CGI程序fork出一个进程来执行[3]。板上移植该服务器,Boa服务器默认开机自动运行,配置conf文件。

服务器端应用程序使用servfox,servfox-R1_1_3解压修改Makefile文件:CC=arm-linux-gcc,编译后得到可执行文件servfox,下载到板上,输入命令chmod+x servfox为它添加可执行属性。

客户端程序使用spcawiew,该程序用于在Linux主机上对服务器进行监控,无需移植。在Linux上编译spcaview.由于此软件包依赖与libsdl,所以在安装spcaview之前,需要安装SDL-1.2.13.安装spcaview软件后,在源文件目录上有3个可执行文件,spcacat:简单图片的抓取工具,不能用于网络监视客户端,Spcaserv:流媒体服务器,Spcaview:用来纪录数据流,也能用来播放数据,也能作为网络监视客户端用。

4 监控过程

4.1 在Linux操作系统上的监控

正常启动运行开发板,运行服务器端程序servfox:servfox-d/dev/video0-s 320x240-w 7070。

在Linux上运行:./spcaview-g-s 320x240-w 10.1.91.230:7070

其中10.1.91.230是服务器的IP地址,这样就可以在PC机上看见USB摄像头采集进来的数据了。

系统是装在虚拟机中的fedora 9 linux系统,可以流畅地观察到摄像头监控区域的情况。

4.2 Windows操作系统上的监控

对于网络监控的客户端,能够跨平台的工具目前只有浏览器,通过浏览器来监控,无论是 Linux、Windows、MacOS或者其他的UNIX系统,只要有图形界面的浏览器,在桌面环境下都可以对远程的摄像头所“控制”的范围进行监控[5]。

Mini2440上已经有Boa服务器可供使用,Spcaview中的http-java-applet文件夹中已经包含了一个可以监控使用的web页面,将该文件夹复制到Boa服务器的主文件夹/www下。

由于http-java-applet文件夹内含的WEB主页面(Index.html)包含了JAVA控件,所以先在主机上安装JAVA环境,让浏览器支持JAVA插件[5]。

安装好JRE后,在浏览器的地址栏上输入服务器地址,即可实现远程监控[5]。

4.3 远程抓拍

通过web表单提交CGI来运行应用程序。

通用网关接口(CGI)规范允许Web服务器执行其他的程序并将它们的输出储存在发送给Web浏览器的文本、图形和音频中。服务器与CGI程序的结合能够扩充World Wide Web 的能力[6]。

CGI程序可以由C、Perl或者UNIX Shell脚本等流行编程语言编写。

在本设计中,网页上的按钮shoot the picture提交了一个名为V4L的CGI文件v4l.cgi,该文件是用shell脚本编写的,用于在板上运行已编译好的图像采集程序并对抓拍的图片返回到新打开的网页中进行查看。

Shell脚本(v4l.cgi)内容如下:

5 结束语

系统采用开源的Linux系统,降低了开发成本,可以任意裁剪和制定内核,方便移植。与传统PC机的监控系统相比,本系统具有体积小、成本低、可靠性强等优势。本系统还具有一定的扩展性,可以增加适当的功能扩展来满足用户更高的要求,如在图像采集端加入设置入侵检测或者报警等控制功能。

[1]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

[2]科波特.LINUX设备驱动程序[M].3版.北京:中国电力出版社,2006.

[3]斯洛斯.ARM嵌入式系统开发[M].北京:北京航空航天大学出版社,2005.

[4]刘淼.嵌入式系统接口设计与Linux驱动程序开发 [M].北京:北京航空航天大学出版社,2006.

[5]凌明.嵌入式系统高级C语言编程[M].北京:北京航空航天大学出版社,2011.

[6]杨水清.ARM嵌入式Linux系统开发技术详解(珍藏版)[M].北京:电子工业出版社,2009

猜你喜欢
缓冲区内核浏览器
强化『高新』内核 打造农业『硅谷』
反浏览器指纹追踪
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于网络聚类与自适应概率的数据库缓冲区替换*
微生物内核 生态型农资
环球浏览器
关键链技术缓冲区的确定方法研究
初涉缓冲区
AVS标准中的视频码流缓冲区校验模型分析