基于ARM的远程视频监控系统的设计
扫描二维码
随时随地手机看文章
摘要:在ARM 微处理器平台上移植嵌入式Linux 操作系统,完成视频采集任务,并以服务器方式将图像发送到网络,从而实现远程监控。系统以ARM9 微处理器AT91RM9200 为主处理器,采用普通USB 摄像头作为图像采集设备,构建了一种可靠性好、价格低廉和使用方便的网络视频监控系统。
0 引言
在国内外市场上,视频监控主要有模拟视频监控和数字视频监控。前者技术发展已经非常成熟,在实际工程应用中得到广泛应用,但只适合于小范围的区域监控,而且系统的扩展能力差,已经不能适应社会发展的需要。后者又可分为基于PC 机的视频监控系统和基于嵌入式的视频监控系统。嵌入式视频监控系统与PC 视频监控系统相比,具有体积小、功耗低、性能稳定的特点,很适合于在银行、学校等公共场所的安全监控。采用USB 摄像头作为视频采集设备的嵌入式视频监控系统,更由于其价格低廉、通用性好且接口标准而备受青睐。
本系统基于 ARM9 处理器和嵌入式Linux 操作系统,利用USB 接口摄像头实现数字图像采集任务,同时直接将数据以视频服务器方式发送到网络,用户可以直接通过Web 浏览器进行远程实时监控。
1 硬件平台设计
1.1 微处理器模块
平台采用 ATMEL 公司的AT91RM9200 处理器,AT91RM9200 是基于ARM920T 内核的低功耗32 位RISC 微处理器,其主频为180MHz,处理速度快,功能强,性价比高,能很好满足嵌入式Linux 系统的需求,还集成了包括USB2.0 主机端口和设备端口以及10/100MBase-T 以太网接口。在此基础上,配置了64M 的Nand Flash 用作存储设备,2×32M的32 为SDRAM。处理器通过USB 接口连接摄像头,通过以太网接口连接网络。系统硬件平台功能如图1 所示。
图 1 监控系统硬件
1.2 USB 主设备模块
AT91RM9200 片内集成的USB 主机端口集成一个跟集线器,并在下游端口集成收发器,它提供几个半双工高速串行通信端口,速率为12Mbit/s,最多可连接127 个USB 器件。本系统外扩一个USB 主机端口来支持USB 摄像头的访问。
系统采用的是应用广泛的选用罗技快看酷讯版摄像头进行数据采集,这种摄像头可以实现硬件JPEG 编码,视频数据由摄像头采集,一旦主控制器获得视频数据请求,则通过USB接口读取其缓存的数据,并对图像数据进行压缩编码,然后基于socket 编程来发送这些压缩后的数据到服务器。
1.3 以太网接口模块
AT91RM9200 的在片以太网卡端口和网络物理层芯片DM9161E 的MII 接口通信。片内以太网卡通过DMA 通道进行数据的发送,不影响AT91RM9200 的正常运行。首先正确设置传送控制寄存器和传送地址寄存器的传送数据块字节数、数据块存储首地址等参数,随后依次从指定数据存储区地址读取1024b 数据,送入内部发送缓冲器中,由MAC 对数据进行封装发送,同时记录已传送字节数,直到数据块发送完毕。当发送完一组数据后,发出DMA中断请求,由AT91RM9200 进行相应的处理。整个网络子系统电路由AT91RM9200 控制和调度。
2 嵌入式Linux 开发环境的建立
2.1 交叉编译链的建立
嵌入式开发与普通开发有个显着的不同是,普通开发是在本机开发、调试,本机运行,而嵌入式由于资源有限,不能直接在嵌入式目标机上运行开发工具,因此嵌入式开发一般采用交叉编译方式,即在开发主机上编译目标机上运行的程序。交叉编译链可以自己制作,也可以通过网络下载别人已制作好的交叉编译链直接使用。本系统所用交叉编译链版本是3.4.3。
2.2 配置并编译内核
系统选用开源的 Linux 2.6.14 版内核作为操作系统,以交叉编译方式编译,即在普通PC机上运行Fedora 8 环境下,用交叉编译链编译在ARM 9 机器上运行的Linux 内核。内核用tftp 方式下载到开发板,然后解压自引导。具体操作如下:
(1) 给内核补丁,下载Linux2.6.14 内核源码linux-2.6.14.tar.bz2 和AT91RM9200 补丁2.6.14-at91.patch.gz,然后:
3 视频采集的实现
3.1 USB 摄像头驱动
Linux 对于视频采集设备的支持,是通过Video4Linux(V4L)实现的,V4L 为视频应用程序提供了一套统一的API 函数,视频应用程序通过标准的API 接口实现与内核和驱动的通信,实现视频设备的各种功能。对于USB 接口摄像头,驱动程序实现了基本的I/O 接口函数open、close、read、write,实现了内存映射功能函数mmap 和控制函数ioctl,并对于中断进行了处理。
Linux 中视频采集的实现,可以用read()函数直接读取数据,也可以用mmap()函数通过内存映射工作。内存映射方式直接将设备地址映射到内存地址空间,使用方便,效率更高,因此本系统采用内存方式获取视频数据。
本系统的设备控制函数ioctl 实现的主要设备控制命令有获得摄像头信息VEDIOCGCAP,判断获取图片是否成功VEDIOSYNC,读取图片相关信息VEDIOCGPIC,以及获取图片VEDIOGETPIC。
3.2 视频数据采集
本系统数据采集程序也是基于 V4l 编写应用程序,其基本流程首先通过open 系统调用打开摄像头设备,如果成功则继续通过ioctl 函数命令(参数VEDIOCGCAP)获取摄像头相关信息,ioctl 函数命令(VEDIOGETPIC)获取图像数据。
4 远程监控的实现
4.1 BOA 服务器的建立
Web 服务器在本方案中采用了Linux 系统中常用的Boa,Boa 是一种非常小巧的Web服务器,其可执行代码只有大约60KB 左右。Boa 支持CGI,速度快和安全性好,很适合嵌入式系统使用。使用时只需用已建好的交叉编译链编译,然后修改配置文件boa.cONf,为Boa 创建需要的目录/var/www/、/var/log/boa/acces_log 和/var/log/boa/error_log,以及将通用mime.types 拷贝到/etc 目录下,即完成了BOA 的配置。
4.2 远程视频服务的实现
远程视频服务基于 servfox/开源软件包,servfox 流媒体服务器使用V4L 完成原始视频图像的获取,然后把视频图像以MJPEG 的方式压缩,通过TCP 协议向网络发送。
复制 spcaview 软件包的目录http-java-applet 到Boa 的Web 服务器目录下,启动boa 服务,再运行命令,#servfox –s 640x480 –w 7070.
即已完成视频服务器的建立,在和ARM 开发板连接的PC 机浏览器上,输入开发板的IP 地址和Boa 服务器目录下的网页即可观看摄像头所采集的信息。
5、结论
本文设计实现的嵌入式Linux 的网络视频监控系统,是一种低成本的网络视频监控方案,而且可以直接连入以太网,通过浏览器即可观看,画面流畅,简易方便,具有广泛的应用价值。