孟紫腾,高佳欢,朱学森,牛建辉,洪海慧,张 钊
(北华航天工业学院,河北 廊坊 065000)
二维码又称二维条码,常见的二维码为QR Code,是近年来一种非常流行的编码方式。相较于线性一维码来说,二维码能存储更多的数据类型的信息,可靠性高、存储可扩性强、成本低廉、保密性和纠错能力较好[1]。它的横纵两个方向都存有字母、汉字、照片、指纹等各种信息,是由一系列黑白点按照一定的规律构成的几何图形。每一个QR码字符对应版本1~40,每个版本对应的尺寸为21×21~177×177。其中,版本1的尺寸为21模块×21模块,版本2的规格为25模块×25模块,每一个版本比前一个版本每边增加4个模块,依次类推,直到最高版本40为177×177模块。最高版本40可容纳多达1 850个大写字母或1 108个字节或2 710个数字或500多个汉字,容量是普通条码的几十倍。QR码的纠错能力分为4个级别。其中L级约可纠错7%的数据码字,M级可纠错15%的数据字节,Q级纠错能力约为25%,H级约30%的字码可被修正。QR码呈正方形,且在左上角、右下角及右上角分别有一个重叠的同心正方形作为位置探测图形。QR 二维码从外观来看是由黑白小方块组合成正方矩阵,它包括功能图像和编码区两个主要区域,编码区包含格式信息、版本信息、数据和纠错码字,功能区域不包含数据编码,空白区位于符号的最外层[2]。
二维码的生成主要运用LabVIEW开发软件,用图形化编辑语言G来完成程序编写,主要是将输入文本信息生成相应的QR二维码,并对二维码进行生成与保存。可以自主定义二维码的版本,文本信息,掩膜图形,纠错等级以及颜色。其中有1~40个版本,掩膜图形为000到111,纠错等级为L,M,Q,H 4个设置选项,颜色也可以自主选择。主要设计思路是将预计生成的QR二维码的排列设置成为布尔型的二维数组,然后将对应的二维数组转换为QR二维码的图片来完成实现。
二维码识别除了需要基于LabVIEW开发环境,还需要安装视觉采集模块VAS和视觉开发模块VDM,另外需要图像采集设备,本设计主要运用笔记本自带的摄像头来完成图像采集。VAS包括NI-IMAQ和NI-IMAQdx,可以利用这两个函数模块从不同的相机获取图像,VDM主要用于图像处理和机器视觉。运用LabVIEW能够快速地生成与识别二维码,成本低,成功率高,能够为人们的生活提供便利。
识别二维码主要对生成的二维码进行译码还原出所携带的信息。主要包含图像采集、图像预处理、图像定位、图像识别4个功能[3]。首先打开摄像头,完成初始化,选择相应串口连接,配置驱动文件,驱动摄像头完成图像采集,创建缓存区将采集到的图像暂时保存。为了达到实时的目的,需要添加while循环。新图像在循环中持续覆盖旧的图像,然后进行灰度处理并进行图像显示,提取有效信息,将二维码部分用红框标出,最后清除错误,释放缓存区。同时可以填写个人信息,将个人信息,识别到的文本信息以及当前时间保存到指定的Excel表中。
2.1.1 生成布尔型二维数组的二维码
底层可以用C或者C++设计,将基本的功能函数都封装在DLL中,在上位机LabVIEW中直接创建并调用DLL,在调用DLL时,需要给函数添加输入输出参数,并完成传递参数及数据类型的配置,可实现想要的功能。再将此封装为可以得到二维码的子VI,方便调用。当输入的文本不是空的字符串时,设置图片的尺寸,边界距离,选择纠错等级,版本,输入文本信息,则可生成布尔类型二维数组的二维码。程序按照从外到内,从左到右的顺序执行。生成布尔型二维数组二维码的程序框图和前面板如图1—2所示。
图1 程序框
2.1.2 QR二维码的生成
纠错等级,版本,掩膜图形采用下拉列表控件,编辑选项,可以设置其内容。输入文本可以自定义编辑,颜色也可以自己选择,其中任何一个条件改变都会生成一个新的二维码。点击保存按钮可以将生成的二维码通过图片至像素图转换,写入png文件,将其保存在自定义路径。点击添加按钮,在bmp文件路径选择bmp图片,完成logo的添加,设置可以生成一个新的中间带有logo的二维码。通过事件结构,程序会变得简单,并将降低CPU利用率。当事件发生时,程序才作出相应的响应。当一个事件完成后,程序需要等待下一个事件的发生,所以事件结构又必须放在while循环中。当按停止按钮时,程序停止运行。QR二维码生成的程序框图和前面板如图3—4所示。
图2 前面板
图3 二维码生成的程序框
QR 二维码在实际应用中,扫描和识别是必不可少的步骤[2]。二维码的识别主要使用视觉模块完成,较于二维码生成的程序框图来说,相对简单。二维码识别的程序框图运用while循环语句,达到实时图像处理的目的。输入个人信息后,点击运行按钮。当程序运行时,开始识别二维码,二维码用红色框标注并显示识别信息,指示灯亮起,按下停止键,程序停止运行。个人信息、识别信息以及识别的时间保存到指定路径。当未识别到二维码时,识别信息的文本为空,而个人信息以及时间正常显示。二维码识别的程序框图如图5所示。
图4 二维码生成的前面板
图5 二维码识别程序框
经过多次测试,系统能够正常启动和运行,能够实现二维码的生成与保存以及二维码的识别与检测功能,另外,对条形二维码进行识别,识别的结果为一个链接。设计基本符合预期的要求,并且系统没有明显的错误,运行速度快。采用LabVIEW开发环境实现图标代替文本行创建程序,容易上手。鉴于设计操作简单,可以将此应用到实验室,图书馆等场合,方便完成产品入库出库信息、查询物品库存或者其他信息。后期会针对二维码的高效性及安全性进行进一步研究。