摘要:视频图象采集及处理技术在远程视频监控和可视电话中有着广泛的应用前景,驱动视频采集设备和获取视频数据并进行相应的处理,是实现这种应用的基础。针对这种应用,建立了一个基于嵌入式Linux和PXA270微处理器的视频采集与传输系统,借助Video4Linux实现USB摄像头视频数据采集,采集的视频数据经JPEG压缩后,在PXA270为核心的系统控制下通过以太网进行传输,并通过重新编译移植Webcam_server应用程序实现了实时视频采集。实验结果表明,该系统动态刷新良好,具有一定的实用性。
关键词:PXA270;嵌入式Linux;USB摄像头;图象采集与传输
Abstract:Videoimageacquisitionandprocessingtechnologyhadabroadapplicationprospectinthelongdistancesupervisorycontrolwithvideoandvideotelephone.Drivingvideoacquisitionequipmentsandgainingvideodatatoprocessaccordinglyarethebasisofrealizationtheapplications.Aimingattheapplications,designedavideoacquisitionandtransmissionsystembasedonPXA270withembeddedLinux.ThesystemusedUSBcameracombinedwithVideo4Linuxtoimplementvideodataacquisition,thenwereencodedinJPEG,andsentbyEthernetunderthecontrolofthePXA270.Intheend,compilingandtransplantingthewebcamserverapplication,actualizedreal-timevideoimageacquisition.Theexperimentalresultsshowsthatthesystemcanberefresheddynamicallybetter,anditisveryusefulandpractical.
Keywords:PXA270;embeddedLinux;USBcamera;imageacquisitionandtransmission
1序言
视频图象可以对客观事物进行形象、生动的描述,它是一种直观而具体的信息抒发方式,也是一种重要的信息载体。而随着嵌入式系统的不断发展,它所涉及的领域包括工业控制、网络通讯、军事国防、航空航天等,我们所熟悉的电子产品几乎都可以找到嵌入式系统的影子。借助嵌入式微处理器建立的视频图象采集系统[1]具有容积小、成本低、稳定性高等优点,在智能交通、计算机视觉、通信等领域得到了广泛应用。2系统平台上的硬件系统与软件系统
本系统的硬件平台采用Intel公司的PXA270[2][3]微处理器。该处理器是Intel公司于2004年4月发布的面向联通电话和掌上笔记本需求,基于Xscal构架的PXA2727x系列处理器,最高显存可达624MHz。PXA270最引人注目的是加入了无线多媒体扩充技术(WirelessMMX),大大提高了多媒体处理能力;同时PXA270还加入了IntelSpeedStep动态电源管理技术,实现嵌入式设备的智能电源管理。据悉,PXA270具有丰富的扩充插口:SD/SDIO/MMC、CF/PCMCIA、CMOS/CCDCAMERA、USB2.0、KEYBOARD等。
平台的软件系统采用内核为Linux-2.6.18的嵌入式Linux操作系统。嵌入式Linux操作系统具有相当多的优点,它的内核稳定、功能强悍、支持多种硬件平台、源代码完全开放,可裁减和低成本的特点十分适宜于嵌入式应用,但是Linux本身直接提供完整的TCP/IP合同,可十分便捷地进行网路应用。3基于Video4Linux的视频图象采集
在Linux下,设备驱动程序可以看成Linux内核与外部设备之间的插口。设备驱动程序向应用程序屏蔽了硬件具体实现细节,致使应用程序可以像操作普通文件一样来操作外部设备。在Linux下,视频采集设备的正常使用依赖于Video4Linux标准的支持。
Video4Linux(简称V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供了一系列插口函数查看系统版本linux,这种视频设备包括TV卡、视频捕捉卡和USB摄像头等。视频采集的通常流程为:(1)打开视频设备;(2)读取设备信息;(3)进行视频采集;
(4)对采集的视频数据进行处理和显示;(5)关掉视频设备。
视频采集主要有两种方式:(1)直接从设备读取;(2)显存映射。本系统采用第二种方式进行视频采集,其优点是当采用显存映射时,直接用mmap()系统调用促使进程之间通过映射同一个普通文件实现共享显存。普通文件被映射到进程地址空间后,进程可以像访问普通显存一样对文件进行访问,毋须再调用read(),write()等操作。并且采用共享显存通讯的一个显而易见的用处是效率高,由于进程可以直接读写显存,而不须要任何数据的拷贝。
采用显存映射实现视频采集的部份源代码如下:
(1)调用VIDIOCGBUF获取映射的buffer信息ioctl(vd->fd,VIDIOCGBUF,&(vd->mbuf))
(2)将mmap与video_mbuf绑定intv4l_mmap_init(v4l_device*vd){if(v4l_get_mbuf(vd)map=mmap(0,vd->mbuf.size,PORT_READ|PORT_WRITE,
MAP_SHARED,vd->fd))(3)进行图象采集前的设置intv4l_grab_init(v4l_device*vd)
{vd->mmap.width=640;//设置图象窗口vd->mmap.height=480;//窗口大小为640×480vd->mmap.format=VEDIO_PALETTE_YUV420P;//取样格式为YUV420420P…}
(4)调用VIDIOCMCAPTURE开始一帧的截取ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->mmap));
(5)调用VIDIOSYNC等待一帧截取结束
if(ioctl(vd->fd,VIDIOSYNC,&frame)该函数成功返回则表示一帧采集已完成,采集到的图象数据放在起始地址为vd->map+vd->mbuf.offsets[vd->frame]的显存区中,读取该显存区中的数据便可得到图象数据。接着可以做下一次的VIDIOCMCAPTURE。
使用V4L进行图象采集时,可采用“不间断采集”的方式推动采集过程。驱动程序要提供起码两帧图象大小的缓冲空间,在一帧缓冲完成以后,不管此时应用程序有无提出新的VIDIOCMCAPTURE恳求,驱动都将第二帧图象覆盖保存至另一个缓冲内,两个缓冲轮流使用,不丢任何帧。
4视频图象压缩与传输
通过以上采集程序获得的图象数据为原始数据,可以按照图象采集格式将图象信息储存成文件,通过网路用webserver传输到服务器端刷新显示。倘若不对图象进行压缩,则图象数据较大,不易于在网路上传输,这就要求系统首先对原始视频图象数据进行压缩处理,而通用网路浏览器通常支持BMP、JPG、GIF三种网路图片格式,因而本系统采用JPEG压缩方法。
JPEG是JointPhotographicExpertsGroup(联合图象专家组)的简写,文件后缀名为“.jpg”或“.jpeg”,是最常用的图象文件格式,是由一个软件开发联合会组织制订,是一种有损压缩方法,才能将图象压缩到很小的存储空间。JPEG格式是目前网路上最流行的图象格式,JPEG压缩技术非常先进,它用有损压缩方法除去冗余的图象数据,在获得较高的压缩率的同时能突显非常丰富生动的图象,特别适宜于视频网路传输。
Linux中没有jpeg函数库,须要下载jpegsrc.v6b.tar.gz后,在/usr/src解压安装:cdjpeg-6b./configureMakeMakeinstall
这样,Linux就支持jpeg函数库了,在编译器编译联接时带有-ljpeg选项才能联接上jpeg函数库了。
借助下边函数将采集到的YUV420420P的原始图象数据直接压缩成JPEG格式进行传输:
intyuv420p_to_jpeg(char**jpeg_data,unsignedchar*image,intwidth,intheight,intquality),其中,jpeg_data指向压缩图象数据表针的表针,image为采集图象原始数据,width为宽度,height为高度,quality为压缩质量,函数的返回值为形成压缩图象数据的厚度。
如今企事业的业务大多通过Web技术[4]来布署实现。通过Web方法主要有以下几点优势:(1)可以简化界面的工作基于pc104平台的嵌入式linux设计,直接使用浏览器界面,而浏览器已是计算机的必备软件了。
(2)很容易实现超出局域网范围的远程控制,并可以实现远程手动系统升级。(3)应用层程序开发快捷,因为Web标准的统一,促使开发是跨平台的。而嵌入式系统性能的提高也促使Web服务步入嵌入式领域成为可能。Web服务的优势也同样适用于嵌入式系统。
webserver又被称为HTTPServer,它是对HTTP合同服务器端功能的实现。HTTP合同是构架在TCP/IP合同上的应用级合同,其目的是便捷和加速对分布式协同工作的超媒体信息系统的访问。HTTP合同通过统一资源定位符(UniversalResourceLocation,URL)来定位分布式的超媒体信息。URL通过“通信合同+网路地址”字符串来惟一标示信息位置。如:就是一个URL。这个URL明晰给出使用的合同是:HTTP合同。
Linux系统是通过提供套接字(socket)来进行网路编程的。通过webserver进行网路传输时涉及到的套插口操作函数[5]主要有:socket()函数,主要功能是创建指定类型的套插口并返回套插口描述符;bind()函数,主要功能是使套插口与IP地址和端标语绑定;connect()函数,主要功能是拿来与远端服务器构建联接;listen()函数,主要功能是当socket与某一端口捆绑之后,就须要窃听该端口,便于对抵达的服务恳求加以处理;accept()函数,主要功能是接受联接队列里的服务恳求,并返回一个新的socket描述符,来供这个新联接使用。须要注意的是,服务器并不是通过窃听端口来与顾客联接并通讯,而是形成一个新的套插口与顾客通讯。诸如webserver在80号端口窃听,当有顾客向80号端口发出联接恳求时,服务器将接受恳求且由服务器进程派生出子进程和新的套插口(由accept()的返回值指向)来与顾客联接并通讯。
将采集格式为YUV420420P的原始视频图象数据压缩成JPEG格式,并当顾客端有联接时,通过子进程向顾客端发送JPEG图象数据:if((size=(yuv420p_to_jpeg(&imagebmp,imageptr,640,480,20)))}
if(!fork())
if(revbuf[5]=='')
send(nsockfd,imagebmp,size,0);
这样,当系统运行时,通过设置PC机的IP地址(与系统IP地址在同一网关内),在PC机的IE浏览器内输入以下IP地址::81/,将见到图象格式为JPEG的图片。通过刷新,可以更新图象。5播放视频流
为了播放实时视频,可以通过在目标板的ARMLinux系统中移植一个视频服务器的应用程序来实现。Webcam[6][7]是一个比较常用的的视频应用程序,通过网路下载webcam_server的Linux版本:webcam_server-0.50.tar.gz,它是基于GNU构架之下的,完全免费,源码开放。解压后执行./configure,生成Makefile文件。更改当前目录和src目录下的Makefile的CC为/usr/local/arm/3.4.3/bin/arm-linux-gcc,执行make,形成webcam_server可执行文件,把此应用程序加载到270开发板上就可以使用了。
假如远端顾客端是Windows操作系统,下载Activewebcam的顾客端,并安装。设置好PC机的IP地址(与系统IP地址在同一网关内)后,启动Activewebcam。选择Tools—>CreateWebPage新建一个网页浏览页,并选中settings,对视频浏览的相关参数进行设置。具体设置为:VideoDevice选中NetworkIPCamera;PreviewFrameRate:8framespersec;CameraModel:ActiveWebCamHTTPServer;IPAdressorURL:192.168.0.232(即开发板的IP地址);Port:8888。整个设置完后,就可以搜索摄像头,找到摄像头后,才能在相应的PC机上动态显示摄像头采集的图象信息,如图1所示,画面清晰,图象取样大小为320×240。点击记录按键,能够将采集到的动态视频以.AWLive的文件格式保存到
C:/ProgramFiles/ActiveWebCam/Gallery目录下,文件类型为:ActiveWebCamVideoRecord,双击该文件能进行手动播放。
假如远端顾客端是Linux操作系统,可以使用javaapplet进行视频流播放,须要在Linux主机上安装jdk环境,可从Sun公司的Java网站上下载JDK1.6的Linux版本:jdk-6u11-linux-i586-rpm.bin,先为该文件降低可执行权限:chmoda+xjdk-6u11-linux-i586-rpm.bin,之后对该文件进行自解压:./jdk-6u11-linux-i586-rpm.bin,将手动进行安装,在/usr/java目录下生成了java环境,设定相关的环境变量:exportPATH=/usr/java/jdk1.6.0_11/bin:$PATH,为了让浏览器找到这个JavaPlug-in,必须将环境参数NPX_PLUGIN_PATH指到文件javaplugin.so所在的目录:exportNPX_PLUGIN_PATH=/usr/java/jdk1.6.0_11/jre/plugin/i386/ns7。设置完后,可以使用javaapplet程序播放视频流,具体命令为:java–classpathapplet.jar:/usr/java/jdk1.6.0_11/lib/tool.jar
WebCam192.168.0.2328888。这时,在Linux主机上可以获取usbcamera采集的视频流基于pc104平台的嵌入式linux设计,并形成动态链接的画面,如图2所示,画面清晰,图象取样大小为320×240,速度能达到8帧/秒,动态刷新疗效良好。6结束语
本文讨论了基于PXA270和嵌入式Linux操作系统下Web服务器中视频图片压缩及其传输的实现方式,并通过移植Webcam_server及其相应软件,顾客端可以完成对远程的视频图象的采集和动态显示。因为该系统的核心工作采用高性能嵌入式微处理器完成suse linux 下载,因而该系统具有结构简单、性能稳定、成本低廉等优点。该技术具有通用性,应用范围相当广,可以作为简单的安全监控、远程现场监控等应用,同时,在机器人监控系统、视频电话、远程教学等应用中也有一定的应用前景。本文创新点:1对原始采集的视频图象讯号进行JPEG压缩后,自主设计Webserver对其进行网路传输;2借助Webcam_server分别在Linux和Windows操作系统下进行网路实时视频采集与传输。
参考文献
[1]王培珍,徐俊生.基于ARM9的嵌入式Linux图象采集系统设计[J].中国制造业信息化,2007,10:85-88.
[2]李瑞祥.基于PXA270的视频监控系统的设计与开发[J].光学仪器,2008,3:42-45.
[3]石秀民,魏洪兴.嵌入式系统原理与应用——基于Xscale®与Linux[M].上海:上海民航航天学院出版社.2007.
[4]时雨露,潘淑文,寿国础.Linux嵌入式WEB系统研究及实现[J].微计算机信息,2007,03Z:3-5.
[5]陈学峰,柴俊霞.Linux下基于Socket的网路编程[J].徐州煤焦师范大学学报,2004,3:60-63.
[6]周广荣.基于ARM视频采集系统的设计与实现.上海海事学院.硕士学位论文.2007:68-71.
[7]金福辉.基于IntelXscale270平台与嵌入式Linux的图象采集系统设计.四川学院.硕士学位论文.2007:53-54.