Chinese Simplified (简体中文)

识别条形码

本节将描述用 ABBYY FineReader Engine 12 进行条形码识别的某些功能。条形码识别的主要方面在描述 条形码识别 方案时有所涉及。

在大多数情况下,如果条形码符合规格要求,则可用默认设置进行识别。其他情况下则需要指定某些参数。这些参数可通过 PageAnalysisParams 对象的 BarcodeParams 子对象进行指定。

有校验和的条形码

类型为 Code 39Interleaved 2 of 5CodabarMatrix 2 of 5 的条形码可能包括校验和。校验和用于错误检测。计算校验和的算法由该标准指定。您应该将 BarcodeParams 对象的 HasChecksum 属性设为 TRUE 以便有校验和的条形码可以得到正确识别。

重要事项! 如果校验和由标准提供,则识别结果不包括条形码校验和。

PDF417、Aztec、Data Matrix、QR Code、MaxiCode 条形码

默认情况下,ABBYY FineReader Engine 使用与规格要求对应的代码页来识别 PDF417AztecDataMatrixQR CodeMaxiCode 条形码。这些即为以下代码页:

  • 对于 PDF417 — DOS United States (437) (CP_US_MSDOS)
  • 对于 Aztec, DataMatrix, QR Code, MaxiCode — ISO Latin 1 (8859-1) (CP_Latin_ISO)

有时这些条形码与规格不符,即它们是用与规格定义的代码页不同的代码创建的。在此情况下,有必要通过 BarcodeParams 对象的 CodePage 属性手动指定代码页。

Structured Append 模式的二维码

二维码 可以通过用结构化附加格式依序结合最多16个代码来编码大量数据。BarcodeBlock 对象可让您通过 QrCodeSequenceIdQrCodeSequenceCountQrCodeSequenceIndex 属性访问结构化附加序列的特殊信息,您可以用它在程序中将已识别的代码结合在一起。

在条形码中编码的二进制数据

PDF417AztecDataMatrixQR Code 条形码可以编码文本和二进制数据。ABBYY FineReader Engine 可将包括二进制数据在内的所有已识别条形码数据呈现为文本。二进制数据如何以文本形式呈现取决于 BarcodeParams 对象的 ContainsBinaryData 属性的值:

ContainsBinaryData 的值 二进制数据呈现
FALSE(默认值)
  • 将每个包含二进制数据的字符的 IBarcodeSymbol::IsBinaryData 属性设为 TRUE。
  • 二进制数据以及文本数据则呈现为 Unicode 字符串 (IBarcodeBlock::Text)。
  • 使用 IBarcodeParams::CodePage 属性中指定的代码页将数据转换为 Unicode 字符串。若要接收 Unicode 字符串的二进制数据,您应该使用相应的代码页解码字符串。

注: 二进制零无法正确转换成 Unicode 字符串。字符串中的相应字符将会是“未识别字符”符号("^"),其 IBarcodeSymbol::IsBinaryZero 属性将被设为 TRUE。

TRUE
  • 将每个包含二进制数据的字符的 IBarcodeSymbol::IsBinaryData 属性设为 TRUE。
  • 二进制数据以及文本数据被呈现为 Unicode 字符串 (IBarcodeBlock::Text)。
  • 二进制数据会作为相应字节数的十六进制值序列保存在 Unicode 字符串中。例如,字符串“00FF02”将被用于以下3个字节数:0x00, 0xFF, 0x02。

识别过程

若要识别不符合规格的条形码或者含有校验和的条形码,请执行以下操作(我们假定 BarcodeRecognition_AccuracyBarcodeRecognition_Speed 预定义配置文件已加载):

  1. 使用 Engine 对象的 CreateDocumentProcessingParams 方法创建 DocumentProcessingParams 对象。
  2. 更改 BarcodeParams 子对象的必要属性的默认值(DocumentProcessingParams 包含 PageProcessingParams 属性,后者又包含 PageAnalysisParams,而PageAnalysisParams中又反过来含有 BarcodeParams)。
  3. DocumentProcessingParams 对象作为输入参数传递至 FRDocument 对象的 Process 方法。
  4. 如果使用其它方法进行处理,它们可能需要 PageAnalysisParamsPageProcessingParams 对象作为输入参数。按照同样过程,更改其中一个对象的 BarcodeParams 子对象的值。

C++ 代码

条形码的处理技巧

条形码识别质量取决于条形码打印质量和文档扫描进程中使用的设置。为了得到更好的条形码识别,请参考以下建议:

  • 必须用足够宽的白色间隔将条形码与其它文本分开。
  • 条形码大小及其单独条形或点的宽度必须满足以下要求:
    • 条形码高度最好超过10毫米。条形码大小应该小于A4。
    • 条形码高度必须大于文本行的两倍高度。
    • 对于非正方形条形码,长度必须大于高度。
    • 对于 1D 条形码,条形码中最细条的宽度必须至少为图像像素的3-5像素。
    • 对于 2D 条形码,单元格的尺寸应至少为2x2像素,建议尺寸为4x4像素或更大。此外,对于除 PDF417 外的所有 2D 条形码,单元格必须是方形的,因为如果 2D 条形码被拉伸,很可能会被错误识别。
  • 我们不建议使用 JPEG 压缩技术压缩条形码图像,因为这会模糊条形码的边界。
  • 我们不建议倾斜条形码,即条形码的角度应为相对于水平轴90度的倍数。
  • 灰度扫描模式是用于OCR的最佳模式。黑白扫描时请调整亮度设置。如果条形码“撕裂”或者颜色很淡,请降低亮度让图像变暗。如果条形码变形或者部分粘在一起,请增加亮度让图像变亮。
  • 避免在方框中打印条形码。
  • 避免在文本或者图片上打印条形码。

在现实生活中,不符合这些建议的条形码仍然可以被识别;但是其识别质量可能会很差。

另请参阅

条形码识别

条形码类型

03.07.2024 8:50:25

Usage of Cookies. In order to optimize the website functionality and improve your online experience ABBYY uses cookies. You agree to the usage of cookies when you continue using this site. Further details can be found in our Privacy Notice.