本申请为07/851,505号申请的部分继续申请,在此如同详细提出一样引用它作为参照。 本发明一般涉及记录体及其制造系统与方法;更具体地涉及一种包含可消除或可擦除的机器可读的数据表示的记录体。
在某些类型的记录体上使用编码数据的优点在于大量的信息可以放置在一个较小的区域中。此外,可对编码信息加以保密并且只显露给具有适当的解码装置的人员。
本发明之前,仅有一种记录体能够最充分地利用放置在它们上面的编码数据的裨益,在这种记录体的整个使用期中,其数据并不改变;或者说在记录体与这些编码数据过期以前要经过相当长的时间间隔。诸如标价签、包装标志或火车票之类的记录体并不需要频繁地更新数据。另一种选择是将该记录体制成大到足以容纳额外的编码数据表示来不时地补充信息。频繁地更新编码信息的必要性抵消了某些种类记录体具有编码数据的优越性。例如,健康卡片与记录最好包含编码的数据,因为它们需要大量的必要信息并且是要求保密的。每次购物以后最好用编码数据将结余存款数印在记帐卡上。多次使用的入场券最好在券上包含已用过或尚未用过的次数的编码数据。其中包括具有多次讨论会的研讨班入场券或者包含多次乘坐与演出地游乐场入场券。在上述所有场合下,频繁地更新编码信息地必要性或者导致过大而不方便的记录体,或者频繁地用具有更新的编码数据的编码数据的新的记录体来代替旧的记录体。
从而,本发明的一个目的为提供一种具有编码数据的记录体,其编码数据可以更新而无须提供新的记录体。
本发明的另一个目的为提供一种具有编码数据的记录体,该记录体不需要额外的区域来增加更新的编码数据。
本发明的又一个目的为提供制造记录体的一个系统及其相关方法,每次要求改变该记录体上的编码数据时,不需要额外的区域或者制造一张新的记录体。
本发明的其它目的与优点一部分将在下面的说明中提及而一部分则是在说明中显而易见的或者是可以通过实践本发明而理解的。本发明的优点可利用所附权利要求书中具体指明的手段与工具来实现与获得。
为了达到这些目的并根据这里所体现与概括地描述的本发明的宗旨,按照本发明的一种记录体包含一个位于记录体上的印刷部分以及包含以一种可纠错的机器可读的格式编码的可消除的信息的一个信息部分。
用于至少在其一个部分中包含文字的一种记录体的按照本发明的一种打印机系统,该系统包括:用于接收待放置在该记录体上的信息的输入装置;编码装置,耦合于该输入装置,用于以一种可纠错的机器可读的格式编码所接收的信息;以及输出装置,耦合于该编码装置,包含消除记录体上除所接受的信息以外的任何编码信息的装置,以及在该记录体上可消除地放置编码信息的装置。
按照本发明的一种阅读器系统,用于具有包含以一种可纠错的格式编码的可消除的信息的信息区与文字的一种记录体。该系统包括,从该信息区中抽取信息的阅读装置;纠错装置,耦合于该阅读装置,用于对可消除的信息执行纠错以纠正所抽取的信息与输出中的一切错误。
结合在本说明书中并构成其一部分的附图示出了本发明的一些实施例,并与一般性说明共同说明本发明的原理。
图1A为根据本发明的一个实施例的与文字及照片联合使用的带有一种可擦除的二维条形码的健康记录体;
图1B为根据本发明的第二个实施例的具有印刷在一个易于消除及涂覆的标签上的编码字的入场券。
图1C为根据本发明的第二实施例的具有印刷在一个可取掉的标签上的数据字的一张记帐卡;
图2示出PDF417中一个码字的例子;
图3示出PDF417符号的整体结构;
图4为列出PDF417中一个给定的安全级上纠错码字的数目的表;
图5为印刷与阅读包含一个图象的码的一种系统的方框图;
图5A为读取、修改与重印一个记录体或标签的系统的方框图;
图5B为根据本发明的用于制造一个记录体的打印机的示意图;
图5C为图5B的打印机的操作流程图;
图6为图5与5A中的系统的编码装置的立体图;
图7为图5中的系统的识别装置的立体图;
图7A示出以手枪形设备实现的用于读取本发明的记录体的一种条码阅读器;
图8为数据输入设备与阅读器的立体图,其中一个键可输入来加密与解密数据;
图9为二维条形码符号的低级解码器所执行的步骤的流程图;
图10为该低级解码器在确定正在扫描的符号的尺寸与安全级时所执行的步骤的流程图;
图11为该低级解码器的一条扫描线上搜索一个起始或终止图形时所执行的步骤的流程图;
图12示出用于一个码字的“t序列”的各种宽度度量;
图13为该低级解码器在将一条数据扫描线解码成码字值的一个矢量及它们的群集号时所执行的步骤的流程图;
图14A、14B与14C示出一个码字矢量的实例;
图15为该低级解码器从扫描线数据中解码一个单个码字值及其群集号时所执行的步骤的流程图;
图16A与16B为该低级解码器使用码字矢量更新码字矩阵时所执行的步骤的流程图。
现在详细参照本发明的当前较佳实施例,它们的实例示出在附图中。
在一个实施例中,记录体上的编码信息是用可擦除的印色印刷的。在图1A中,健康卡16包含永久性地布置在其上的一张照片及人可读的文字并带有用可擦除的印色印刷在其上的一个二维代码18。二维代码的优点在于a)它是紧凑的,b)它能包含大量数据,c)它是可纠错的,及d)它保持隐私性。该二维代码,最好是下面要描述的PDF417码,可包含涉及个人健康状况的大量重要统计资料。在健康状况改变时,便消除可擦除的印色,而在原先的二维代码处代之以用可擦除的印色印刷的更新后的编码信息。
代替可擦除的印色,编码信息也可通过重印一个可取掉的标签来更改。图1B示出了包含一个标签11的一张入场券17,在该标签上具有包含与该记录体相关联的特权或者与持券人相关的编码信息的一个二维图形18。例如,如果入场券17是包含多次讲座的研讨会,标签11中的信息可指明持券人容许参加哪些讲座。当持券人参加一次讲座时,便可读取该入场券来确认持券人是否容许参加这一讲座。然后,在该入场券上印刷并附上一个新标签来反映持券人已参加过该讲座这一事实。这一信息可用于纯信息性目的或者用于防止多次授权参加同一讲座(或展览等)。
此外,如果入场券17是用于游乐场的,标签11可包含该入场券可用于哪些娱乐项目的编码数据。在进入一项娱乐项目时读取该标签,并在该入场券上印上一个新的标签说明持券人不买一张新的入场券便不能再次参加这一娱乐项目。
上述实例只是示例性的,例如,带有编码信息的标签的另一种用途便是用在图1C中所示的记帐卡上。可在记帐卡19上放置一个标签21来指明代款限额。每次使用记帐卡时,读取该标签来判定这次购物是否在限额之内。如果是在限额以内,便从该限额中减去这次购物的花费。并在该标签上印上指明减少后的限额的新限额。帐单付清后,银行会发给一张带有新的消费限额的一个新标签21。
在讨论编码与解码诸如二维条形码PDF417这样的机器可读图形格式的数据的方法与装置之前,对这种二维条形码PDF417码符号本身的结构有所了解是重要的。
每一个PDF417符号由一叠条形码信息的行构成,符号中的各行包括一个起始图形、若干称作“码字”的符号字符、以及一个终止图形。一个码字是编码一个表示某些值、字母或其它符号或与它们相关联的值的基本单位。各行中的码字构成数据列。
PDF417符号的行数与数据列数都是可变的。符号至少具有三行但可多达九十行。同样,每一行中的码字或数据列数可在三至三十之间变化。
每一个PDF417码字由17个模块或单元构成。在每一个码字中有四个条与四个间隔。单个的条或间隔的宽度可在一至六个模块之间变化,但每一码字的总宽度永远是17个模块。这样,每一个码字便可由一个八位的序列来定义,该序列表示码字中四组相间的条与间隔的宽度。这称作该码字的“X序列”并可以用序列X0,X1,…X7来表示。例如,对于一个X序列“51111125”,第一个元素为5个模块宽,跟随着五个一个模块宽的元素、一个两个模块宽的元素,而最后一个元素为五个模块宽,这一实例示出在图2中。
可能出现的码字的集合进一步划分成三个称作“群集”的互斥的子集合。在PDF417符号中,每一行只用这三个群集中之一来编码数据,并且每一群集顺序地每三行重复一次。由于任何相邻的两行使用不同的群集,解码器便能在同一条扫描线中区分来自不同的行的码字。
一个码字的群集号可使用下式从其X序列中确定:
群集号=(X0-X2+X4-X6)mod 9其中“mod 9”为用9除后的余数。参见图2中的码字,其群集号可计算如下:
群集号=(5-1+1-2)mod 9=3
为了使错误概率为最小,虽然在数学上可能有九种群集号,但PDF417只采用了三个群集。这样,每一行只采用三个群集0,3或6之一来编码数据,同一群集顺序地每三行重复一次。例如,行0的码字采用群集0,行1的码字采用群集3,而行2则采用群集6,等等。总之,群集号可从行号中确定如下:
群集号=((行号))mod 3)·3。
在PDF417中定义3从0至928的929个码字值。每一群集从不同的条-间隔图形表示这929个可资利用的值,因此一个群集不会与另一群集混淆。
图3为展示一个PDF417符号的整体结构的方框图。该符号的每一行包含一个起始图形、一个左端行标志码字Li、数据码字di或错误检测/纠正码字Ci、一个右端行标志码字Ri及一个终止图形。一行中最小的码字数目为3,其中包括左端行标志码字、至少一个数据码字及右端行标志码字。下面要进一步讲座的右端与左端行标志码字协助对该符号的结构进行同步。
起始与终止图形标识符号的各行的起点与终点。PDF417采用唯一的起始与终止图形。起始图形,即各行的左侧,具用唯一的图形或X序列“81111113”。终止图形,即各行的右侧,具有唯一的X序列“711311121”。
每一个符号包含一个指明该符号中码字总数的码字(行0中的第一个数据码字),以及至少两个纠错码字C0与C1。这两个纠错码字一起构成一个两个码字长的检验和。
一个PDF417符号还能编码具有纠错能力的数据。称作“安全级”的纠错能力的级别是由用户选定的并具有0到8的范围。例如,这意味着在级6上,总数为126个码字可从丢失或受到破坏而仍能读出与解码整个符号。图4为示出PDF417符号的安全级与纠错码字Ci的个数之间的关系的一张表。
除了纠正丢失或受到破坏的数据(称作“疑符”)之外,PDF417还能复原码字的错误解码。由于它需要两个码字来复原一个错误解码,一个用来检测错误、一个用来纠正错误,一个给定的安全级只能支持它所能具有的未解码的码字的一半数目的错误解码。
在PDF417格式的信息覆盖在部分地擦除了编码字上时,这一纠错特性尤其有用。这种部分擦除可能导致未擦除的代码部分使一部分编码信息产生畸变。如果出现了这一情况,可用PDF417二维条形码来纠正错误。
PDF417符号中的行标志码字包含若干关键成分:行号、行数、数据列数及安全级。但并不是每一个行标志包含有的成分。这些信息是分散在若干行中的,并且该图每三行重复自己一次。在行标志码字中编码这些信息的图形可示出如下:
行0:L0(行号,行数) R0(行号,列数)
行1:L1(行号,安全级) R1(行号,行数)
行2:L2(行号,列数) R2(行号,安全级)
行3:L3(行号,行数) R3(行号,列数)
等等。
换言之,第一行0的左端行标志码字L0包含行号(0)及该符号中的总行数。而行0的右端行标志码字R0则包含行号(0)及该符号中的数据列的数目,以此类推。
将数据编码或一个PDF417符号是典型的两步过程。首先,将数据转换成表示该数据的0到928的码字值。这称作“高级编码”。然后将这些值用特定的条-间隔图形物理地表示,这称作“低级编码”。
在07/851,505号美国参照申请中更全面地讨论编码器与解码器。
现在参见附图中图5-7,图5为从机器可读的图形图象格式在一个记录体上表示与识别数据的系统10的方框图。系统10包括一个编码装置(总体上从参照数字12表示)。以及一个识别装置(总体上以参照数字14表示)。编码装置12生产一个记录体16(见图1A),诸如一张健康卡、一张入场券17(见图1B)或一张记帐卡19(见图1C);其中每一张上包含文字与/或一张照片,与各记录体的文字相关联的可能有以一种二维图形编码的数据。识别装置14识别该二维图形以生成表示编码在各图形中的数据的输出信号。
输入装置22将待编码成记录体16、17或19上的二维图形中的数据输入到编码装置12。输入装置22输入的数据中包含待编码在二维图形18中的数据处理装置24将该数据组编码成一个二维图形并生成控制将记号传送到记录体16、17或19上(如在这一情况中)的传送驱动信号。虽然为了简化说明,这里我们将不时地参照记录体16,但应该理解的是,记录体17、19或者任何其它种类的记录体都可以受到上述处理。传送装置26检测机器可读的数据的存在并根据一个第一驱动信号将一种消隐液抹在记录体上包含检测到的表示的区域上来消除在记录体或标签上检测到的数据。然后,传送装置26启动一台吹风机在一段预定的时间内干燥所抹的消隐液。传送装置包括一台打印机38,该打印机传送一种对消隐液快速反应的与快干的传统印色。需要时,也可将人可读的数据传关到该记录体上。处理装置24生成另一但传送信号用于将人可读的数据传送到该记录体上。所有待编码的数据中的一部分及人可读的数据可从处理装置24的一个存储器或其它计算机文件中传送而不足用装置22输入。
识别装置14包括将记录体16、17或19上的图象转换成表示该记号的电信号的转换装置28。解码装置30将电信号解码成32处指出的解码器输出信号,这些输出信号表示编码在二维图形中的数据。
图6为编码装置12的一个实施例的透视图。图6的实施例只是为了示例的目的,并不意在限制本发明的范围。在本实施例中,图5的输入装置22是以将字母数字型及图形数据输入到编码装置12的键盘32的形式示出的。输入装置22可采用键盘以外的形式,诸如直接从文件上扫描输入到编码装置12中的数据的一种光学扫描装置。
再参见图6,图5的处理装置24是以一台处理器及显示器单元34的形式示出的。键盘32输入的数据被传输给该处理器与显示器单元34供存储与处理之用。除了输入数据,键盘32还可用于输入启动处理器单元34的操作的控制命令。
键盘32输入的数据最好显示在显示屏36上,并在输入一条适当的控制命令时将它们存储在存储器中。待编码成图形18的数据存储在处理器34中的一个第一存储器中,而要以人可读的格式传送的数据(如果有的话)则存储在一个第二存储器中。两种数据也可以存储在一个单一的存储器的独立部分中。从键盘32输入适当的控制命令时,处理器单元34将第一存储器中的数据编码成一个二维图形,例如11,18或21,并生成表示存储在第一存储器中的数据的第一传送驱动信号。处理器单元34还生成表示存储在第二存储器中的数据的第二传送驱动信号。
处理器单元34在图6中是示出为耦合于一台打印机38的,该打印机是图5的传送装置26的一种形式。对第一传送驱动信号作出响应,打印机38在插入其中的一个记录体上检测是否存在机器可读的数据。如果未检测到机器可读的数据,则第一传送驱动信号使打印机38用可擦除的印色将该二维图形的一个图象传送到一个记录体上或者位于该记录体的编码区域中的一个可取掉的标签上,并对第二传送驱动信号作出响应将第二组数据以人可读的格式印在该记录体上。例如,对于图1A中的实施例,如果检测到机器可读的数据,则在插入打印机中的记录体上涂上消隐液来消除记录体上检测到的数据。检测到的数据一经消除,便启动一台吹风机来吹干相应的记录体区域为印刷新的编码数据作好准备,然后用可消除的印色将该二维图形印在已消除了的部分中为了下一次更新编码数据作准备。
现在参见图7,识别装置14包括一个读卡机40,后者又包含图5的转换装置28与解码装置30,使用与采用的特定数据编码技术相对应的适当转换装置是本发明所仔细考虑的。
转换装置28可以是诸如317,433及317,533号美国专利申请中所公开的那种条形码阅读器,现将它们结合在这里作为参照,它们能够读出打印机38所用的印色。上述专利申请中公开的阅读器为开放系统设备,它们是设计成读取光学编码的二维条形码并将图形反射的光转换成表示该图形记号的电信号的。
参见图7A,转换装置的一个条形码阅读器的典型示例性实施例是以一种手枪形设备100实现的,它具有一个手枪柄型的把102。采用了一个手动式扳机开关104使用户能够启动光束117与检测器电路,这通常是在用户将该设备放置在指向要读取的符号的位置上以后才扣动扳机的。一个重量轻的塑料外壳166中包含一个激光源108、检测器110、光学与信号处理电路及CPU112、以及一个电源或蓄电池114。在外壳166的前端上的一个透光窗口116容许向外的光束117射出及入射的反射光122进入。阅读器100的设计是使用户在离开符号(即不接触符号或移动通过符号)的一个位置上将阅读器瞄准在一个条码符号上。通常,这种手持式条形码阅读器是规定为在数英寸或更远的范围内工作的。
阅读器100也可作为一台便携式计算机终端工作,并且在这种实施例中包括一个键盘与一台显示器,诸如在前面提到的4,409,470号美国专利中所描述的。
图7A中还描绘了可使用一个适当的透镜124(或多透镜系统)将扫描光束聚焦在一个适当的参照平面上的一个扫描光斑上。诸如半导体激光二极管这样的光源108将一个光束引导到透镜124的轴上,并使光束通过一个部分镀银的反射镜128及其它必要的透镜或束成形结构。该光束被一面摆动的反射镜130所反射,后者耦合在一台扫描电机132上,该电机在扣动扳机104时被加电。如果光源108产生的光是勉强可见的,则可在该光学系统中加入一束瞄准光。瞄准光(如果需要)生成一个可见的光斑,该光斑可以是固定不动的,也可以是象激光束一样地扫描的;用户在扣动扳机以前利用这一可见光束将阅读器单元瞄准在符号上。
返回到图5A,解码装置30将电信号解码或表示编码在记录体16上的数据的输出信号。解码器输出信号从识别单元40输出到各种输出装置42。图7描绘了输出设备的两个实例,一个是显示器单元44另一个是打印机46。显示器单元44可以是任何适当的显示器,诸如液晶显示器或CRT(阳极射线管)。打印机46可从是任何打印设备,诸如点阵打印机、激光打印机等。
本系统最大限度地利用可获得的空间来加密数据。对于一个二维条形码符号,编码数据的密度为在大约5英寸×1/2英寸的空间中可编码至少约1600个字符。除了紧凑以外,本系统还在信息传输中提供高安全性。
虽然在图5至7A中所示出的编码装置12与识别装置14为分开的设备,它们也可以放在同一设备中。这在读取与修改一个体时尤其有用。在这些情况中,将一个单一的单元用于两种目的是有效的。
图5A示出了与诸如16、17或19这样的记录体一起使用的一个系统10'的方框图。系统10'中包括与图5至7中所示的系统10的元件相对的元件。具体地说,系统10'包括一个转换装置28,该装置将来自一个记录体(诸如16、17或19)的编码数据转换成电信号,以及一个解码这些信号的解码装置30。然后,处理装置24读取这些经过解码的信号并按照一定的准则令传送装置26印刷适当的输出信号将记录体16、17、19修改成记录体16'、17'、19'。
可用多种方法确定新的信息。例如,如果该记录体是一张记帐卡19,处理装置24可以是一台大型计算机或者一个计算机网络,它掌握着贷款限额。
处理装置24最好还包括用于定位记录体16、17、19的选定的区域来读取印刷物的对准装置25。对准装置25对标识各行及这些行中的特定的字的字段进行解释。虽然对准装置25是作为处理装置24的一个部分示出的,但它也可从是转换装置28或者传送装置26两者之一中的一台微处理器。
数据也可以使用一种键控加密算法加以编码,这种算法只能用一个加密键来进行访问。如图8所示,数据输入装置47中包含该键控算法,并在输入键49时,数据便以一种独特的配置编码成一个二维图形。这一独特的配置只能被具有该独特的算法的阅读器48读取,并且只当在阅读器上输入键49才能读取。从而,使用键控加密实施例可以提供高度的的安全性。
本发明的另一个特征是使记录体上的图象成为一个“数字式的签名”,它是以加密的格式嵌入PDF417条码中的。建立这一二维数字信号的打印机这时使用一种只能用一个加密键访问的键控加密算法。使用一个具有该键控算法的键盘或其它数据输入装置,并且在输入该键时,在一个键盘上作为明文输入的数据便将以一种独特的解码配置编码成二维图形。这一独特的图形或代码配置只能被具有该算法的阅读器解码与读取,且仅当在该阅读器上输入这一相同的键时才能解码与读取。这便为需要这种安全性的应用提供了高度的安全性。
将一个记录体16、17、19送入转换装置28,在该装置中读取编码数据,并在30处解码;并最好加以显示。新的数据是在22处输入的,它们修改或者全面地改变分别在28与30处读取与解码的数据。然后,新编码的数据便在24处被处理;并由传送装置26传送,传送装置26包括一台诸如38'的打印机,该打印机可以将代码直接涂覆在记录体上或者涂在可取掉地贴在记录体上的标签上。
图5B示出一台打印机38',它是用常用的RAM(随机存取储器)式打印机38'改装成示出的形式的。打印机38'包括一个基座部分314,该基座部分具有支承记录体16的一个表面,该记录体是众一块低导板320送入打印机的。
在打印机的入口处有一个具有吸附表面324的滚筒322,该表面将来自容器326的消隐液涂覆在记录体16上。滚筒323可转动地连接在容器326上,而后者又可摆动地连接在基座314上。弹簧328顺射针方向将容器326偏转到与电磁线圈330接合的位置上并使滚筒324离开记录体16。当传感器332在记录体16中检测到机器可读的数据时,电磁线圈330被激励,而在送入记录体时将容器与滚筒322转动到消除位置上。在文件16继续向前送向一个印刷滚筒336的途中,一台风扇334被启动来快速吹干记录体的消除区域,滚筒336是可转动地连接在基座314上的,它以机器可读的数据格式将可消除的印色涂覆在记录体16上。
存在着许多已知的可消除的印色,例如在4,097,290号美国专利中所提及的。这些可消除的印色可用含有脱色溶液的众所周知的化学制品以公知的方法消除。虽然这里具体示出与描述的是应用消隐液;也可将带有一个平坦的擦试表面的几何形状的合成橡胶部件放置在与记录体的代码相接触的位置上并使之相对于记录体振动来机械地与摩擦地擦除该代码。此外,对于某些应用,还可将代码放在一个张可取下的胶粘标签上,从而在将其放入打印机之前可将整个标签取下而代之以另一个空白的标签,或者可用能擦除的印色来印刷一个可取掉的胶粘标签。
图5C为示出在一个记录体或标签上用可消除的印色印刷新的编码信息时事件序列的流程图。响应一个某一驱动信号,在步骤402启动记录体输送将记录体从一个槽或低导板慢速移动到打印机中。在判定步骤404中打印机判定记录体上有无编码数据。如果未检测到数据,则在步骤406加速传递记录体的电机将该记录体快速定位以便在步骤408印刷条形码。如果检测到了数据,并在判定框410确定该数据是在一张标签上;则在判定框411中判定该标签是否要消除。如果在判定步骤410确定数据是印刷在一张可取掉的标签上的并且该数据不需要消除,则在步骤406加速记录体的输送并在步骤408进行印刷。然而,如果在判定步骤410判定数据是直接印刷在记录体上的,则在步骤412通过激励电磁丝圈330来启动消除滚筒324将消隐液涂覆在印刷的数据上。当在步骤414中不再检测到数据时表明消除已经完成,便在步骤416启动吹风机334来加速干燥该记录体。在步骤416中启动吹风机后,经过步骤420所示的几秒钟的延时以在步骤418关掉吹风机。然后在步骤408中在该记录体的消除部分上印上一个二维条形码。印刷以后在步骤422停止输送记录体;并可从打印机中取出带有新的编码数据的记录体。
返到图5A,一个低级解码器可以包括在运行在与主计算机分开的微机上的一个计算机程序中。该低级解码器最好是通过一个诸如RS-232这样的标准接口连接到主计算机的,便于将解码后的码字值传输给该主计算机。此外,该低级解码器可以全部实现在硬件中,或者在硬件与软件的组合中,它可以在物理上位于扫描器本身或者主计算机中。
一个高级解码器将来自低级解码器的码字值矩阵解码成可用的数据,该高级解码器可以作为一个运行在主计算机上的独立计算机程序实现。例如,PDF417具有三种规定的模式及九种保留模式。规定的模式为Binary(二进制)、EXC(交换码)与Numeric(数字)。在Binary模式中,每一个码字能编码1.2个字节。在EXC模式中,字母数字型数据可以以双密度(即每一个码字两个字符)编码,而在Numeric模式中,数值型数据几乎可以以三倍的密度压缩。因此,主计算机112中的高级解码器根据模式进一步解码来自低级解码器114的码字值(0-928)以获取包含在符号中的实际数据。这时,来自高级解码器的解码后的数据便可供也在主计算机112上运行的用户应用程序使用了。
图9为展示低级解码器将一个二维条形码符号(诸如PDF417)解码成一个码字值的矩阵时的的操作序列的流程图。序列中的各步骤是在存储在处理器34中并由其执行的一个软件计算机程序中实施的。
图9中的第一步150中,低级解码器初始化扫描器接口并启动对符号的扫描。在这一步骤中所执行的实际功能取决于扫描器的类型关包含各种与扫描器相关的例程来初始化扫描器接口及启动扫描。
在步骤152中,低级解码器试图确定正在扫描的符号的尺寸及安全级。具体地说,这一步骤从左端与右端行标志码字中确定该符号的行数、数据列数及安全级。然后用这些尺寸来初始化用于解码该符号的一个二维码字矩阵及其它有关参数。该矩阵中的每一个位置上包括一个码字值及一个关联的置信度权值。它们起初是设置为零或或空值的。如果确定不了该符号的尺寸及安全级,则中止扫描。这一步骤将在下面结合图10更详细地讨论。
继续参见图9,步骤154是一个控制循环的第一步,在这一循环中重复扫描二维条码符号的行并将码字值填入码字矩阵中。重复执行该控制循环中的步骤直到矩阵中剩下的未能成功地解码的码字的数目小到可以用该符号的内在的纠错能力确定矩阵的其余部分为止。从而,如果未能成功地解码的码字的数目小于该符号根据其安全级的纠错能力(见图4),则在步骤154试图利用纠错码字来纠正该矩阵。如果尝试的纠错是成功的,则在步骤156退出该控制循环并在步骤158结束扫描。否则,如果纠错尝试失败,则执行下面的步骤160-164试行解码更多的码字来填入该矩阵中。
首先,步骤160在来自存储器的缓冲区中的一条数据扫描线中搜索一个起始或终止图形。如果找到了一个起始或者终止图形。则该低级解码器在步骤162中试图在该扫描线中解码尽可能多的码字。具体地说,将该数据扫描线剖析成单个的码字,并将它们的值与群集号放置在准备结合进码字矩阵中的一个码字矢量中。下面将分别结合图11与13更详细地讨论步骤160与162。
在步骤164中对步骤162生成的码字矢量进行分析,并用它来更新码字矩阵。具体地,步骤164根据每一个码字的最接近的相邻码字是否也能被解码来赋给该码字值一个置信度权值。并且根据左端或右端行标志码字及该码字的对应群集号赋给每一个码字值行号。如果扫描线越过一条行界线,可用码字的群集号来确定每一单个码字的正确行号。例如,如果一条解码后的扫描线具有行号为2的一个左端行标志,而随后的码字的群集号则为6,0,0,3,则将这些码字对应地放置在下列位置中:(行2,列1);(行3,列2);(行3,列3);及(行4,列4)。这样,在一条单一的数据扫描线中可包含来自一行以上的码字,然后可将它们归入码字矩阵中的适当位置中。下面将结合图16A与16B更详细地讨论这一步骤。
图10为更详细地展示上面图9的步骤152中所涉及的确定一个符号的尺寸及安全级的步骤序列的流程图。在图10的第一步骤170中,低级解码器在来自存储器的缓冲区的一条数据扫描线中搜索一个起始或终止图形。这一步骤与图9中的步骤160相同并将在下面结合图11更详细地讨论。
然后,步骤172解码紧邻在上一步骤中找到的起始或终止图形的第一个码字。如图3所示,这一码字将是包含行号以及符号的行数、数据列数、安全级三者之一的一个左端或者右端行标志码字。如果起始与终止图形都找到了,则对左端与右端行标志都进行解码。解码单个码字的步骤序列在下面结合图15进一步讨论。
在图10中继续往下,在步骤174中从上一步骤172中所确定的码字值及群集号中抽取编码在该行标志中的特定尺寸或它全级。例如,对于群集号为0的一个左端行标志码字,则从该码字值中抽取行数。
赋给每一尺寸与安全级的置信度权值是初始设置为0的。步骤176-184以下述方法更新在上一步骤中抽取的尺寸或安全级的当前值与置信度权值。首先,将这一特定的参数(比如行数)与在前面解码中得到的行数的当前值进行比较。如果行数的当前值与新近解码的值相等(如在步骤176中所判定的),则在步骤178中提高赋给该行数的置信度权值。然而如果当前值与新近解码的值不等,则在步骤180中降低该置信度权值。如果在步骤182中判定赋给该特定参数的置信度权值降低到了零以下,则在步骤184中用新近解码的值取代当前值并赋给该参数一个新的最小权值。
步骤186判定所有三个参数,即行数、数据列数与安全级,的置信度权值都超过一个予定的阈值。如果是这样,则在步骤188中根据行数与列数的当前值初始化二维码字矩阵。同时可以按照图4中的表从安全级的当前值中确定可纠正的错误数目。如果在步骤186中判定并非所有三个置信度权值都超过该阈值,则程序控制返回到步骤170,在一条新的线中开始搜索起始与终止图形。重复执行步骤170-184直到所有三个参数都成功地以高置信度解码为止。
图11为更详细地展示在上面图9的步骤160与图10步骤170中所涉及的在一条数据扫描线中搜索一个起始或终止图形的步骤序列的流程图。简单地说,搜索从存储器的缓冲区得到的单一数据扫描线的第一个位置开始,并在顺序的位置上重复进行直到找到一个匹配的图形或者超过了该扫描线的长度为止。当找到一个匹配的图形时,则为解码邻接的码字而在紧随该图形之前或之后的一个位置上设置一个下标。
如图11所示,第一步骤200将指向扫描线中的数据元素的位置的一个下标设置为“1”,指示该扫描线的第一个数据元素或整数值。这一下标是为了与起始与终止图形进行比较而用于标识该扫描线中每一个八个元素的序列的第一个元素的。
步骤202是在扫描中从左至右搜索一个起始或终止图形的一个迭代循环的第一个步骤。在这一步骤中,如果当前下标小于该扫描线的长度,则执行剩下的步骤继续搜索。然而,一旦该下标超过了扫描线的长度,便退出这一循环并返回一个指示说明搜索失败并未找到一个起始或终止图形。
低级解码器不是使用码字的X序列而是用“边到相似边”测量来补偿印刷符号时出现的印色扩散以解码一个符号的。这样,在步骤204中,从该下标所指定的位置开始,将相连的两个整数值逐对相加而从扫描行中得到一个原始的“t序列”。具体地说,对应于图12所示的七个宽度测量值t1,t2,…t7的原始t序列可以通过将表示条与间隔的宽度的整数值X0,X1…t7中相连的两个逐对相加而计算如下:
t1=X0+X1
t2=X1+X2
t3=X2+X3
等等
在步骤204中还通过求出八个整数值X0+X1+X7的和计算出整个码字的宽度W。
例如,对于图12中的码字,表示条与间隔的宽度的来自扫描线的整数值序列可能是诸如:43,19,21,19,22,18,103,96。这时原始t序列t1,t2,…t7为62,40,40,41,40,121,199而宽度W则为341。
在图11的步骤206中,对步骤204中得出的原始t序列进行正则化并四舍五入成整数值。具体地说,首先将该码字的宽度W除以每一个码字的单元的总数求出该码字的“模块”或“单元”的值。在一个PDF417符号中,每一码字为17个单元,所以将宽度W除以17求出码字的单元。这样,对于图12中的实例,单元为(341/17)=20.0。然后将原始t序列的每一个值除以该单元并四舍五入成一个整数来正则化该t序列。图12中的码字的正则化t序列为3,2,2,2,2,6,10。
然后,在步骤208中将正则化的t序列与该码的起始与终止图形的t序列进行比较。如果扫描器是从左到右及从右到左两个方向上进行扫描的,则该t序列必须在它们的正反两个方向上与起始及终止图形进行比较。
如果在步骤210中找到一个匹配图形,则在步骤214中将下标设置为扫描线中紧随一个起始图形后面的一个位置或紧靠在一个终止图形前面的一个位置。如果当前t序列既不匹配起始图形又不配匹终止图形,则在步骤212中将下标增加一并重复执行步骤202至210直到找到一个匹配图形或者超过了扫描线的长度为止。
图13为更详细地展示上面图9的步骤162中所涉及的将一条数据扫描线解码成一个码字矢量及它们的群集的步骤序列的流程图。从扫描线中解码单个码字值及群集号时,低级解码器从起始或终止图形开始解码并解码尽可能多的码字。对于不能成功地解码的那些码字,则将码字矢量中的码字值设置为“BAD”(“坏”)。
在完成了图13中所示的步骤序列时,在对应于成功地解码的码字的相应结果上,该码字矢量将包含一定的码字值与群集号。图14A示出了码字矢量的一个例子,其中十列中的八列上的码字是成功地解码的。列1与列10中的码字值分别对应于行2(L2)中的左端行标志码字与行1(R1)中的右端行标志码字。列5与7中的码字不能成功地解码,所以在码字矢量的这两个位置上中用记号“BAD”指明。
返回到图13的第一步骤220,将可以解码的码字数目的上限(“cwlimit”)设置为等于该码字矩阵的列数。如果成功地解码了这一数目的码字,显然当前扫描线的解码过程业已完成。
如果扫描器是在从左至右及从右至左两个方向上扫描的,则在步骤222中判定扫描方向。如在步骤222中判定这一次特定的扫描是从左至右的,则在步骤224中将第一个码字的列号设置为“1”,并将每解码一个相继的码字向增加的数值(“incr”)设置成“+1”。反之,若扫描是从右至左的,则在步骤226中,扫描线的第一个码字的列号将为该码字矩阵的最后一列,而增量值则设置为“-1”。
步骤228是一个控制循环的第一个步骤,在该循环中从数据扫描线中解码单个的码字值及其群集号。在步骤228中,检测码字限值是否仍大于零。如果不是,则该扫描线中的所有码字都已解码而退出该循环。
否则,步骤230从扫描线中得出下一个码字值及其群集号。这一步骤将在下面结合图15更详细地讨论。
如果在步骤232中判定上一步骤中解码的码字是一个合法的码字,则在步骤234中将该码字值及其群集号保存在码字矢量中对应于该码字的列的位置上。这样放置在码字矢量中码字值已准备就绪加入到码字矩阵中了。
然而,如果在步骤230中解码的码字不是一个合法的码字,则在步骤236中将码字矢量中对应于当前列的码字值设置为“BAD”以指明这一码字未能成功地解码。一个“BAD”码字最有可能出现在扫描线在该码字中间跨越两行间的界线时。
最后,在步骤238中,根据扫描的方向增加或者减小当前列号,并将码字限值减少一。只要还想解码该扫描线中所有的码字,便重复执行步骤228-236。
图15为示出对应于图13中步骤230及图10中步骤172的步骤序列的流程图,其中试图从扫描线中解码出单个码字值及群集号。在第一步骤240中,从该扫描线中得出一个原始t序列及宽度W。同样的步骤在前面已经结合图11中的步骤204讨论过了。
在步骤242中,将假定为下一个码字的八个元素的宽度W与前面解码过的码字的宽度进行比较。如果当前宽度W不在加减一个予定的差值(delta)的范围之内,则在当前码字中可能存在着一个分裂(少计算若干组两个元素)或者合并(多计算若干组两个元素)错误。不再对这一码字进行解码,而在步骤244中将其值与群集号都设置为“BAD”以指胆它是不能解码的。
然后在步骤246中,以前一个码字的宽度为基础,找出一上其对应的宽度W落入一个码字的期望宽度的一个给定的容差范围内的t序列,以此来试图重新同步下一个码字的边界。如果当前宽度W明显地大于该期望宽度而表明可能存在一个合并错误,则从t序列中丢弃最后两个整数值直到它落入适当的限值范围内为止。同样,如果当前宽度W明显地小于该期望宽度而指明可能存在一个分裂错误,则将该扫描线中后面两个整数值加入到该t序列中直到它落入适当的限值范围内为止。
如果在步骤242中判定当前宽度W是在期望宽度的一定容差范围内,则试图解码这一码字。在步骤248中,对原始t序列进行正则化,如上面结合图11中步骤206所描述的。然后在步骤250中从正则化的t序列确定群集号。群集号可从t序列(与上述X序列不同)确定如下:
群集号=(T1-T2+T5-T6)mod9。
对PDF417码字而言,合法的群集号为0,3与6。如在步骤252中判定的群集号不是0,3或6,则该码字不是合法的。从而,在步骤254中将该群集号与值设置为“BAD”以指明该码字无法解码。
否则在步骤256中,利用正则化的t序列及其群集号在一张查找表中找出对应的码字值。如果找不到该t序列的对应码字值,则将该码字值设置为“BAD”以指明它是无法解码的。
最后,在步骤258中将“最后宽度”值更新为码字的当前宽度W,供从该扫描线中解码下一个码字值时使用。
图16A与16B一起构成为了用码字矢量更新码字矩阵,低级解码器所执行的步骤序列的流程图。这两张图十分详细地说明上面所讨论的图9中的步骤164。
图16A的第一步骤260检验码字矢量中的第一与最后的值是否为一个合法的行标志。如果码字矢量中的第一与最后一个值都不是合法的行标志,则在步骤262中程序退出该例程并不再试图用该码字矢量去更新码字矩阵。
然而,如果存在着一个合法的行标志,则在步骤264中赋给该码字矢量中的每一个码字值置信度权值。具体地,赋给每一个码字的置信度权值是取决于该码字的最接近的相邻码字及它们的群集是否也能解码的。例如,如图14B所示,赋给列1,2,3,9与10中的码字值高置信度权值(“H”),因为它们的近邻也已成功地解码且具有相同的群集号。赋给列4与8中的码字值中等置信度权值(“M”),因为它们的一个近邻是成功地解码的且具有相同的群集号,但另一个相邻的码字值则为“BAD”。赋给列3中的码字值非常低的置信度权值(“L”),因为它的两个邻居都不是成功地解码的。从而,码字矢量中列i上的一个码字值的置信度权值实质上是列i-1,i与i+1上的码字的群集号的一个函数。这一函数可用一张查找表来表示,该表的索引是从这三个码字的群集号中计算出的。
在步骤266中,根据行标志码字及群集号赋给字矢量量中的每一个码字值一个行号。如图14C中的例子所示,左端行标志码字L2指出行号为2与群集号为6。列2-4中的码字值的群集号也是6。因此,赋给该码字矢量的前四列中的码字值行号2。
同样在图14C的例子中,列6与8-10全部具有群集号3并且右端行标志码字R1指明行号为1。因此,可从假定该扫描线跨越行2与行1的行界线而列6与8-10中的码字值必须归入行1中。
一旦赋给了码字矢量中每一个码字值置信度权值与行号,便逐个地更新码字矩阵中的码字。在步骤268中,将码字矢量与码字矩阵的列号C都初始地设置为“1”。步骤270是一个迭代循环的第一个步骤,该循环逐一通过码字矢量中的码字,并用它们来更新码字矩阵中的对应码字及其相关置信度权值。当列号C在步骤270中超过了列数时,则该码字矢量中的所有码字都已处理过了而该例程结束。
对于该码字矢量中的每一个码字,步骤272将码字矩阵的行号R设置成在步骤266中赋给码字矢量中位置C上的码字的行号。这样,对于该码字矢量中的每一个码字值便有一个码字矩阵中位置【R,C】上的值与之对应。
在图16B中继续下去,步骤274判定码字矩阵中位置【R,C】上的当前码字值是否与码字矢量中列C中的对应码字值相同。如果这两个值相同,则在步骤276中赋给矩阵位置【R,C】上的码字值置信度权值上增加码字矢最中对应的码字值的置信度权值。如果不同,则在步骤278中从矩阵中的码字值的置信度权值中减去矢量中的码字值的置信度权值。
如果在步骤278中减小了置信度权值,则在步骤280中检测该置信度权值是否降低到了零以下。如果该置信度权值小于零,则在步骤282中用码字矢量中的码字值来取代码字矩阵中对应位置上的当前码字值。并且在步骤284中将赋给矩阵中的码字值的置信度权值改变成一个正的值。
最后,在步骤286中将列号C增加一去处理该码字矢量中的下一个码字值,同时程序控制返回到步骤270为该矢量中的所有列重复执行步骤272至286。
简单回顾一下图9中的步骤154,在每一次用码字值的新矢量填充码字矩阵并更新了它们的置信度权值以后,便尝试用该符号的内在纠错能力去填充矩阵的其余部分。尚未成功地解码的码字的数目与位置可以通过将赋给矩阵中的每一个码字值的置信度权值与一个予定的阈值进行比较来确定。具有低于该并值的置信度权值的那些码字值可以认为是尚未解码的。如果尚未解码的码字的数目小于由安全级确定的该符号的纠错能力,则尝试去纠正该矩阵。
对于熟悉本技术的人员而言,显而易见,可以在不脱离本发明的范围或精神的条件下,在解码方法与装置中作出各种修改与变化。在仔细考虑过这里所公开的说明书与通过对本发明的实践以后,本发明的其它实施例对于熟悉本技术的人员而言便是显而易见的了。本说明书及实例只是旨在作为示例用的,而本发明的真正范围与精神则是由以下的权利要求书确定的。