基于嵌入式Linux的视频图像采集与传输摘要:视频图像采集及处理技术在远程视频监控和可视电话中有着广泛的应用前景,驱动视频采集设备和获取视频数据并进行相应的处理,是实现这些应用的基础。
针对这些应用,构建了一个基于嵌入式Linux和PXA270微处理器的视频采集与传输系统,利用Video4Linux实现USB摄像头视频数据采集,采集的视频数据经JPEG压缩后,在PXA270为核心的系统控制下通过以太网进行传输,并通过重新编译移植Webcam_server应用程序实现了实时视频采集。
实验结果表明,该系统动态刷新良好,具有一定的实用性。
关键词: PXA270;嵌入式Linux;USB摄像头;图像采集与传输Abstract:Video image acquisition and processing technology had a broad application prospect in the long distance supervisory control with video and video telephone. Driving video acquisition equipments and gaining video data to process accordingly are the basis of realization the applications. Aiming at the applications, designed a video acquisition and transmission system based on PXA270 with embedded Linux. The system used USB camera combined with Video4Linux to implement video data acquisition, then were encoded in JPEG, and sent by Ethernet under the control of the PXA270. In theend, compiling and transplanting the webcam server application, actualized real-time video image acquisition. The experimental results shows that the system can be refreshed dynamically better, and it is very useful and practical. Keywords:PXA270; embedded Linux; USB camera; image acquisition and transmission1 引言视频图像可以对客观事物进行形象、生动的描述,它是一种直观而具体的信息表达形式,也是一种重要的信息载体。
而随着嵌入式系统的不断发展,它所涉及的领域包括工业控制、网络通信、军事国防、航空航天等,我们所熟悉的电子产品几乎都可以找到嵌入式系统的影子。
利用嵌入式微处理器构建的视频图像采集系统[1]具有体积小、成本低、稳定性高等优点,在智能交通、计算机视觉、通信等领域得到了广泛应用。
2 系统平台上的硬件系统与软件系统本系统的硬件平台采用Intel公司的PXA270[2] [3]微处理器。
该处理器是Intel公司于2004年4月发布的面向移动电话和掌上电脑需求,基于Xscal架构的PXA27x系列处理器,最高主频可达624MHz。
PXA270最引人注目的是加入了无线多媒体扩展技术(Wireless MMX),大大提升了多媒体处理能力;同时PXA270还加入了Intel SpeedStep 动态电源管理技术,实现嵌入式设备的智能电源管理。
此外,PXA270具有丰富的扩展接口:SD/SDIO/MMC、CF/PCMCIA、CMOS/CCD CAMERA、USB2.0、KEYBOARD等。
平台的软件系统采用内核为Linux-2.6.18的嵌入式Linux操作系统。
嵌入式Linux操作系统具有相当多的优点,它的内核稳定、功能强大、支持多种硬件平台、源代码完全开放,可裁减和低成本的特性非常适合于嵌入式应用,并且Linux本身直接提供完整的TCP/IP协议,可非常方便地进行网络应用。
3 基于Video4Linux的视频图像采集在Linux 下,设备驱动程序可以看成Linux内核与外部设备之间的接口。
设备驱动程序向应用程序屏蔽了硬件具体实现细节,使得应用程序可以像操作普通文件一样来操作外部设备。
在Linux下,视频采集设备的正常使用依赖于Video4Linux标准的支持。
Video4Linux(简称V4L)是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绑定int v4l_mmap_init(v4l_device *vd) { if(v4l_get_mbuf(vd)<0) return -1;if((vd->map=mmap(0,vd->mbuf.size,PORT_READ|POR T_WRITE, MAP_SHARED,vd->fd))<0) return -1; return 0;}(3)进行图像采集前的设置int v4l_grab_init(v4l_device *vd) { vd->mmap.width=640; //设置图像窗口vd->mmap.height=480; //窗口大小为640?480vd->mmap.format=VEDIO_PALETTE_YUV420P; //采样格式为YUV420P …}(4)调用VIDIOCMCAPTURE开始一帧的截取ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->mmap)); (5)调用VIDIOSYNC等待一帧截取结束if(ioctl(vd->fd, VIDIOSYNC,&frame)<0) {perror(v4l_sync);return -1;} 该函数成功返回则表示一帧采集已完成,采集到的图像数据放到起始地址为vd->map+vd->mbuf.offsets[vd->frame]的内存区中,读取该内存区中的数据便可得到图像数据。
接着可以做下一次的VIDIOCMCAPTURE。
使用V4L进行图像采集时,可采用“不间断采集”的方法加快采集过程。
驱动程序要提供至少两帧图像大小的缓冲空间,在一帧缓冲完成之后,不管此时应用程序有无提出新的VIDIOCMCAPTURE请求,驱动都将第二帧图像覆盖保存至另一个缓冲内,两个缓冲轮流使用,不丢任何帧。
4 视频图像压缩与传输通过以上采集程序获得的图像数据为原始数据,可以根据图像采集格式将图像信息存储成文件,通过网络用webserver传输到服务器端刷新显示。
如果不对图像进行压缩,则图像数据较大,不便于在网络上传输,这就要求系统首先对原始视频图像数据进行压缩处理,而通用网络浏览器一般支持BMP、JPG、GIF三种网络图片格式,因此本系统采用JPEG压缩方式。
JPEG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后缀名为“.jpg”或“.jpeg”,是最常用的图像文件格式,是由一个软件开发联合会组织制定,是一种有损压缩方式,能够将图像压缩到很小的储存空间。
JPEG格式是目前网络上最流行的图像格式,JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得较高的压缩率的同时能展现十分丰富生动的图像,非常适合于视频网络传输。
Linux中没有jpeg函数库,需要下载jpegsrc.v6b.tar.gz 后,在/usr/src解压安装:cd jpeg-6b ./configure Make Make install 这样,Linux就支持jpeg函数库了,在编译器编译连接时带有-l jpeg选项就能连接上jpeg函数库了。
利用下面函数将采集到的YUV420P的原始图像数据直接压缩成JPEG格式进行传输:int yuv420p_to_jpeg(char **jpeg_data, unsigned char *image, int width, int height,int quality),其中,jpeg_data 指向压缩图像数据指针的指针,image为采集图像原始数据,width为长度,height为高度,quality为压缩质量,函数的返回值为产生压缩图像数据的长度。
现在企事业的业务大多通过Web技术[4]来部署实现。
通过Web方式主要有以下几点优势:(1)可以简化界面的工作,直接使用浏览器界面,而浏览器已是计算机的必备软件了。
(2)很容易实现超出局域网范围的远程控制,并可以实现远程自动系统升级。
(3)应用层程序开发快捷,由于Web标准的统一,使得开发是跨平台的。
而嵌入式系统性能的增强也使得Web 服务进入嵌入式领域成为可能。
Web服务的优势也同样适用于嵌入式系统。
webserver又被称为HTTP Server,它是对HTTP协议服务器端功能的实现。
HTTP协议是架构在TCP/IP协议上的应用级协议,其目的是方便和加速对分布式协同工作的超媒体信息系统的访问。