LabVIEW 条形码识别(实战篇—5)
条形码(Barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。
条形码可分一维和二维两大类。一维码将宽度不等的多个黑条和空白按照一定的编码规则排列,用来表示一组信息。常见的一维码是由反射率相差很大的黑条和白条排成的平行线图案,如下所示:
二维码包括堆叠式条码和矩阵式条码两大类,堆叠式条码通过对多个一维码堆叠构成,矩阵式条码则使用黑白矩形图案表示数据,如下所示:
二维码识别效果如下所示:
条码具有成本低、灵活易用、使用效率高和可靠性强等优点。条码制作仅仅需要印刷,识别设备的构造也很简单,与其他自动化识别技术相比,成本相当低廉。条码符号可以手工键盘输入,条码识别设备操作简易,也可以和有关设备组成识别系统实现自动化识别,或者和其他控制设备联系起来实现整个系统的自动化管理。条码的读取准确率远远超过人工方式,平均每 15 000 个字符才会出现一个错误。此外,条码的读取速度很快相当于每秒 40 个字符。
1、一维码识别
一维码将多个宽度不同的竖直黑色条纹(Bar)和空白(Space)按一定的规则排列来表示信息,下图显示了一维码的结构示意图:
其中,条码的空白区在左、右两端,一般来说它必须是窄条宽度的 10 倍以上,如果边缘宽度不够,条码读取器就无法对其数据进行扫描。起止符是用于表示数据开始和结束的字符,它根据条码类型不同而不同。有些采用 A、B 和 D,有些则采用*。数据部分包括信息字符的条码图案,信息字符可以是数字、字母或其他特殊字符。校验位用于和读取值中计算得到的数据进行比较,以校验读取值是否有错,一般直接附在数据信息后。一维码可由两种或多种宽度的条纹和空白构成,编码时条纹和空白区域可以被离散或连续使用。
Nl Vision 为一维码的读取提供了专门的函数 IMAQ Read Barcode 2,它封装了对条码的复杂解码过程。该函数位于 LabVIEW 的视觉与运动→Machine Vision→Instrument Readers 函数选板中,如下图所示:
函数说明及使用可参见帮助手册:
函数 IMAQ Read Barcode 2 可支持下表列出的各种类型的条码。
由于交错式 Code25 码、Code39 码和 Code93 码并无校验位,因此在读取这几类条码时,可以关闭该函数的校验参数。此外,Pharmacode 较为简单,其他条码极容易被误读为此类条码,因此在使用 IMAQ Read Barcode 2 函数读取其他类型的条码时,一般要禁用它对 Pharmacode 的支持功能。
条码图像的分辨率、亮度漂移、条纹的灰度一致性和噪声是影响 IMAQ Read Barcode2 读取结果的几个主要因素。条码图像的分辨率由条纹和空白区域的最小宽度来决定,一般来说它们的宽度不得少于 3 个像素才能被正确读取。图像的亮度漂移太大时也会影响读取结果的正确性。
通过一个一维码读取实例,了解一维码的应用方法,程序设计思路如下所示:
While 循环中的代码会逐一读取保存在 Barcode 文件夹中的各个图像,然后使用 IMAQ Read Barcode 2 从图像中搜索各类条码的位置,并对它们进行解码;
读取过程结束后,For 循环中的代码会对条码的结果进行解析,并将条码的边界矩形、条码信息和类型以叠加图层或数组的方式显示到界面上。
程序实现如下所示:
程序运行效果如下所示:
项目资源下载:LabVIEW一维码识别-硬件开发文档类资源-CSDN下载
2、二维码识别
二维码是对堆叠式条码和矩阵式条码的统称。堆叠式条码通过堆叠多个一维条码构成,矩阵式条码则在一个矩形空间内通过黑白图案的不同分布对数据进行编码,如下图所示:
一维码仅使用一个方向上的条纹宽度代表数据,通常最多包含 30 个字符。二维码在水平和垂直方向上都包含数据,最多可包含 3000 个字符。当数据量相同时,二维码的尺寸要比一维码小很多,因此它可印刷在空间有限的电子产品和其他小部件上。此外,矩阵式二维码还引入了位置定位和容错机制,不仅可使用方框、L 形框或专门的定位图案可靠地探测条码位置,还能在条码有损的情况下(如有污渍)正确还原信息。
下图显示了 QR 码的典型结构示意图,可以看出 QR 码是一种典型的矩阵式二维码主要由以下几个部分构成:
空白区域(Quiet Zone);
3 个定位标识(Finder Pattern) ;
对准标志(Alignment Pattern);
定时标识(Timing Pattern) ;
黑色和白色数据单元(Data Cell)和纠错码(Error Check and Correction Cell);
用于解码的格式信息(Formatting Information)等。
QR 码是矩阵式二维码的一种,其尺寸可包含 21×21 到 177×177 个数据单元。由于其右下角有对准标志,其他 3 个角上有定位标志,因此可以从 QR 码的任一方向对其进行快速读取。QR 码内置了错误检查和纠正(ECC)机制,它可以通过标准 Reed-Solomon 方案对污点、脱墨和数据丢失等条码损坏按照 4 种不同纠错级别(L、M、Q、H)进行恢复如下图所示。数据的恢复率随着所选的纠错级别不同各异(L 级为 7%、M 级为 15%、Q 级为 25%、H 级为 30%)。
通过一个 QR 码读取的实例,了解二维码的应用方法,程序设计思路如下所示:
程序代码结构比较简单,在将包含 QR 码的图像读入内存后,就直接调用位于 LabVIEW 的视觉与运动→Machine Vision→Instrument Readers 函数选板中的 IMAQ Read QR Code 函数,从图像中搜索单个或多个 QR 码并对其进行解码。
程序还通过记录读取前后的时间值来计算 QR 码搜索和读取过程的耗时。最后在图像中用无损图层标出 QR 码所在位置,并显示图像。
程序实现如下所示:
程序运行效果如下所示:
项目资源下载: LabVIEW二维码识别_labview二维码识别,labview二维码识别-硬件开发文档类资源-CSDN下载
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/d54778de8622bc0bc31593aee】。文章转载请联系作者。
评论