- 浏览: 226157 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wahahachuang8:
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的 ...
服务器推送技术 java -
mahuanjian:
[flash=200,200][/flash]
服务器推送技术 java -
wenjundiandian:
下面有网页编辑器的话还是会被隐藏.
ext中消息框、提示框、确认框显示在最前面的解决方法 -
天塔上的猫:
/**
* JAVA常见的权限控制算法的实现
*
* ...
JAVA常见的权限控制算法的实现
摘要:随着USB摄像头的普及和基于ARM核的嵌入式芯片的快速发展,二者结合的便携性越来越受到人们欢迎,而嵌入式Linux的迅速发展更为二者的结合铺平了道路,本文介绍了基于ARM920T的嵌入式 Linux下利用USB摄像头采集图像的硬件、软件设计过程,最终实现了在目标板上图像的采集和显示。 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
关键词:ARM;USB摄像头;Video for Linux;图像采集;嵌入式Linux
发表评论
-
Linux下获取IP、MAC、网关、掩码的shell脚本
2012-07-05 13:45 1881Mask:ifconfig |grep inet| sed - ... -
输入法
2012-01-04 18:00 0http://civilnet.cn/syszux/syszu ... -
tar压缩解压
2012-01-01 11:04 1006tar -c: 建立压缩档案-x ... -
Linux GUI 技术网
2012-01-01 10:32 676http://www.linuxgraphics.cn/hom ... -
Linux常用命令大全
2012-01-01 10:27 592http://www.emlinix.com/linux-zh ... -
嵌入式Linux应用程序自动载入驱动模块方法
2012-01-01 10:22 1242英利公司推出的嵌入式L ... -
MP4音频解码信息
2011-12-31 11:48 0http://blog.chinaunix.net/space ... -
ffmpeg库音频解码示例
2011-12-31 11:45 0一个英文版的例子(有讲解)ffmpeg的一些使用例子mpeg ... -
基于Bootloader的可靠嵌入式软件远程更新机制
2011-12-31 11:42 0嵌入式软件的远程自动 ... -
Double转STRING
2011-12-31 11:40 0double x=1.23456789; ch ... -
linux下检测网卡与网线连通状态
2011-12-31 11:32 0Linux下检测网卡与网线连接状态,使用ioctl向socke ... -
去除10分钟左右自动关闭LCD显示
2012-01-04 09:50 511注释掉drivers\char\vt.c的blank_scre ... -
linux logo 左上角有黑块解决办法
2012-01-04 09:50 892http://www.unixresources.net/li ... -
linux下gprs ppp 拨号的注意事项
2011-12-31 11:21 0折腾了几天,终于在linux下拨号成功了! 注意事项: 1 ... -
GPRS模块在Linux平台上ppp拨号上网总结与心得
2011-12-31 11:09 0由于一个嵌入式平台 ... -
Linux下检测U盘是否插入
2011-12-31 11:07 0Linux下检测U盘是否插入Linux的文件系统是异步的,也就 ... -
Linux下应用程序如何取得U盘插拔消息
2011-12-31 11:06 0Linux 2.6内核版本以后,对于/dev目录的管理采用了新 ... -
在嵌入式Linux下GPRS上网方案
2011-12-31 11:02 0在嵌入式Linux下GPRS上网方案 硬/软件环境 ... -
FFMpeg框架代码阅读
2011-12-31 10:50 01. 简介FFmpeg是一个集录制、转换、音/视频编码解码 ... -
关于ffmpeg的安装及其编译
2011-12-31 10:48 0所需软件包:nasm-0.98.39-1.i386.r ...
相关推荐
Linux下基于ARM920T的USB摄像头图像采集.pdf
WinCE下基于ARM的USB摄像头图像采集
Linux下基于ARM920T的USB摄像头图像采集 嵌入式系统开发与应用
支持x86和ARM平台的USB摄像头视频采集,根据自己的摄像头设备节点、分辨率修改代码,运行时需要一些库的支持,同时需要注意如果运行缺少某些库时需要软链接进入相应的目录中。
linux下基于V4L2/Qt的usb摄像头采集显示程序 Qt工程, 测试使用的是Qt5.6.0 可以正常使用, 采集usb摄像头的图像并显示, 可以正常配置摄像头像素
亲身实践有效,一步步的操作详细明了,对与做Linux下USB摄像头视频采集有一定作用
usb摄像头采集图像,用ARM9无线传输
基于ARM920T的嵌入式图像处理平台搭建及应用.pdf
基于ARM920T的IDE硬盘接口设计
基于ARM920T的FLASH的读写 基于ARM920T的FLASH的读写
基于Arm920T的嵌入式Linux系统移植,徐艳圆,,随着计算机技术的发展,嵌入式系统成为当前最热门最有发展前途的IT应用领域之一。而将嵌入式操作系统移植到嵌入式平台并开发其设�
基于ARM9的嵌入式图像采集系统的设计
ARM920T Technical Reference Manual 这是一本全英文的ARM920T的手册
针对这些应用,构建了一个基于嵌入式 Linux和 PXA270微处理器的视频采集与传输系统,利用 Video4Linux实现 USB摄像头视频数据采集,采集的视频数据经 JPEG压缩后,在 PXA270为核心的系统控制下通过以太网进行传输,...
一篇论文 基于ARM920T和Linux的嵌入式MPEG4网络视频服务器
基于ARM920T的嵌入式Linux系统开发.pdf