李佳林 刘永春
摘要:针对目前工业控制、通信网络、生活小区等领域广泛运用到网络视频监控,对基于ARM-Linux的网络视频采集系统的设计方案和实现方法进行了深入研究。设计了以上位机PC、下位机TQ2440开发板以及USB摄像头为主体的硬件体系结构,硬件系统的核心单元是ARM(S3C2440)。软件系统以嵌入式Linux操作系统为基础,将网络传输与视频采集相结合,通过视频服务器(MJPG-streamer)观测远端的实时情况,从而实现网络视频的采集。在本文的最后,提出了该系统加入WiFi模块改进的可能性,对相关领域的研究具有一定的参考价值。
关键词:嵌入式;Linux系统;视频采集;ARM;S3C2440
中图分类号:TP277 文献标识码:A 文章编号:1009-3044(2014)06-1314-03
Design and Implementation of Network Video Capture System Based on S3C2440
LI Jia-lin, LIU Yong-chun
(College of Automation and Electronic Information, Sichuan University of Science & Engineering, Zigong 643000, China)
Abstract: For the current industrial control , communication networks, living quarters and other fields are widely applied to video surveillance network , based on ARM-Linux network video capture system design and implementation methods for in-depth study. Design the hardware architecture composed of upper machine PC, the lower machine TQ2440 development board and USB camera, the core unit of the hardware system is ARM (S3C2440). Software system based on embedded Linux operating system, the network transmission and video capture combining real-time observation of the situation via remote video server (MJPG-streamer), in order to achieve network video collection . In the last article, and proposed system by adding the possibility of improving WiFi module, the research of relevant field has certain reference value.
Key words: Embedded ; Linux systems ; Video capture ; ARM; S3C2440
随着步入21世纪信息时代的发展,电子技术和网络已经深入都人们生活得各个领域,尤其是以“信息采集及处理”为核心的视频采集系统。目前国内外该系统主要应用于工业控制及检测,视频监控,通讯网络,计算机视觉,安全防控系统等[1]。
嵌入式视频采集系统具有高效,体积小,实时稳定,低成本等优点。目前32位的ARM处理器相比于其他处理器具有明显的优势,不仅提供了丰富的硬件资源和外部扩展功能,而且其性能上也进一步得到了提升[2]。采用USB接口摄像头不仅具有高的采样速率,而且通用性强。运用Linux操作系统,该系统不仅源代码开放,而且具有丰富的网络功能和良好的可移植性。该文设计是基于32位的嵌入式微处理器ARM9(S3C2440)[3]和嵌入式操作系统ARM-Linux的图像采集系统[4]。
1 系统架构
本文设计的核心是以天嵌科技生产的TQ2440(S3C2440)微处理器,配合源代码开放的Linux系统,通过市场上广泛应用中星微公司生产的zc301p芯片的USB摄像头采集视频信息[5],然后将USB摄像头所采集的图像出给S3C2440进行预处理,在通过英特网(internet)传送给远端的客户端,而客户端运用ARM-Linux系统下开发的视频服务器进行观看,从而实现整个网络视频采集过程。整体框架如图1 所示:
图1 系统整体架构
2 硬件体系结构
嵌入式网络视频采集的的硬件设计包括核心板和开发板两部分,核心板是S3C2440微处理芯片,必需的复位、晶振电路以及Flash存储器、RAM存储器。扩展板的功能模块有串口、网口、JTAG、LCD等。系统硬件框图如图2所示。
图2 系统硬件结构
2.1 嵌入式微处理器S3C2440
由于图像数字采集和处理需要一款高性能的微处理器来实现 ,所以该设计采用ARM芯片作为微处理器,而ARM9微处理器就提供了高可靠、低功耗等诸多有点。设计采用的Samsung公司生产的S3C2440芯片,该芯片是一款基于ARM920T内核的16/32位的RISC嵌入式微处器,其主频高达400MHz。其内置了USB控制器提供了多USB的支持,2个USB Host和 1个USB Slave控制器,芯片集成了1个LCD控制器,16KB指令Cache(I-Cache)/16KB数据(D-Cache),3路UART,2路SPI,摄像头接口(支持最大4096[×]4096的输入,2048[×]2048的缩放输入),8路10位ADC和触摸屏接口[6]。
2.2 USB摄像头
本设计采用中星微公司生产的zc301p芯片的USB摄像头作为数字图像传感器设备,其不仅具有快速、高效、稳定、便捷等优点,而且S3C2440微处理器中集成了USB主控制器,可以很便捷的与USB接口的摄像头相接[7]。该64位的zc301p芯片可支持ARM9/11,且具有快速压缩引擎,2至8倍压缩比,MMX技术高速软解压等功能[8]。
3 系统软件设计
本次软件设计的核心采用的是性能稳定,提供强大图像处理功能ARM-Linux嵌入式操作系统为基础。软件设计部分包括Linux内核配置、Yaffs文件系统以及MJPEG-streamer视频服务器[9]。
3.1 USB摄像头驱动
本次软件设计采用Linux-2.6.30.4版本的内核,可以很好的支持zc301系列USB摄像头,所以只需对Linux内核进行简单配置即可实现USB摄像头的驱动功能。其配置单如下:
Device Drivers —>
Multimedia devices —>
***Multimedia core support***
<*>Video For Linux
[*] Enable Video For Linux API1(DEPERECATED)
[*] Video capture adapters —>
— Video capture adapters
<*> OV9650 Drivers for EmbedSky SKY2440/TQ2440 Board
[*] V4L USB Devices —>
— V4L USB Devices
<*> USB Video Class(UVC)
[*] UVC input events device support
<*> GSPCA based webcams —>
—GSPCA based webcams
[*] USB ZC0301[P] Image Processor and Control Chip support
3.2 Yaffs文件系统和MJPG-Streamer的移植
Flash的设计,选用Yaffs的文件系统该文件系统具有磨损平衡和掉电回复的健壮性,节约内存空间和缩短挂载时间,提高数据块查找,兼顾消耗平均和减少系统开销等优点,Yaffs包括:内部的实现层、管理层、Flash接口层三个层次,由于Yaffs很容易与嵌入式Linux相连接,所以更容易加到嵌入式Linux系统当中;其次还具有掉电保护的作用,对于一些数据重要数据起到了保护的作用,同时也对嵌入式Linux性能也起到了安全保护作用。Ysffs内部具有可优化系统的垃圾回收的计算方法和可提高系统运行速度的贪心算法以及能够实现安全按比例额分配的随机选择的计算方法,从而可以减少系统所运行的资源和将嵌入式Linux的成本按比例进行分配[10]。
M-JPEG视频流服务器 是将模拟信号转化为数字数据,是一种数字压缩格式。M-JPEG压缩技术在整个视频压缩当中具有划时代的意义,M-JPEG的压缩方式是基于帧内和帧独立,虽然不能与MPEG-4、H.263、H.264的传输量相比,但它在网络视频采集中任然广泛使用。
现将M-JPEG视频流服务器移植到目标板的具体过程如下:
1) 首先将mipg_streamer源码包复制到pc的linux系统下,然后解压源代码:#tar xvfz mipg_streamer.tar.gz –C 0pt/EmbedSky/apps/,然后进入到源代码当中,#cd /opt/EmbedSky/apps/mipg_streamer;
2) 将源码中所有的makefile文件的CC=Gcc改为CC=arm-linux-gcc,然后就可以编译其源代码,其中选择的交叉编译器为arm-linux-gcc4.3.3,现在可将所得的二进制文件在目标板运行;
3) 将mipeg-client目录下的bin/win32-upx/目录下的viewer.exe复制到wondows平台下,即可执行该程序,该程序是作为pc端通过网络查看摄像头采集图像的播放器;
4) 进入mipg_streamer目录下,使用#make编译后,会得到mipg_streamer和input*.so或output*.so的组件,然后将*.so文件复制到开发板的文件系统的lib/WebCam目录下,将 mipg_streamer文件复制到开发板的文件系统sbin/目录下,最后便可测试网络摄像机了。
网络视频采集的软件开发流程如图3所示:
图3 网络视频采集软件开发流程图
4 系统测试及结果
将开发板用串口线与PC相连,保持两者之间能正常通信,确定TQ2440开发板接好了摄像头,开发板所烧写的linux-2.6.30.4内核中已经拥有USB摄像头的驱动,并确保摄像头是接好的。在hypertrm.exe串口端口输入启动命令:mipg_streamer –i “/lib/input_uvc.so –yuv” –o “/lib/output_http.so –w 192.168.1.6: 8080”,其中192.168.1.6是服务器(TQ2440开发板)的ip,8080是打开的端口号。超级终端下可以出现以下信息:
MJPG-Streamer [493]: Using V4L2 device.:/dev/video0
MJPG-Streamer [493]: Desired resolution: 640[×]480
MJPG-Streamer [493]: Frames Per Second.: 5
MJPG-Streamer [493]: Format ……………: MJPEG
MJPG-Streamer [493]: Serving client:192.168.1.58
使用V4L2作为驱动程序,获取视频数据,默认的分辨率是:640[×]480,每秒传送的是5帧,图像格式是MJPEG,并显示了PC端打开了接收程序viewer.exe,然后再Ip栏目中输入开发板的Ip和打开的端口号,点击connect即可看到摄像头所采集的图像。
客户端测试结果如图4所示:
图4 测试结果
5 结束语
本次系统设计是基于高速ARM9(S3C2440)为核心,加上具有丰富网络功能的嵌入式Linux系统,并将视频流服务器MJPG-streamer的进行移植。该系统不仅实现了远程视频监控,而且系统开发过程结构清晰,性能稳定。在测试结果中,还可以改变分辨率的参数,实现清晰度不同的现实。最近几年,由于无线局域网(WLAN)的广泛使用,可以通过移植WIFI模块实现无线网络视频监控,用户可以通过手机或其它设备更加方便、快捷地实时监控。
参考文献:
[1] 刘竹林.基于ARM嵌入式视频采集处理系统设计[J].十堰职业技术学院学报,2011,24(6):106-108.
[2] 罗发秀,文环明,马晓红.基于ARM嵌入式图像采集系统设计[J].电脑开发与应用,2009,22(3):42-44.
[3] 胡书卫,陆培伦.一种基于Linux的嵌入式视频监控系统实现[J].安防系统设计,2009(1):38-40.
[4] 王波波,王铮,等.ARM9完全学习手册[M].北京:化学工业出版社,2012.
[5] 吴晴,周健.嵌入式图像采集系统的设计与实现[J].电子测量技术,2007,30(6):89-92.
[6] 于艳萍.朱晓智,王中训.基于ARM9和USB摄像头的网络视频采集系统设计[J].现代电子技术,2012,34(24):49-51.
[7] 冯丽芳,孙俊,周俊华,等.基于ARM9的网络视频监控系统实现[J].电力自动化设备,2006,10(26):95-97.
[8] 王俊,陈启美.基于WiFi-Mesh的视频监控系统在高速公路的应用[J].中国交通信息化,2011(7):74-75.
[9] 王旭辉,谢蕾.基于本体的多模式Web服务发现研究[J].计算机工程与设计,2009,30(16)3868-3871.
[10] Robert Love.linux Kenel Development[M].Person Education,2004:263-265.