kaiyun官方注册
您所在的位置: 首页> 通信与网络> 设计应用> 基于WinCE平台的QR条码识别系统
基于WinCE平台的QR条码识别系统
维库开发网
摘要:简单介绍了QR码的基本结构,分析了在基于WinCE的嵌入式平台上QR码图像数据的灰度化、滤波、二值化、定位及矫正等预处理的实现过程。重点讨论了系统在WinCE平台上如何实现实时图像采集的问题,并设计了一个基于WinCE手机移动平台的QR码识别系统。
Abstract:
Key words :

引言

目前,条码技术,尤其是二维条码技术应用广泛。2006 年, 中国移动正式推出了手机二维条码业务,主要应用于移动增值服务。2009年,铁道部门正式用QR码取代一维条码应用于火车票票据的检测。可以预见随着3G时代的到来、现代物流业的发展以及物联网的推广,条码识别和应用必将得到全面的飞速发展。

1 QR码简介

QR码是由日本Denso公司于1994年9月研制的一种矩阵二维条码符号。它具有信息容量大、可靠性高、可表示文字图像等多种信息、保密防伪性强等优点,还具有高速全方位识读、能有效表示中国汉字与日本汉字等主要特点。如图1所示,每个QR码符号由编码区域和功能图形组成,其*能图形包括位置探测图形、分隔符和校正图形。

图1 二维条码QR码

2 系统总体设计

2.1 系统硬件结构

图2WinCE硬件架构

本系统采用基于WinCE嵌入式的智能手机为硬件平台,其硬件结构如图2所示。主处理器DSP上外接摄像头控制器、LCD控制器、SRAM控制器、通用GPIO口、UART口等。摄像头完成图像数据的采集后,系统会在SRAM中创建一片视频帧缓冲区,通过Allocator组件来进行动态管理,将捕捉到的图像一路传给主处理器DSP进行图像实时处理,另一路传给LCD控制器进行图像的预览。主处理器负责主界面的显示/条码的实时识别和解码,以及输入信息的处理。

2.2 系统软件流程

系统软件在基于WinCE 6.0的Windows Mobile 5.0 Pocket PC和Windows Mobile 5.0 SmartphONe平台上使用C++语言实现。软件主要分为图像采集模块、图像预处理模块、识别解码模块和应用模块4个模块。图像采集模块主要完成条码图像的采集,一方面通过摄像头进行数据采集实时解码,另一方面把采集的图像数据送屏幕显示。图像预处理模块主要是对采集的QR码图像进行预处理,包括灰度化、中值滤波、二值化等,为识别解码做好前期准备工作。识别解码模块主要功能包括QR条码的检测、定位、分割、识别以及条码解码。应用模块主要包括发送邮件、拨打电话、访问网址、存储条码信息和短信应用等。软件流程如图3所示。

图3 软件设计流程

3 QR码识别解码的核心算法

考虑到QR码图像的特点、嵌入式平台的处理速度、条码本身的污染扭曲,以及在图像采集过程中光照不均、抖动等因素,QR码识别解码的基本过程是:首先对采集的彩色图像进行灰度化、滤波、二值化,接着在二值化图像中扫描QR码图像,将其从图像中分割出来,进行解码。

3.1图像灰度化、滤波与二值化选取彩色图像的G值(绿色分量)为灰度图像I(x,y)的值,并使用中值滤波去噪声。二值化采用OSTu算法计算阈值。Ostu算法效果好,但计算量比较大,可将图像分成7×7个小分块,对每一个小分块使用Ostu算法计算阈值从而来降低时耗。

3.2 条码检测、定位及矫正

在获取QR码图像数据时,可能会因为拍摄角度等原因造成图像几何失真,例如获取的QR码图像为任意四边形,则须对失真图像进行反透视变换[4]。变换算法如图4所示。

图4 反透视变换

(u,v)是失真图像的坐标,(x,y)是基准图像的坐标,A′B′C′D′为任意四边形,ABCD为矫正后的正方形,则对于u、v坐标系A′B′C′D′任意四边形中的任意一点(u,v),对应在x、y坐标系上的点(x,y),可通过转换公式

计算获得。通过已知四组点得到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 构建Filter Graph

首先创建一个Filter Graph,再根据Filter各自的GUID号来创建不同的Filter对象,并调用Filter Graph的接口AddFilter把这些Filter一一加入Filter Graph中。然后利用Capture Graph Builder对象提供的IcaptureGraphBuilder2接口将所有Filter“串联”起来,从而构建一个完整的Filter Graph数据流。下面为构建Filter Graph的主要步骤及关键源代码。

① 创建并初始化Filter Graph Manager组件对象。CoCreateInstance(CLSID_FilterGraph,0,CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (VOID**)&m_pGraphBuilder);CoCreateInstance (CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (VOID**)&m_pCaptureGraphBuilder);m_pCaptureGraphBuilder﹥SetFiltergraph(m_pGraphBuilder);

② 创建视频采集Filter对象,并添加进Filter Graph中,其他Filter类似。

m_pSourceFilter.CoCreateInstance (CLSID_VideoCapture);

m_pGraphBuilder﹥AddFilter (m_pSourceFilter, L"Video capture source");

③ 将编写好的处理QR码图像数据的Filter也加入其中。

pTransFilter.CoCreateInstance(CLSID_CamTransform);

m_pGraphBuilder﹥AddFilter(pTransFilter,L"Transform");

④ 将添加的各个Filter“串联”起来,形成一个完整的数据流。

m_pCaptureGraphBuilder﹥RenderStream (&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pSourceFilter, m_pTransFilter,NULL));

4.2.3 自动对焦

在使用摄像头进行取像的过程中,有可能发生抖动现象,图像会变得模糊。使摄像头自动对焦,从而获得更为清晰的图像数据,对快速准确识别QR码至关重要。WinCE 6.0和Windows Mobile 5.0及更高版本均支持自动对焦。在本系统中,主要步骤及关键源代码如下:

① 获取摄像头控制接口。

m_pCaptureGraphBuilder﹥FindInterface (&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pSourceFilter, IID_IAMCameraControl, (VOID **) &pCamConfig);

② 设置自动对焦。

pCamConfig﹥Set (CameraControl_Zoom, iDefault, CameraControl_Flags_Auto);

以上步骤描述了WinCE嵌入式设备的摄像头采集图像数据的过程,构建好Filter Graph后即可通过摄像头采集QR码图像。

结语

本文分析研究了QR码的检测和识别技术,讨论了在WinCE移动平台上实现QR码识别系统的技术问题(主要是如何实现QR图像实时采集),并结合数字图像处理技术在WinCE手机移动平台上进行了QR码识别系统的开发。本系统在多普达585 和HTC P600上进行了测试。测试表明,该系统可以快速准确地检测出QR码图像,在多普达585(CPU为OMAP850,主频195 MHz,64 MB RAM,图像分辨率为320×240)上解码平均耗时约450 ms,只有对极少数本身污染特别严重的条码不能识别。目前,本系统软件已经成功推向市场。


此内容为AET网站原创,未经授权禁止转载。
Baidu
map