主办单位:中国物品编码中心 | 中国自动识别技术协会 | 《中国自动识别技术》杂志社

设为首页 | 加入收藏 | 关于我们

  行业应用  正文

Python使用PIL库识别条码及其可译码度的研究

发布时间:2019年03月05日 来源:中国自动识别网 作者:杨琰皓

商品条码质量的好坏会影响整个商业物流信息系统的运行效率,条码的色度、宽度是影响条码是否能被正确扫描的重要因素。在GB 12904-2008 《商品条码 零售商品编码与条码表示》国家标准中有强制要求的项目通常需要企业提供实际的条码印制品,由条码检测仪进行依据GB/T 18348-2008 《商品条码 条码符号印制质量的检验》国家标准检测。然而,深圳市标准技术研究院在多年的服务性检测、监督抽查活动中发现,有部分企业的商品条码标签设计稿上的条码本身存在着条空偏差大、空白区不足、码制错误等问题,主要由市面上良莠不齐的条码设计软件,条码设计人员缺乏条码设计的基本知识导致。
可以运用计算机工具,直接对电子设计稿中的条码进行识别并检测其部分参数。一方面使检测人员可以更高效地发现条码尺寸偏差的问题,另一方面降低企业从设计、印刷到检测过程中的成本。
PIL(Python Imaging Library)是计算机程序设计语言Python的图像处理标准库,具备图像加载、转换、滤波等基本功能,可将条码图像中的像素格式转化为数据格式,条码的单个条、空宽度,再依据GB 12904-2008标准附录E及GB/T 18348-2008标准附录C中的内容,实现条码译码和可译码度计算。
 
视觉信息转化为数据
Image模块的open函数可读取条码标签图像,接受PNG、BMP、JPG等格式。彩色图像读取默认为“RGB”模式,为方便进行后续的数据处理,可用convert函数将图像模式转化为模式“L”灰度图像或者模式“1” 二值图像,三种模式的区别(见图1)。
图1  四像素图片不同的模式输出结果
 
获取色块宽度
按照步骤一读取(见图2)的二值图像,选择模式“1”,单个像素的输出值0代表黑色(条的颜色),255代表白色(空的颜色)。
图2  CorelDRAW 设计的EAN-13条码
获取某一纵轴上所有像素的颜色数据(255或者0),进行下述的数据处理方式:将区域内颜色相同的相连区域设定为同一组,按照从左到右的顺序输出每组所包含的像素数量。例如,输出的内容为35, 4, 4, 4, 12,…,总计61个数字,代表61个色块区间的宽度,包含了59个条、空宽度,单位为像素(见图3)。
图3  条码号6901234567892前5个区间宽度(单位:像素)
识别出条码位置
对EAN-13条码来说,起始符、中间分隔符及终止符都在条码图像的固定位置,条空的均为1个模块组成(见图4)。可以使用这一特性识别出条码位于较复杂的图像所在的位置,或者在哪段色块段中,过程如下:
图4  EAN-13条码的符号结构 
选取合适纵轴,如图片整体尺寸二分之一的位置,从图片左侧开始寻找连续3段宽度相似的色块,找到后假定其为条码起始符;
判断在步骤1中假定的起始符后第25到第29位的单个色块宽度与假定起始符中色块宽度相似,如宽度相似则假定其为中间分隔符,如不相似则回到步骤1,在新的横轴起始点寻找条码起始符;
判断在步骤1中假定的起始符后第56到第59位的单个色块宽度是否与假定起始符中的相似,如宽度相似则假定其为终止符,如不相似则回到步骤1,在新的横轴起始点寻找条码起始符;
当对起始符、中间分隔符及终止符识别成功时,这段区间代表条码所在位置,色块宽度代表条码条、空宽度(单位:像素)。如无法找到起始符、中间分隔符、终止符,则换一个纵轴位置回到步骤1。
 
条码数据处理
通过步骤1至3得出条码的条、空宽度后,对起始符后到终止符前,除间隔符按顺序每4个分为一组组成条码字符,依据GB/T18348附录E内容,计算下列的参数项:条码字符宽度(p);相似边缘之间的距离(ei);参考阈值(RT);条码字符的相似边缘尺寸所包含的模块宽度数(Ei)。
EAN-13条码中左侧第一位数字为前置码,左侧数据符EAN/UPC条码字符集的选用规则GB 12904-2008 5.3.2.3.1具体见表1。但是对未知条码进行译码过程步骤,需要先分析左侧数据所属字符集,结合校验码规则,判断前置码。因此,需要对前置码的映射创建字典见表2,如当前6位数字字符集为“ABBBAA”时,条码前置码为“6”。
表1
 
表2
根据GB12904附录E表E.1内容, “0、3、4、6、9”字符相似边缘尺寸所包含的模块宽度字典见表3,创建第一级译码:“0、3、4、5、6、9”字符在A、B、C三种字符集的字符查询字典,如 “2,3”代表条码字符的相似边缘尺寸所包含的模块宽度数,映射内容为集合“0,A” ,代表字符“0”,以及对应A字符集,A、B三种字符集的字符查询字典具体见表4。
表3
 
表4
根据GB/T18348-2008附录E内容创建第二级译码“1、2、7、8”字符的分类判断逻辑,对7p(b1+b2)/p值进行分类判断。具体判断标准参考GB/T18348-2008附录E的内容。
条码译码
创建完步骤四中的各个函数后,对EAN-13条码中的12组字符进行译码:结合字符的参数项,先对EAN-13条码的前6组字符,按照一级、二级译码在A、B字符集中的映射、判断关系进行译码。对剩下右侧的6位字符也以同样方式,按C字符集进行译码。再参照前6组字符所在集的顺序,推出前置码,结合校验码进行校验(见图5)。
图5  译码全过程
可译码度的检测
可译码度的计算思路与条码译码的步骤较为相似,主要区别在于条码译码将条、空宽度转化为单个数字符号,可译码度将字符条、空宽度通过计算转化为可译码度值,最小可译码度值为该条码的可译码度。因此,通过条码字符译码中的字符参数,可计算出可译码度,具体计算方式可见GB/T18348-2008附录C。
杨琰皓/文
(作者单位:深圳市标准技术研究院)
《中国自动识别技术》2019年第1期总第76期

延伸阅读:

声明:

    凡本网注明“来源:中国自动识别网、《中国自动识别技术》、《条码与信息系统》”的所有作品,版权均属于中国自动识别网、《中国自动识别技术》、《条码与信息系统》, 未经本网授权不得转载、摘编或利用其他方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:中国自动识别网、《中国自动识别技术》或《条码与信息系统》”。违反上述声明者,本网将追究其相关法律责任。
    凡本网注明“来源:XXX(非中国自动识别网、《中国自动识别技术》、《条码与信息系统》)”的作品,均转载自其他媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。文章内容仅供参考。 如因作品内容、版权和其他问题需要同本网联系的,请将内容传真至010-84295675,以便本网尽快处理。

高端访谈 更多>>
商品二维码 全球商品通用...
王毅 研究员、中国物品编码中心技术部副主任兼二维码研究室主任,国际自动识别与数据采集技术分委会(ISO/IEC JTC 1/...
物品身份及其编码的本质
张成海 中国物品编码中心主任、中国ECR委员会联合主席、国际物品编码组织(GS1)管理委员会委员及顾问委员会委员、全...
推进我国二维码标准化应...
王毅,中国物品编码中心二维码研究室主任,技术部副主任,研究员,国际自动识别与数据采集技术分委会(ISO/IEC JTC1/S...
AVEVA剑维软件: 信息和智...
数据是数字化转型的关键因素,是企业的重要资产。
杂志专区 更多>>

《2024第1期》

《2024第1期》