`
duyouhua1214
  • 浏览: 236204 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux 下基于ARM920T 的USB 摄像头图像采集

 
阅读更多

 

摘要:随着USB摄像头的普及和基于ARM核的嵌入式芯片的快速发展,二者结合的便携性越来越受到人们欢迎,而嵌入式Linux的迅速发展更为二者的结合铺平了道路,本文介绍了基于ARM920T的嵌入式 Linux下利用USB摄像头采集图像的硬件、软件设计过程,最终实现了在目标板上图像的采集和显示。
关键词:ARM;USB摄像头;Video for Linux;图像采集;嵌入式Linux

1、基于ARM920T的USB摄像头图像采集硬件平台

                                 图(1) 硬件结构原理图

图(1)中各个主要模块基本组成描述如下:

① 微处理器(MPU):针对开发多媒体视频终端的需要,并考虑到系统外围设备的需求情况,本系统采用SAMSUNG公司内嵌ATM920T内核的三星S3C2410处理器。最高主频可达203MHz [1]

② SDRAM存储部分采用两颗Hynix公司的HY57V561620CT内存,大小为32M。

③ FLASH存储器采用SAMSUNG公司的K9F1208UOM Nand Flash,大小为64M。

④ USB集线器芯片:采用ALCOR MICRO公司的AU9254A21,可扩展为4个USB外围接口,分别连接图(1)中所示的四个外围设备。

⑤ LCD:采用Sharp公司的3.5寸LCD,分辨率为240×320。

 

2、基于ARM920T的USB摄像头图像采集的软件系统

由于嵌入式Linux具有成本低、代码开放、移植性好的特点,其用于嵌入式系统的优势和发展潜力是不容置疑的。软件部分的搭建主要依赖于以下三个部分:

① Boatloader:可以从SAMSUNG公司的官方网站获取,经过交叉编译生成映像文件,然后通过JTAG接口将映像烧写到目标板,实现引导程序的装载[2]

② Kernel:本系统采用Linux-2.4.18.tar.gz版本的内核。

③ 文件系统:由于本系统要进行动态的擦写FLASH,所以采用了支持此功能的YAFFS文件系统[3]

Linux平台的驱动一般分为字符设备、块设备和网络设备三种类型。而在Linux下要使系统所挂接的外部设备正常工作,必须加载相应的驱动程序。 Linux下对于一个硬件的驱动,可以有两种方式:一种是直接加载到系统的内核当中去,另一种是以模块方式进行加载,就是在编译内核的时候,同时生成可重定位的目标文件(.o文件)[4]。项目中所用的SBC2410X的实验板的USB主控器驱动程序模块为USB-OHCI- S3C2410.o。在Linux下要采集视频类数据,需要加载Video4Linux驱动模块Videodev.o。然后再加相应的摄像头驱动程序。在项目开发中,我们所使用的摄像头采用的USB控制器为ov511+,所对应的驱动程序模块为ov511.o。所以在系统启动时必须要通过如下命令:

 


>>insmod videodev.o

 

>>insmod usb-ohci-s3c2410.o

>>insmod ov511.o

来加载所需要的模块。通过开源项目spca5xx可以得到上边所需模块的全部源代码。上层软件部分我们参考了vidcat,vgrabber, w3cam,gqcam这几种软件的操作过程,重点参照了vidcat进行了V4L编程,使用了v4l.c和vidcat.c 中的函数,经过交叉编译,在实验板上实现了实时图像采集的目的。

    在图(2)中显示了各个模块之间的关系,其中从上到下的箭头流向表示通过各个模块启动和配置摄像头,从下到上的箭头流向表示由摄像头所采集的图像数据经各个模块采集到用户指定的位置。

 

3、在Linux下采集并显示USB摄像头数据

Linux下摄像头的驱动程序是以81为主设备号,在编写应用程序的时候,要通过打开一个具有该主设备号的设备文件来建立与设备驱动程序的通信,我们所使用的Linux没有该文件,所以需要手工创建,并建立其软连接,因为要对文件进行操作,所以要改变其访问权限为666。我们用到的 videodev.o模块即为视频部分的标准Video for Linux (简称V4L)。这个标准定义了一套接口,内核、驱动、应用程序以这个接口为标准进行通信。

 

3.1图像数据的采集过程:

第一步:要打开摄像头设备,而在Linux下可以通过系统的设备文件来访问设备,在前面我们创建并建立了摄像头的设备文件,所以文件描述符(dev)可以如下方法获取:

        while (max_try) {

dev = open (device, O_RDWR);

               if (dev == -1) {

                      if (!--max_try) {

                             fprintf (stderr, "Can't open device %s\n", device);

                             return (1);}    /*max_try为试图打开设备的最多次数*/

                      sleep (1);

               } else { break; }}

第二步:进行访问摄像头设备的状态信息。

首先我们可以在kernel的源代码中找到头文件videodev.h,这个头文件定义了我们要编写的应用程序的所有数据结构和函数。当然我们先要获得摄像头的信息,可以通过头文件中的video_capability结构来了解摄像头的性能。其函数接口是int v4l_check_size (int fd, int *width, int *height),读出其中的单元可按如下方法,宏VIDIOCGCAP定义为 _IOR('v',1,struct video_capability)。

struct video_capability vid_caps;

if (ioctl (fd, VIDIOCGCAP, &vid_caps) == -1) {

            perror ("ioctl (VIDIOCGCAP)"); return -1;}

然后通过访问结构体vid_caps就可以读出摄像头可拍摄的图片类型、图片的最大最小高度和宽度。

第三步通过控制摄像头来采集图象数据。

实现函数为image = get_image (dev, width, height, palette, &size),通过该函数可以将设备文件中的图象数据的信息读出来,该函数的返回值image为图片要存储的格式,例如png、jpeg等。但这样必须首先申请一块足够大的内存空间,我们是这样完成的:

map = malloc (width * height * bytes);

               len = read (dev, map, width * height * bytes);

               if (len <= 0) { free (map); return (NULL); }

这样采集到的图像数据就会先存到所分配到的内存空间中,然后进行下一步的象素和图片格式存储处理。

第四步:按照预定的象素值和图片格式来存储图像。

在驱动程序向应用程序传递图像数据是一个拷贝过程,所以应用程序在采集图片数据时,先将驱动程序中图片缓冲区中的数据拷贝到应用程序中,然后再控制和处理图片数据。

if (palette == VIDEO_PALETTE_YUV420P) {

                      convmap = malloc ( width * height * bytes );

                      v4l_yuv420p2rgb (convmap, map, width, height, bytes * 8);

                      memcpy (map, convmap, (size_t) width * height * bytes);

                      free (convmap); }

这就是拷贝的过程,memcpy()为拷贝函数,v4l_yuv420p2rgb()函数用来将原生图片转换为RGB格式的图像信息。然后通过前边image的返回值来分别调用函数put_image_png,put_image_jpeg来生成相应格式的图像信息。

 

3.2 通过QT编译的图片查看器查看摄像头采集的图像。

QT目前是在嵌入式Linux领域中比较流行的图形开发工具,在我们的文件系统中,采用了基于QT的图形界面Qtopia,以下是实现调用图像信息 的QT语句。第一句表示将图片的路径以及图片的名字传给pm1,然后通过Qlabel类的pl传出图片给图片查看器,从而实现了图像信息的显示。

QPixmap pm1("picture_path/picture_name");

Qlabel p1;

p1—>SetPixmap(pm1);

在采集的图像数据中,可以自定义所存储的图片格式,大小及其像素,方便迅速,而Qtopia是基于QT的比较成熟的嵌入式图形界面,利用其来显示我们所采集的图像数据效果良好。

 

4、结束语

本文详细介绍了基于ARM920T的嵌入式Linux下的USB摄像头图像采集的硬件、软件构建过程,可以灵活应用于基于嵌入式的各种电子产品中。由于所采用的软件全部是开放源码而且免费获得,所以对于需要便携好而又要有较高的数据处理能力且成本要求严格的方面尤其适合。

本文作者创新点:通用串行总线是一种非常实用的通信接口,其应用日益广泛,而Linux+ARM9下USB设备的应用也逐渐完善;并且采用了具有永久性存储功能的Yaffs文件系统,为客户进行实时处理图像提供了方便;同时使用QT编译的图像采集界面使图像数据的采集更加人性化,这几方面的结合使其必有很广的市场前景。

 

来源:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=73929

 

分享到:
评论

相关推荐

    Linux下基于ARM920T的USB摄像头图像采集.pdf

    Linux下基于ARM920T的USB摄像头图像采集 本文主要介绍了利用ARM920T处理器和USB摄像头在Linux下采集图像的方法。首先,文章介绍了ARM920T处理器的硬件结构和软件设计过程,然后详细介绍了USB摄像头的硬件设计和软件...

    WinCE下基于ARM的USB摄像头图像采集

    在探讨“WinCE下基于ARM的USB摄像头图像采集”这一主题时,我们深入解析了在Windows CE平台上构建图像采集系统的技术细节与创新方法。本文旨在填补当前研究领域中,相较于Linux平台,对Windows CE环境下图像采集系统...

    USB摄像头图像采集

    Linux下基于ARM920T的USB摄像头图像采集 嵌入式系统开发与应用

    基于ARM920T的嵌入式图像处理平台搭建及应用.pdf

    这个核心板内置了ARM920T处理器,配合中星微ZC301P摄像头,通过USB接口采集实时图像数据。此外,系统还配备了显示模块和普通的输入输出模块,支持实时图像处理和显示。 嵌入式图像处理软件平台的搭建涉及到OpenCV和...

    基于ARM和Linux的图像采集与传输系

    ### 基于ARM和Linux的图像采集与传输系统的关键知识点 #### 1. 引言 - **时代背景与市场需求**:随着多媒体技术和网络技术的快速发展,对于图像采集的需求日益增长,特别是在远距离和多点系统中。传统基于PC机平台...

    基于arm9的嵌入式图像采集系统的设计

    具体来说,作者详细介绍了如何利用ARM9微处理器及其硬件平台,结合Video for Linux (V4L)接口,实现对USB摄像头图像的实时采集与显示。V4L是Linux操作系统中专门用于处理视频设备(如摄像头)输入输出的内核驱动框架...

    基于ARM Linux的图像采集与蓝牙传输 嵌入式Linux系统具有可移植性好 .doc

    总结来说,基于ARM Linux的图像采集与蓝牙传输系统结合了嵌入式Linux的优势,利用USB摄像头进行实时图像采集,并通过蓝牙技术实现图像的无线传输。这种系统在物联网、智能家居和监控领域有广阔的应用前景。通过不断...

    基于ARM9的嵌入式Linux图像采集系统设计.pdf

    【基于ARM9的嵌入式Linux图像采集系统设计】是一个关于构建嵌入式系统的主题,主要涉及以下几个关键知识点: 1. **嵌入式系统**:嵌入式系统是指集成了微处理器并针对特定功能设计的计算机系统,常用于工业控制、...

    基于ARM嵌入式的图像采集与显示系统设计.pdf

    图像采集部分利用USB摄像头,通过ZC301芯片接口,将捕获的图像数据传输到Linux系统进行进一步处理。硬件系统结构简洁明了,包括处理器、USB接口、以及用于显示的LCD屏幕。 软件方面,嵌入式软件系统由引导程序、...

    基于S3C2410平台与嵌入式Linux的图像采集应用.pdf

    【基于S3C2410平台与嵌入式Linux的图像采集应用】 本文主要讨论的是如何在S3C2410处理器平台上利用嵌入式Linux系统进行图像采集的应用。S3C2410是由Samsung公司设计的一款基于ARM920T处理器核的32位微控制器,其...

    基于S3C2440+ARM+Linux图像采集系统的研究

    S3C2440是一款基于ARM920T内核的高性能嵌入式处理器,具备丰富的外围设备接口,如USB、SDRAM控制器、NAND Flash控制器等。该处理器由于其高性价比、低功耗特性,在嵌入式系统开发中被广泛应用。本研究选用S3C2440...

    基于ARM的图像采集与显示系统设计.pdf

    【USB摄像头图像采集】 Omnivision公司的OV511是一款常见的USB摄像头控制芯片,它可以方便地与嵌入式系统连接,实现图像数据的采集。在S3C2410平台上,通过Video4Linux内核API接口,可以编写用户空间程序来控制OV511...

    基于S3C2440 ARM Linux图像采集系统的研究

    ### 基于S3C2440 ARM Linux图像采集系统的研究 #### 概述 随着信息技术的快速发展,计算机产业进入了所谓的“后PC时代”。在这个时代,传统的视频采集系统通常由CCD摄像头和采集卡组成,虽然功能全面,但价格昂贵...

    基于ARM9的嵌入式视频采集系统设计.pdf

    本文主要探讨了一种基于ARM9处理器的嵌入式视频采集系统设计,该系统采用Samsung公司的S3C2440微处理器为核心,结合Linux 2.6.31操作系统,利用V4L2(Video for Linux Two)接口实现USB摄像头的视频数据采集。...

    基于ARM和Linux的视频采集系统研究与开发.pdf

    综上所述,基于ARM和Linux的视频采集系统结合了硬件的高效性和软件的灵活性,为农业以及其他领域的图像采集提供了实用且经济的解决方案。通过持续的研究和优化,这样的系统有望在物联网、智能监控等多个领域得到广泛...

    农业环境多路图像采集系统设计与实现——基于ARM和Linux.pdf

    《农业环境多路图像采集系统设计与实现——基于ARM和Linux》 农业环境多路图像采集系统是一种在农业监测和管理中广泛应用的技术,它利用嵌入式设备和操作系统,如ARM处理器和Linux系统,实现对农业环境的实时、高效...

Global site tag (gtag.js) - Google Analytics