基于WinCE平台的QR条码识别系统*
2010-06-22刘伟
刘伟
(南京航空航天大学 信息科学与技术学院,南京210016)
刘伟(硕士研究生),主要研究领域为数字图像处理。
引 言
目前,条码技术,尤其是二维条码技术应用广泛。2006年,中国移动正式推出了手机二维条码业务,主要应用于移动增值服务。2009年,铁道部门正式用QR码取代一维条码应用于火车票票据的检测。可以预见随着3G时代的到来、现代物流业的发展以及物联网的推广,条码识别和应用必将得到全面的飞速发展。
1 QR码简介
QR码是由日本Denso公司于1994年9月研制的一种矩阵二维条码符号。它具有信息容量大、可靠性高、可表示文字图像等多种信息、保密防伪性强等优点,还具有高速全方位识读、能有效表示中国汉字与日本汉字等主要特点[1]。如图1所示,每个QR码符号由编码区域和功能图形组成,其中功能图形包括位置探测图形、分隔符和校正图形。
图1 二维条码QR码
2 系统总体设计
2.1 系统硬件结构
本系统采用基于WinCE嵌入式的智能手机为硬件平台,其硬件结构如图2所示。主处理器DSP上外接摄像头控制器、LCD控制器、SRAM控制器、通用GPⅠO口、UART口等。摄像头完成图像数据的采集后,系统会在SRAM中创建一片视频帧缓冲区,通过Allocator组件来进行动态管理,将捕捉到的图像一路传给主处理器DSP进行图像实时处理,另一路传给LCD控制器进行图像的预览。主处理器负责主界面的显示/条码的实时识别和解码,以及输入信息的处理。
图2 WinCE硬件架构
2.2 系统软件流程
系统软件在基于 WinCE 6.0的 Windows Mobile 5.0 Pocket PC和 Windows Mobile 5.0Smartphone平台上使用C++语言实现。软件主要分为图像采集模块、图像预处理模块、识别解码模块和应用模块4个模块。图像采集模块主要完成条码图像的采集,一方面通过摄像头进行数据采集实时解码,另一方面把采集的图像数据送屏幕显示。图像预处理模块主要是对采集的QR码图像进行预处理,包括灰度化、中值滤波、二值化等,为识别解码做好前期准备工作。识别解码模块主要功能包括QR条码的检测、定位、分割、识别以及条码解码。应用模块主要包括发送邮件、拨打电话、访问网址、存储条码信息和短信应用等。软件流程如图3所示。
图3 软件设计流程
3 QR码识别解码的核心算法
考虑到QR码图像的特点、嵌入式平台的处理速度、条码本身的污染扭曲,以及在图像采集过程中光照不均、抖动等因素,QR码识别解码的基本过程是:首先对采集的彩色图像进行灰度化、滤波、二值化,接着在二值化图像中扫描QR码图像,将其从图像中分割出来,进行解码。
3.1 图像灰度化、滤波与二值化
选取彩色图像的G值(绿色分量)为灰度图像Ⅰ(x,y)的值,并使用中值滤波去噪声。二值化采用Ostu算法计算阈值[3]。Ostu算法效果好,但计算量比较大,可将图像分成7×7个小分块,对每一个小分块使用Ostu算法计算阈值从而来降低时耗。
3.2 条码检测、定位及矫正
在获取QR码图像数据时,可能会因为拍摄角度等原因造成图像几何失真,例如获取的QR码图像为任意四边形,则须对失真图像进行反透视变换[4]。变换算法如图4所示。
(u,v)是失真图像的坐标,(x,y)是基准图像的坐标,A′B′C′D′为任意四边形,ABCD为矫正后的正方形,则对于u、v坐标系 A′B′C′D′任意四边形中的任意一点(u,v),对应在x、y坐标系上的点(x,y),可通过转换公式
图4 反透视变换
计算获得。通过已知四组点得到8个待定系数A、B、D、E、F、H、M、N,然后进行透视矫正。
根据QR码标准定义,QR码符号含有3个相同的位置探测图形。每个位置探测图形由3个重叠的同心正方形组成,其模块宽度比为1∶1∶3∶1∶1。其他地方遇到类似图形的可能性极小,因此可以在得到的二值化图像中迅速地识别可能的QR码符号,完成对条码的检测与定位[5]。但是,在对条码进行矫正时,需要知道4个顶点。通过定位3个位置探测图形可获得其中3个顶点,利用下面基于QR码纹理特征的算法来寻找第4个顶点。
首先根据已经得到3个顶点的位置,可以确定QR码符号的两条边界,及其边界直线斜率θ1、θ2,然后舍去其交叉的顶点。对于剩下的两个顶点,分别利用它作为直线上的一点,以一定范围的角度(-θ,θ)进行搜索来寻找条码边界,依据是包含条码跳数(黑块与白块交替一次称为一跳)最多的直线即为条码的边界。通过这种方法可以找出需要的另外两条边界,其交点即为第4个顶点。知道4个顶点以后,通过反透视变换将其矫正到正确位置,如图5所示。旋转后会产生锯齿边界,这里利用双线性插值对图像进行平滑处理[6]。对相邻的4个像素进行插值,其单位正方形上任意一点f(x,y)有:
在编程实现时,反透视变换和双线性插值同时进行。分割出QR码后进行解码,其解码过程不是本文重点,不再详细阐述。
图5 反透视变换
4 图像采集子系统
4.1 DirectShow体系结构
DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM的流媒体处理的开发包。其系统架构图如图6所示。DirectShow通过过滤器图表管理器(Filter Graph Manager)来与上层应用程序和下层的驱动进行联系。应用程序可以通过Filter Graph Manager提供的一组组件对象模型接口来访问过滤器或者控制多媒体数据流,例如控制数据帧率、图像大小、图像质量等等。在本系统中采用COM组件来访问DirectShow中的过滤器,从而获得QR码图像数据。
图6 DirectShow系统架构图
4.2 QR码图像采集
4.2.1编写处理QR码图像数据的Filter
通过DirectShow提供的视频采集Filter来驱动摄像头以获得视频帧。在采集到图像数据后编写处理QR码图像数据的Filter,它调用预处理与识别解码模块进行数据处理。编写一个Filter主要包括两个方面:选择一个合适的父类和应用结构设计。这里选择CTransformFilter作为Filter的父类。对于应用结构的设计,在重写CTransformFilter∶∶Transform()函数时产生一个线程来调用预处理与识别解码模块,这样使得编写的Filter结构清晰、可扩展性良好。
4.2.2构建FilterGraph
首先创建一个Filter Graph,再根据Filter各自的GUⅠD号来创建不同的Filter对象,并调用Filter Graph的接口AddFilter把这些Filter一一加入Filter Graph中。然后利用Capture Graph Builder对象提供的Ⅰcapture-GraphBuilder2接口将所有Filter“串联”起来,从而构建一个完整的Filter Graph数据流。下面为构建Filter Graph的主要步骤及关键源代码。
① 创建并初始化Filter Graph Manager组件对象。
② 创建视频采集Filter对象,并添加进Filter Graph中,其他Filter类似。
③将编写好的处理QR码图像数据的Filter也加入其中。
④ 将添加的各个Filter“串联”起来,形成一个完整的数据流。
4.2.3自动对焦
在使用摄像头进行取像的过程中,有可能发生抖动现象,图像会变得模糊。使摄像头自动对焦,从而获得更为清晰的图像数据,对快速准确识别QR码至关重要。WinCE 6.0和Windows Mobile 5.0及更高版本均支持自动对焦。在本系统中,主要步骤及关键源代码如下:
① 获取摄像头控制接口。
② 设置自动对焦。
以上步骤描述了WinCE嵌入式设备的摄像头采集图像数据的过程,构建好Filter Graph后即可通过摄像头采集QR码图像。
结 语
本文分析研究了QR码的检测和识别技术,讨论了在WinCE移动平台上实现QR码识别系统的技术问题(主要是如何实现QR图像实时采集),并结合数字图像处理技术在WinCE手机移动平台上进行了QR码识别系统的开发。本系统在多普达585和HTC P600上进行了测试。测试表明,该系统可以快速准确地检测出QR码图像,在多普达585(CPU 为 OMAP850,主频195MHz,64MB RAM,图像分辨率为320×240)上解码平均耗时约450ms,只有对极少数本身污染特别严重的条码不能识别。目前,本系统软件已经成功推向市场。
[1]GB/T18284—2000快速响应矩阵码[S].
[2]Ottaviani E,Pavan A,Bottazzi M,et al.A Common Ⅰmage Processing Framework for 2DBarcode Reading[C].Ⅰmage Processing and its Application,Conference Publication No.465ⅠEE,1999:652-655.
[3]Otsu N.A threshold selection method from gray-level histo-gram[J].ⅠEEE Trans Actions on SMC,1979,9(1):62-66.
[4]牛彦.关于透视变换的研究[J].计算机辅助设计与图形学学报,2001,13(6):549-551.
[5]刘慧娟.一种快速响应码图像的分割和检测方法[J].电子测量与仪器学报,2006,20(1):32-35.
[6]刘宁钟,杨静宇.基于傅立叶变换的二维条码识别[J].中国图像图形学报,2003,8(8):877-882.