相似边距离条形码识别技术.docx

上传人:b****6 文档编号:6058136 上传时间:2023-01-03 格式:DOCX 页数:18 大小:290.05KB
下载 相关 举报
相似边距离条形码识别技术.docx_第1页
第1页 / 共18页
相似边距离条形码识别技术.docx_第2页
第2页 / 共18页
相似边距离条形码识别技术.docx_第3页
第3页 / 共18页
相似边距离条形码识别技术.docx_第4页
第4页 / 共18页
相似边距离条形码识别技术.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

相似边距离条形码识别技术.docx

《相似边距离条形码识别技术.docx》由会员分享,可在线阅读,更多相关《相似边距离条形码识别技术.docx(18页珍藏版)》请在冰豆网上搜索。

相似边距离条形码识别技术.docx

相似边距离条形码识别技术

维条形码生成与识别技术

、引言

条形码(简称条码)技术是集条码理论、光电技术、计算机技术、通信技术、条码印制技术于一体的一种自动识别技术。

条形码是由宽度不同、反射率不同的条(黑色)和空(白色),按照一定的编码规则编制而成,用以表达一组数字或字母符号信息的图形标识符。

条形码符号也可印成其它颜色,但两种颜色对光必须有不同的反射率,保证有足够的对比度。

条码技术具有速度快、准确率高、可靠性强、寿命长、成本低廉等特点,因而广泛应用于商品流通、工业生产、图书管理、仓储标证管理、信息服务等领域。

EAN-13条形码简介

)的英文缩写,是以消费资料为使用

一维条码主要有EAN和UPC两种,其中EAN码是我国主要采取的编码标准。

EAN是欧洲物品条码(EuropeanArticleNumberBarCode

对象的国际统一商品代码。

只要用条形码阅读器扫描该条码,便可以了解该商品的名称、型号、规格、生产厂商、所属国家或地区等丰富信息。

EAN通用商品条码是模块组合型条码,模块是组成条码的最基本宽度单位,每个模块的宽度为0.33毫米。

在条码符号中,表示数字的每个条码字符均由两个条和两个空组成,

1”,一个模块的空表

它是多值符号码的一种,即在一个字符中有多种宽度的条和空参与编码。

条和空分别由1~4

个同一宽度的深、浅颜色的模块组成,一个模块的条表示二进制的示二进制的“0”,每个条码字符共有7个模块。

即一个条码字符条空宽度之和为单位元素

的7倍,每个字符含条或空个数各为2,相邻元素如果相同,则从外观上合并为一个条或空,

 

EAN条码字符包括0~9共10个数字字符,但对应的每个数字字符有三种编码形式,

30种编

左侧数据符奇排列、左侧数据符偶排列以及右侧数据符偶排列。

这样十个数字将有

码,数据字符的编码图案也有三十种,至于从这30个数据字符中选哪十个字符要视具体情

2.1EAN-13码的格式

EAN条形码有两个版本,一个是13位标准条码(EAN-13条码),另一个是8位缩短

条码(EAN-8条码)。

EAN-13条码由代表13位数字码的条码符号组成,如图1所示[1]。

图表1

厂商代码后面的5

数字为商品制造商的代码,是由该国编码管理局审查批准并登记注册的。

位(』丄~厶)数字为商品代码或商品项目代码,用以表示具体的商品项目即具有相同包装和价格的同一种商品。

最后一位数字为校验码,用以提高数据的可靠性和校验数据输入的正确性,校验码的数值按国际物品编码协会规定的方法计算。

2.2EAN-13条形码的构成

EAN-13条形码的构成如图2所示。

左侧

左侧数据符

中间

右侧数据符

校验符

空白

起始符

分隔符

终止符宀

6位数字

6位数字

1位数字

图2典型EAN-13条形码的构成

(1)左、右侧空白:

没有任何印刷符号,通常是空白,位于条码符号的两侧。

用以提

般左侧空白11个模块,右侧空白7个模块。

(2)起始符:

条形码符号的第一位字符是起始符,它特殊的条空结构用于识别条形码

符号的开始。

由3个模块组成。

成。

(4)中间分隔符:

位于条码中间位置的若干条与空,用以区分左、右侧数据符,

个模块组成。

7个模

成。

条码校验符:

表示校验码的条码字符,用以校验条码符号的正确与否,由

块组成。

终止符:

条形码符号的最后一位字符是终止符,它特殊的条空结构用于识别条形

码符号的结束。

由3个模块组成。

图3条形码图案实例

图案分成五个部分,从左至右分别为:

起始部分、第一数据部分、中间部分、第二数据部分和结束部分。

(1)起始部分:

由11条线组成,从左至右分别是8条白线,一条黑线,一条白线和

一条黑线。

(2)第一数据部分:

由42条线组成,是按照一定的算法形成的,包含了左侧数据符

(右〜£庁)这些数字的信息。

(3)中间部分:

由5条线组成,从左到右依次是白线,黑线,白线,黑线,白线。

(4)第二数据部分:

由42条线组成,是按照一定的算法形成的,包含了右侧数据符

(£■?

-^1空)这些数字的信息。

(5)结尾部分:

由11条线组成,从左至右分别是一条黑线,一条白线和一条黑线,

条白线。

2.3EAN-13的编码规则

EAN-13的编码是由二进制表示的。

它的数据符、起始符、终止符、中间分隔符编码

见表1。

表1EAN-13编码

字符

二进制表示

左侧数据符

奇性字符(A组)

偶性字符(B组)

右侧数据符

偶性字符(C组)

0

1

2

3

4

5

6

7

8

9

起始符

101

中间分隔符

1010

终止符

101

左侧数据符有奇偶性,它的奇偶排列取决于前置符,所谓前置符是国别识别码的第一

2,实际上由表2

位尺,该位以消影的形式隐含在左侧六位字符的奇偶性排列中,这是国际物品编码标准版的突出特点。

前置符与左侧六位字符的奇偶排列组合方式的对应关系见表这种编码规定可看出,%与这种组合方式是一一对应固定不变的。

例如:

中国的国别识别

码为“690”,因此它的前置符为“6”,左侧数据符的奇偶排列为“OEEEOO[3],

表示偶字符,“O'表示奇字符。

表2左侧数据符奇偶排列结合方式

前置符

左侧数据符奇、偶排列

前置符

左侧数据符奇、偶排列

0

OOOOOO

5

OEEOOE

1

OOEOEE

6

OEEEOO

2

OOEEOE

7

OEOEOE

3

OOEEEO

8

OEOEEO

4

OEOOEE

9

OEEOEO

2.4EAN-13条形码的校验方法

校验码的主要作用是防止条形码标志因印刷质量低劣或包装运输中引起标志破损而造

成扫描设备误读信息。

作为确保商品条形码识别正确性的必要手段,条形码用户在标志设计完成后,代码的正确与否直接关系到用户的自身利益。

对代码的验证,校验码的计算是标志商品质量检验的重要内容之一,应该谨慎严格,需确定代码无误后才可用于产品包装上。

F面是EAN-13条形码的校验码验算方法,步骤如下[3]:

(1)

以未知校验位为第1位,由右至左将各位数据顺序排队(包括校验码)

由第2位开始,求出偶数位数据之和,然后将和乘以3,得积囚!

由第3位开始,求出奇数位数据之和,得"立;

 

用弘除以10,求得余数,并以10为模,取余数的补码,即得校验位数据值

(6)

比较第1位的数据值与C的大小,若相等,则译码正确,否则进行纠错处理。

例如,设EAN-13码中数字码为69(其中校验码值为8),该条码字符校验过程为:

TV;=3x(7+0+1+341+9)=63AT,=5+0+8+0+0+6=19叽=込+叽

=82,弘除以10的余数为2,故C=10-2=8,译码正确。

3EAN-13条形码的生成

条形码的生成方法如下[3]:

(1)由£口根据表3产生和£1~日心匹配的字母码,该字母码有6个字母组

成,字母限于A和B。

表3映射表

0

AAAAAA

5

ABBAAB

1

AABABB

6

ABBBAA

2

AABBAB

7

ABABAB

3

AABBBA

8

ABABBA

4

ABAABB

9

ABBABA

 

(2

0

AAAAAA

5

ABBAAB

1

AABABB

6

ABBBAA

2

AABBAB

7

ABABAB

3

AABBBA

8

ABABBA

4

ABAABB

9

ABBABA

)将£1~£庁和日“产生的字母码按位进行搭配,来产生一个数字--字母匹配对。

并通过查表4生成条形码的第一数据部分。

表4数字--字母映射表

数字-字母匹配对

二进制信息

数字-字母匹配对

二进制信息

0A

0001101

0B

0100111

0C

1110010

1A

0011001

1B

0110011

1C

1100110

2A

0010011

2B

0011011

2C

1101100

3A

0111101

3B

0100001

3C

1000010

4A

0100011

4B

0011101

4C

1011100

5A

0110001

5B

0111001

5C

1001110

6A

0101111

6B

0000101

6C

1010000

7A

0111011

7B

0010001

7C

1000100

8A

0110111

8B

0001001

8C

1001000

9A

0001011

9B

0010111

9C

1110100

4条形码识别

4.1条码识别的基本原理

EAN-13是一种(7,2)码,即每个字符的总宽度为7个模块宽,交替由两个条和两个空

组成,而每个条空的宽度不超过4个模块,如图4所示。

C1,Cl

图片看不清楚?

请点击这里查看原图(大图)。

图4EAN-13条码宽度的定义

图4中56心g表示当前字符中四个相邻条、空的宽度,T是一个字符的宽度,

4

满足:

'莖e,为整数51234;且召,。

用兀表示当前字符单位模块的宽度,则"T门。

令叫=G化I=1234。

由叫化叫叫的值可以得到编码。

例如:

若烧1二“2=3临=1牡=2,且条码的

叫=3%八叫=1他",且条码的排列为空—条—空—条,则可知当前字符的编码为0001011,是左侧偶字符9。

由于条码印刷和图像采集设备的限制,在图像采集时边缘部分还存在着半像素问题,实际扫描后得到的图像会出现一定程度的边缘模糊,尤其当条码密度较大,条空间距较小时

边缘模糊更为明显。

边缘出现模糊时,将导致寻找条空边缘时产生一定偏差,当这个偏差超

过半个模块宽度时,便会出现误码。

如果再考虑到流通过程中磨损、水渍浸泡等因素引起的

图像缺陷,在这种情况下如果用边缘检测的方法确定条空序列会大大降低条码的识别率。

文采用的方法为:

以起始模块的中心为起始中心、一个单位模块宽度为间距来检测条空序列。

4.2条形码扫描方向的判别

为了能够正确地解译条形码,在解译条形码符号所表示的数据之前,需要先进行条形

码扫描方向的判别,EAN-13的起始字符和终止字符的编码结构都是“101”,只能通过它进行码制的判别(对于多种条码识别的时候,其它码制的条码起始字符和终止字符都不是

EAN-13码的编码

“101”)但是不能通过起始字符和终止字符来判别它的扫描方向。

从而

结构可知,它的右侧字符为全偶,而左侧字符的奇偶顺序由前置符决定,没有全偶的,

可以利用此原理来确定EAN-13码的扫描方向。

如果扫描到的前6个字符为全偶,即为反

向扫描,否则为正向扫描。

4.3条形码字符的判别方法

从上述条码识别原理知,它的逻辑值可以通过和单位模块比较判别。

这种方法对于印

刷质量很好、没有缺陷的条码很适用,但是对于条码印刷质量存在缺陷,则不能正确地解译。

因此本文提出了一种解决此类问题的较好方法,即相似边距离测量方法。

「2

坷和卫爲如下:

7;/?

<2.5/7

32.5/75/7

43.5n

5

r=l,2

TJTXd门

表5列出了正向译码时EAN-13条码字符值与归一化值(月耳』石)的对应关系,表6

“E”表

列出了反向译码时EAN-13条码字符值与归一化值(卫爲川遐)的对应关系,其中

示偶字符,“O'表示奇字符。

表5EAN-13条码字符值与归一化值的对应关系(正向译码)

(丿石,虫爲)

2

3

4

5

>47;

2

O6

EO

O4

E3

3

E9

O2或O8

E1或E7

O5

1

4

O9

E2或E8

O1或O7

E5

=

5

E6

O0

E4

O3

 

表6EAN-13条码字符值与归一化值的对应关系(反向译码)

(»「虫爲)

2

3

4

5

2

E6

O0

E4

O3

3

O9

E2或E8

O1或O7

E5

4

E9

02或08

E1或E7

05

5

06

E0

04

E3

表7和表8分别为正向译码和反向译码时EAN-13条码编码与归一化值的对应关系。

 

表7EAN-13条码编码与归一化值的对应关系(正向译码)

1II1IIII1

左奇

左偶

右偶

字付

字符

字符

(旳L化)

字符

⑺兀吗)

编码

编码

编码

]|

」[

0001101

0100111

1110010

0011001

0110011

1100110

0

(5,3)

(2,3)

(5,3)

1

0010011

(4,4)

0011011

(3,4)

1101100

(4,4)

2

(3,3)

(4,3)

(3,3)

0111101

0100001

1000010

3

(5,5)

(2,5)

(5,5)

4

0100011

(2,4)

0011101

(5,4)

1011100

(2,4)

5

(3,5)

(4,5)

(3,5)

0110001

0111001

1001110

6

(2,2)

(5,2)

(2,2)

7

0101111

(4,4)

0000101

(3,4)

1010000

(4,4)

8

(3,3)

(4,3)

(3,3)

0111011

0010001

1000100

9

(4,2)

(3,2)

(4,2)

0110111

0001001

1001000

0001011

0010111

1110100

表8EAN-13条码字符值与归一化值的对应关系(反向译码)

1II1IIII1

字符

左奇

左偶

右偶

字符

字符

字符

(旳L化)

字符

僅兀吗)

编码

编码

编码

]|

]|

|[

1011000

1110010

0100111

1001100

1100110

0110011

0

(2,3)

(5,3)

(2,3)

1

1100100

(3,4)

1101100

(4,4)

0011011

(3,4)

2

(4,3)

(3,3)

(4,3)

1011110

1000010

0100001

3

(2,5)

(5,5)

(2,5)

4

1100010

(5,4)

1001110

(2,4)

0011101

(5,4)

5

(4,5)

(3,5)

(4,5)

1000110

1001110

0111001

6

(2,2)

(2,2)

(5,2)

7

1111010

(3,4)

1010000

(4,4)

0000101

(3,4)

8

(4,3)

(3,3)

(4,3)

1101110

1000100

0010001

9

(3,2)

(4,2)

(3,2)

1110110

1001000

0001001

1101000

1110100

0010111

只要

由表5~8可以看出,条形码编码和归一化值在多数情况下呈现一一对应的关系,

6中,左

确定了归一化值就能确定字符值,但是有四种情况例外。

以正向译码为例,在表

33,左侧偶字符1,7归一化值均为34,左侧偶字符2,8归一化值均为43,这几种情况可

以根据字符的条空宽度进一步判别。

表9为1728字符标准条空宽度值,其中字符上有“-”

的对应条,否则对应空。

表91728字符标准条空宽度值

0011011

1101100

1000100

0001001

0110111

根据表9中各字符条空宽度的特点可知:

①对于左侧奇字符、右侧偶字符1和7,可

通过比较G与6来判别,若0日>U+,则为字符1,反之为7;②对于左侧奇字符、右

 

对于左侧偶字符1和7,可通过比较G与G来判别,若>U?

则为字符7,反之为

1;④对于左侧偶字符2和8,可通过比较C立与"审来判别,若。

卫>G,则为字符2,

反之为8。

“0”进行译码,该

采用相似边距离归一化的条码识别方法,当条码质量存在缺陷使得实际测量值和条码应该具有的理论值有较大偏差时,仍能正确解译。

例如对于左侧奇字符

测量值进行译码,那么这四个元素的宽度测量值四舍五入取整后分别为

3、3、1、1,从而

造成译码错误。

若采取相似边距离归一化的条码识别方法进行译码,此时

&===33,r=7,A7[=5,A7^=3,由表〒知字符编码为左侧

奇字符“0”。

可见利用相似边距离归一化的条码识别方法判别字符值,可以得到比较满意

的效果。

4.4纠错处理

采用相似边距离归一化的译码方法能够在一定程度上消除条、空误差对译码识别的影

响。

当系统误差特别是条码印刷误差较大导致赛、爲改变时,译码将出错。

因此译码软件

应具有一定的纠错能力,以减少条空宽度值不精确的影响,提高条码识别率

[1]。

纠错主要从

以下两方面进行:

(1)如果条码字符的E或石在临界位置,当条或空的宽度有误差时,就会导致

坷或卫爲的整数值增1或减1。

如果和卫爲中只有一个发生错误,则引起该字符

的奇偶性、字符值的改变,如果卫石和都出错,则引起该字符值的改变,但奇偶性未

变。

实际情况中第一种现象出现的概率比第二种情况大得多,

因此本文主要对第一种情况进

行纠错。

由表1和表2可知,右侧字符为全偶字符排列,左侧字符有

10种奇偶排列,这

11种排列构成有效的排列集合,把所译的字符串奇偶排列与有效的奇偶排列对比,判断是

否为排列集合成员。

若是,所译的字符串不作任何处理;若不是,所译码出错,并找出吗

或卫■^哪个处在临界值,修改它的归一化整数值,这样可实现纠错。

(2)当字符数据为2、8、1、7时,由于条码宽度不精确导致误码,即2判成8、1

判成7,或反之。

分析这种误码相对于校验位的差值有一定规律,因此可利用此规律进行纠

错。

由EAN-13校验方法知:

当偶数位上有2错译成8或1错译成7时,计算得到的实译

值与校验值差-8或2,反之8错译成2或7错译成1时,计算得到的实译值与校验值差8

或-2;当奇数位上有2错译成8或1错译成7时,计算得到的实译值与校验值差-6或4,

反之,8错译成2或7错译成1时,计算得到的实译值与校验值差6或-4;当然别的字符

 

译错也可能出现这些差值,但几率很小,可以不予考虑。

这样若程序校验没通过,可加一个判断,根据差值判断其属于上述哪种情况,找出出错的字符并纠正。

5程序实现

5.1应用VisualC++生成条形码图像

5.11创建工程文件

1)打开VC++6.0,点击“File”菜单的“New”菜单项,在出现的界面中选定

Projects栏”,点击“MFCAPPWizard(exe),”工程文件名为Generator。

按“确定”按纽,进入MFCAPPWizard。

2)在MFCAPPWizard第一步选择Singledocument文档类型。

第二步和第三步

按默认方式。

第四步中去掉“Dockingtoolbar”、“Initialstatusbar”、“Printingand

printpreview"前面的V,即不选该三项。

然后点击“Advanced…”,在出现的界面

参见工程文件。

参见工程文件。

5.1.2类代码编制

3)点击“View”菜单的“ClassWizard”菜单项,在出现的界面中,选择ClassName

 

COMMAND、ON_ID_。

4)给类GeneratorView添加成员变量,参见源程序Generatorview.h。

5)打开文件GeneratorView.h,增加代码,参见源程序。

打开文件

GeneratorView.cpp,增加代码,参见源程序。

(6)点击“View”菜单的“Classwizard”菜单项,在出现的界面中,选择ClassName

为“CWelcomeDlg,增加成员函数,ObjectIds、Messages、Memberfunctions分别为:

IDOK、BN_CLICKED、OnOK()。

(7)点击“View”菜单的“Classwizard”菜单项,在出现的界面中,选择ClassName

为:

CmainFrame

、wM_CREATE、OnCreate()。

8)打开文件MainFrame.cpp,增加“#include"welcomeDlg.h"”,输入代码,

参见源程序。

9)打开GeneratorView.cpp源文件,增加语句“#include"GiveCodeDlg.h"

,输”入成员

#inc,lude"GiveSizeDlg.h",#include,#include

函数代码,参见源程序。

5.2应用VisualC++识别条形码图像

5.2.1创建工程文件

1)打开VC++6.0,点击“File”菜单的“New”菜单项,在出现的界面中选定

按纽,进入MFCAPPwizard。

 

…”,第四步、第五

printpreview"前面的“y,即不选该三项。

然后点击“Advanced

步和第六步按默认方式。

最终生成工程Recognizor。

(3)修改菜单。

①修改“

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1