移动设备上USB摄像头的功能实现方法研究

来源 :城市建设理论研究 | 被引量 : 0次 | 上传用户:cychenying2007
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:针对Android操作系统下无法使用USB摄像头进行预览和拍摄的问题,提出了在硬件抽象层编写代码进行实现的方法,实现了USB摄像头的正常取景预览和拍摄功能。在深入研究V4L2规范的基础上,对图像采集驱动UVC进行配置,而后在Android系统的硬件抽象层编写了基于V4L2规范的图像采集程序,实现了Android操作系统下USB接口摄像头的预览和拍摄功能。实验测试结果表明,该方法可以获得稳定流畅的拍摄预览效果,并拍摄得到优质清晰的图像。
  关键词: USB摄像头;Video for Linux 2编程;硬件抽象层;色彩空间转换
  中途分类号:TU-024 文献标识码:A文章编号:
  0 前言
  基于Android操作系统的嵌入式平台,凭借其开放性、友好的用户界面、优秀的多任务处理能力、强大的多媒体应用,已成为众多嵌入式系统应用平台和移动设备开发平台中的佼佼者。
  Android操作系统对USB总线接口热插拔的支持非常完善,但对USB摄像头缺乏必要的应用支持。然而,USB接口具有数据传输速率快、可扩展性好和维护方便等优点[1],USB摄像头可动态连接并延伸一定距离安装,使之非常适合于工业现场监控、图像采集和机器视觉等方面的应用。
  为了解决基于Android操作系统的嵌入式系统平台中USB摄像头的应用问题,本文在深入研究了Android系统中Camera的原理机制和视频设备驱动V4L2标准的基础上,对图像采集驱动UVC进行了配置,编写了基于V4L2的图像采集程序,在硬件抽象层下完成了图像预览及拍摄功能的设计,实现了Android操作系统USB接口摄像头取景预览和拍摄功能。为工业现场监控、图像采集和机器视觉等使用USB摄像头的应用,提供了一种实现取景预览和拍摄功能的方法。
  1 开发环境简介
  嵌入式系统的开发环境称为交叉式开发环境,所有开发工作在宿主机上完成,产生的代码则运行在目标机上。宿主机使用PC机,目标机则使用一块ARM开发板。
  宿主机用于编译生成修改过的摄像头硬件抽象层模块,其使用的操作系统为Ubuntu 10.10,编译器使用Android源代码中自带的编译器进行编译。
  目标机是运行目标代码的机器,它使用移植的Android 2.3.4操作系统,部分代码经过修改,底层为Linux2.3.26内核。
  2 功能实现原理
  本文主要目的是在目标机上的Android系统中的硬件抽象层实现USB摄像头的预览及拍照,为上层系统调用提供相应的功能,主要包括两个步骤:
  配置系统内核,加载UVC设备,使系统可以识别USB摄像头。
  修改系统中摄像头的硬件抽象层,依照V4L2编程规范,在硬件抽象层实现USB摄像头的预览及拍照功能。
  UVC协议的实质是给USB接口的视频设备提供一个统一的数据交换规范。网络摄像头是第一个支持UVC,也是数量最多的UVC设备。使用UVC技术的设备还包括摄像头、数码相机、电视棒及静态影像相机等设备。如果某些视频设备不支持UVC标准协议,则需要独立开发支持该类设备的驱动程序,使内核能够成功识别并驱动该设备。
  在V4L2驱动开发框架下,摄像头是一个字符型设备,使用struct video_device结构体表示它。可以通过标准的系统调用去操作它。如用open()和close()打开或关闭V4L2设备;用ioctl()对V4L2设备进行控制操作;用mmap()实现映射内核空间地址到用户空间;用read()和write()实现V4L2设备的数据数据读写等。
  摄像头设备不仅有读写功能,还有其他的一些功能,可以通过ioctl()命令对设备的操作,给驱动程序发送命令、传递不同的参数,可实现包括查询当前设备的属性、设置视频制式和帧格式等功能。
  V4L2视频采集需要按照标准的步骤去完成,其主要步骤如图1所示。
  具体使用方法如下:
  打开视频设备
  USB视频设备是一个字符型设备文件,使用open系统调用。使用ioctl()系统调用,传入VIDIOC_QUERYCAP参数,通过对结构体的查询判断,得知该设备是否具有视频采集以及视频流内存映射功能。传入VIDIOC_S_FMT参数,通过对结构体的填充来设置视频采集格式及相关信息。
  向内核空间申请数据帧缓冲区
  使用ioctl()系统调用,传入VIDIOC_REQBUFS参数,通过对结构体的填充,分配视频数据缓冲区。使用ioctl()系统调用,传入VIDIOC_QUERYBUF参数,通过对结构体操作,把获取的帧缓冲区的地址转换成物理地址,使用mmap()系统调用将内核中缓冲区映射到应用程序地址空间,这样用户空间就可以直接读取内核空间的视频数据,减小系统的开销;传入VIDIOC_QBUF参数,通过对结构体操作,数据帧缓存区入列为载入数据做准备。
  开始视频采集
  使用ioctl()系统调用,传入VIDIOC_STREAMON参数开始视频采集函数。传入VIDIOC_QBUF参数,将存有图像数据的缓冲区出列读取。将缓冲区重新入队列尾,循环采集。传入VIDIOC_DQBUF参数,将前一步中出队列的缓冲区重新入队列。传入VIDIOC_STREAMOFF命令结束视频采集函数, 使用munmap()系统调用逐一释放缓冲区,使用close ()系统调用关闭设备。
  3 预览与拍照功能在Android系统中的实现
  摄像头所有的功能都在HAL层进行实现,在HAL层中需要遵照V4L2标准调用内核中的摄像头驱动取出图像数据,实现功能供上层软件调用。在本文中,实现摄像头的预览及拍照功能,应该按照以下步骤进行:
  调用底层驱动获取图像数据;
  将图像数据传递给上层应用程序进行显示;
  将图像数据信息加上其他信息传递给上层应用保存为图片。
  本文中使用的摄像头提供的图像数据格式为YUV420,大小为320*240,而显示系统需要使用RGB565格式的图像进行显示,因此需要将其进行转换。YUV格式转RGB格式的公式如公式1所示:
   (1)公式1涉及大量浮点运算,在移动平台上进行计算耗费时间较长,因此在实际应用时可以使用简化为整数运算的近似公式或者使用查表法。
   本文中,将RGB565图像数据直接保存为BMP图像,需要为图像信息加上相应的BMP文件头和BMP信息头,其中BMP文件头记录了BMP图像的大小等信息,BMP信息头记录了BMP文件的尺寸及格式信息。将完整的BMP图像文件传递给上层应用,可以直接保存为BMP格式图片。这一步骤通常在摄像头的拍照线程中实现。
  4 测试结果
  按照上面的步骤对HAL层进行修改,并重新编译摄像头模块代码,最终生成libcamera.so动态链接库,将其放入目标机的/system/lib中,重启加载动态库后,Android系统中的Camera即可实现USB摄像头的取景预览和拍攝功能。图2为测试过程中拍摄得到的一副图像,其中左边为取景预览示意图,右边为摄像头拍摄得到的图片。
  5 结论
  本文在嵌入式Android开发平台上成功实现了USB摄像头的驱动、图像数据采集以及拍摄预览和拍摄功能。在测试过程中,预览图像显示稳定流畅,拍摄得到图片质量得到优质清晰,并可存储至SD卡等设备中。通过测试分析可以得出以下结论:
  通过内核加载UVC的方法可以驱动和识别所有支持UVC的USB摄像头;
  V4L2视频设备驱动提供了数字图像采集所需的功能;
  通过改写HAL层实现USB摄像头的视频预览和拍摄功能的方法是一种可行而且高效的方法,适合实际的应用环境。
  参考文献
  [1] 刘飞,张曦煌.基于嵌入式平台的USB摄像头驱动程序的实现[J].计算机工程与设计.2008,29(8):1994-2142
  [2] 王飞,孔聪. 基于V4L2的Linux摄像头驱动的实现[J]. 电子科技. 2012,25(2):86-92
  [3] 张辉,李新华,刘波,钱翔.基于V4L2的视频采集缓存机制应用与实现[J].现代电子技术.2010, 33(20):54-56
  [4] 徐家,陈奇. 基于V4L2的视频设备驱动开发[J].计算机工程与设计.2010,31(16):3569-3572
其他文献
摘要:在本文中,笔者主要分析了各种防渗处理技术,给予介绍了防渗处理施工技术在水利水电工程中的具体应用。  关键词: 水利工程; 防渗处理; 高压喷射灌浆;防渗墙  中途分类号:F407.9 文献标识码:A文章编号:  伴随着我国水利工程规模的不断扩大,施工技术的不断发展,对于工程防渗技术有了更高的要求。我国水利水电枢纽工程数目众多、分布广泛。在防洪减灾和人们的生活中发挥着极其重要的作用。然而这些工
期刊
摘要:随着园林事业的蓬勃发展,园林施工管理企业日益增多,随之而来的是由于管理的制度不完善、水平不高、管理者素质参差不齐等原因,造成园林绿化施工管理中存在着诸多问题,通过对绿化施工中存在的问题进行分析,提出加强和改进管理的措施。  关键词:园林绿化;施工管理;措施  Abstract: Along with the booming development of the landscape busin
网络作为一个新型文化载体和传播媒介正影响着人类生活的各方各面。网络游戏是顺应时代发展的产物,并且在社会生活中发挥了积极的作用。网络游戏如今已成为一种时尚,与此同时网
【摘要】:本文以某工程电气设计为例,结合多方面的要求,阐述在高层建筑电气设计中的要点与注意措施。  【关键词】:高层建筑电气设计低压系统接地  中途分类号:F407.6 文献标识码:A文章编号:  1某工程概况  某地方一大厦,总共十四层,地下一层,是一座综合楼,总建筑面积19784m2,总高为58.4m,框架结构。首层、二层设计为商场,三层、四层为办公室及辅助用房,五至十四层为民用住宅。本工程电
期刊
随着智慧矿山的发展,选煤厂对智能化的要求不断提高。当前选煤厂控制系统中各子系统的控制和信息采集相互独立,因此无法将整个生产过程作为整体进行建模,并通过子系统之间的
【摘要】:当前,可持续发展已经成了整个社会发展的主流.同样,在很多的建筑设计中也要尽可能的贯彻生态建筑的理念,减少有限资源的浪费.笔者通过结合某项目规划的设计方案.具体谈一下生态理念在现代建筑设计中的体现.  【关键词】生态理念:建筑设计  中途分类号:TU2 文献标识码:A文章编号:  0.引言  21世纪以来,随着人民生活水平的不断提高,科学技术的不断进步,人们对生活环境的要求也越来越高.我国
期刊
近年来,随着互联网的日益普及和无线通信技术的飞速发展,IP网络开始承载更加丰富的网络服务,对传输层的协议提出了更高的要求。IETF于2000年提出SCTP协议,它继承了TCP强大的流量
【摘要】:随着哥本哈根联合国气候大会的召开,“低碳”瞬间成了人类关注的焦点,低碳经济、低碳生活、低碳社会、低碳城市、低碳景观等一系列新概念也应运而生,并得到了社会各界的广泛认同。在这一发展趋势下,纵观当代低碳型景观设计,其中存在着大量形式化的并不“低碳”的低碳设计。笔者就此现象,主要探讨结合传统造园理念,寻求其中有益的设计元素和手法,将其植入当代低碳型景观设计中,从而创造出和谐的、低碳的、可持续的
期刊
学位
本文应用现代信号处理技术和现代模式识别技术的方法主要研究了基于高分辨雷达一维距离像的雷达目标识别问题,研究的目的在于降低高分辨雷达目标识别算法的复杂性和提高目标识