基于嵌入式Linux的视频图像采集与传输

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于嵌入式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 the

end, 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?480

vd->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进行图像采集时,可

相关文档
最新文档