田伟 周飞菲
(1.兰州交通大学 光电技术与智能控制教育部重点实验室,甘肃 兰州 730070;2.郑州升达经贸管理学院,河南 郑州 451191)
近些年,但凡涉及到视频图像采集的嵌入式系统的研发,视频图像采集模块由于构建其硬件成本高,软件采集方案制定困难等问题使得嵌入式视频图像采集成为亟待解决的一个科研难点。USB数字摄像头具备低廉的价格、良好的性能和灵活方便的特点,本文将其与嵌入式系统相结合,配合ARM9内核和Windows CE5.0操作平台,可以方便的得到实时视频图像,完成对嵌入式视频采集器的设计。此视频采集器可以作为一个实现视频采集的功能模块直接引用到更为复杂的嵌入式系统中去,为复杂系统的嵌入式研发提供方便。
系统平台的设计以Samsung公司的S3C2410处理器作为系统的主控芯片,S3C2410是基于ARM920T内核采用0.18 um的32位RISC嵌入式微处理器,最高主频可以达到200 Mhz。处理速度快、功能强大、价格低廉,能很好的满足嵌入式Windows CE、Linux等操作系统的需求。同时配置了64M的SDRAM、64M的NAND FLASH用做存储设备,内部集成了LCD控制器、SDRAM控制器等众多功能单元以及丰富的外部接口比如USB HOST、USB DEVICE、串口等接口,为系统硬件平台的构建提供了强有力的支持。系统的硬件设计功能框图如图1所示。
图1 基于S3C2410视频图像采集器的系统硬件结构框图
本系统中的S3C2410微处理器由于内部集成了USB HOST,因此可外扩一个USB HOST端口用于连接USB摄像头来支持其访问。
系统采用中星微ZC301P芯片USB摄像头作为视频图像采集的工具。中星微摄像头获得的视频数据为MJPEG格式,Windows CE系统可将其直接读出,然后交给应用程序来解码,就可以很方便地得到实时视频图像,这对那些要求实时性的图象监控的系统是一个很好的选择。图2为中星微ZC301P芯片USB摄像头结构图。
由于S3C2410微处理器集成了串口接口,外扩了一个RS-232串口用于和上位机(这里指PC)连接,将采集到的视频数据在上位机上实时显示,对系统所实现的视频图像采集功能起到了检验的作用。
同样,借助S3C2410微处理器内部集成了众多的功能和丰富外部接口,可以方便地实现系统功能的扩展。系统可以外接TFT的LCD(也可是触摸屏),同样也可实现上位机显示模块的功能,实现对视频图像数据的实时显示和对数据的管理控制等,这样可使系统显得更轻巧灵活,但也会增加系统开发的成本,因此系统采用上位机显示模块,对TFT的LCD在本系统设计中暂不采用。
其他功能扩展模块根据所设计的嵌入式系统的所要实现功能要求而设定,有助于丰富系统的实现功能,有利于嵌入式系统的后续研发。
图2 中星微ZC301P系列USB数字摄像头的基本结构
操作系统选用Microsoft公司的专用嵌入式操作系统Windows CE 5.0版本。Windows CE下外围设备的控制及数据获取都要依靠驱动软件来完成。为了支持不同类型的硬件连接到Windows CE平台上,微软公司提供了具有定制接口的流接口驱动程序模式。
在Windows CE下设计USB摄像头的驱动程序采用的是流接口驱动模式,而流接口驱动程序的设计要实现两个模块:一是实现三个入口点函数,即实现函数USBInstallDriver()、USBUninstallDriver()和USBDeviceAttach();二是实现流接口函数。三个入口点函数主要用来实现对驱动程序的注册、激活与卸载。而流接口函数用于实现上层应用程序对USB摄像头进行的控制。
在Windows CE下对中星微ZC301P芯片USB数字摄像头驱动程序的设计,要根据中星微ZC301P芯片USB数字摄像头的硬件特性来完成。在编写驱动程序时,应该严格地按照三个入口点函数 USBDeviceAttach(),USBInstallDriver(),USBUninstallDriver()这三个函数的原型来实现,否则就不能为设备管理器所识别。
在中星微ZC301P芯片USB数字摄像头驱动程序中,主要通过调用以下接口函数用于摄像头功能的实现
(1)函数capInitCamera()用于对当前摄像头进行初始化。
(2)函数capGetCurrentVersion()用于获得当前驱动程序版本信息。
(3)函数capGetVideoFormat()用于获取当前视频格式和尺寸模式。
(4)函数capSetVideoFormat()用于设置当前视频格式和尺寸模式。
(5)函数capGetPicture()用于同时获取一帧视频图象和JPEG图片。
(6)函数capGrabFrame()用于获取一帧视频图象。
(7)函数capGetLastJpeg()用于获取一帧JPEG静态图片。
(8)函数capStartCamera()用于启动摄像头开始捕获视频。
(9)函数capStopCamera()用于停止摄像头捕获视频。
(10)函数capCloseCamera()用于关闭当前活动的摄像头。
在完成USB摄像头驱动程序之后,要实现Windows CE下的视频数据采集,还要在注册表中配置USB数字摄像头驱动信息。因为在USB设备加载时,先检查加载设备的相关信息。而这些设备的配置信息又都在Windows CE系统注册表中。所以,内核系统会先访问注册表以获得必要的相关信息。待在注册表中配置相关的USB摄像头驱动信息完成之后,系统可自动加载驱动程序,便可启动USB摄像头进行图像采集了。视频数据采集流程图如图3所示。
图3 视频数据采集流程
如图4所示,视频图像采集器将采集到的数据输出给上位机显示,从而实现对设计的一种嵌入式视频图像采集器的功能检验。S3C2410外扩的RS-232接口,实现与PC机串口通信的硬件连接。而 VC++6.0开发环境为串口通讯提供了ActiveX控件,名为MSComm控件。MSComm控件读取数据缓冲区的存储数据,并将其显示。通过上位机显示视频图像,对嵌入式视频图像采集器的视频采集功能进行检验,经检验鉴定,这种嵌入式视频图像采集器能较好的完成预期的视频图像采集效果。
图4 经USB摄像头采集通过上位机显示的视频图像
本文详细探讨了Windows CE 5.0和ARM920T内核下图像采集器的硬件构建和驱动程序的设计和实现过程,USB摄像头引入嵌入式系统中,构建一种嵌入式视频图像采集器,是一种普适性高,成本低的视频采集方案,最重要的特点是具有很高的二次开发性。该方案可被应用到嵌入式应用开发中去,如嵌入式的远程监控的图像采集端、嵌入式图像处理等领域。
[1]潘宁,杨丹,宋恩民.Win CE下基于ARM的USB摄像头图像采集[J].微计算机信息,2008,7(3):272 -273,282.
[2]邹意然,王永威,赵龙.嵌入式系统中于USB摄像头的图像采集[J].微计算机信息,2010,12(2):24 -28.
[3]薛园园赵健岭.USB应用开发实例详解[M].北京:人民邮电出版社,2009:4-17.
[4]李媛媛.Visual C++网络通信开发入门与编程实践[M].北京:电子工业出版社,2008:23-40.
[5] 李英.Visual C++编程与项目开发[M].上海:华东理工出版社,2008.