伴随文本识别:通过 OCR 增强条形码扫描
在本文中,我们将讨论如何使用开源 OCR 软件 Tesseract 从条码图像中识别伴随文本。
当使用线性条码(1D 条码)标记包裹、包装、产品和出版物时,相应的文本通常印在条码下方。条码是机器可读的,而伴随文本是人类可读的。如果条码损坏且无法识别,我们可以手动检查信息或利用 OCR(光学字符识别)技术作为自动条码扫描的辅助方法。
在本文中,我们将讨论如何使用开源 OCR 软件 Tesseract 从条码图像中识别伴随文本。此外,我们将演示如何使用 Dynamsoft Barcode Reader SDK 在复杂场景中获得更精确的结果。
使用 Tesseract OCR 识别伴随文本
当寻找免费的开源 OCR 引擎时,Tesseract 毫无疑问是首选,它最初由惠普开发,后来由 Google 开发和维护。
源代码可在 GitHub 上找到
https://github.com/tesseract-ocr/tesseract
访问 Wiki 页面 下载并安装预构建的二进制包。
安装完成后,您可以在命令行工具中运行“tesseract”命令。
看一下简单的场景。
运行以下命令
>tesseract accompanying-text.png output >type output.txt
有时,结果包含一些错误识别的字符,这对于默认训练的数据来说是不可避免的。如果您想使其更精确,最好自己训练数据。
您还可以将 Tesseract OCR 集成到 Python 程序中。安装 pytesseract - Tesseract OCR 引擎的包装器
pip install pytesseract
创建一个 test.py 文件
import argparse try: from PIL import Image except ImportError: import Image import pytesseract import sys def main(): # Get the input image file ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", type=str, help="path to input image") args = vars(ap.parse_args()) image = args["image"] if image == None: image = 'codabar.jpg' custom_oem_psm_config = r'digits' ## Invoke Tesseract OCR result = pytesseract.image_to_string(Image.open(image), config=custom_oem_psm_config) print(result) if __name__ == "__main__": main()
上面的代码将仅输出数字
如果我们尝试更复杂的图像呢?
这是 Tesseract 的识别结果
在这种情况下,Tesseract 几乎无法用于辅助条码扫描。首先,结果不正确。其次,我们不知道哪个伴随文本属于哪个条码。
Dynamsoft Barcode Reader 提供的有效 OCR 辅助
在最新版本 7.3 中,Dynamsoft Barcode Reader 具有 OCR 功能,旨在提高条码扫描的准确性。
下载 Dynamsoft Barcode Reader v7.3。
将示例代码 Dynamsoft\Barcode Reader 7.3\Samples\Desktop\C++\BarcodeReaderDemo 导入到 Visual Studio 中。
获取一个 免费试用许可证 并更新代码
reader.InitLicense("LICENSE-KEY");
启用识别伴随文本的模式
reader.GetRuntimeSettings(&runtimeSettings); runtimeSettings.barcodeFormatIds = BF_ALL; runtimeSettings.furtherModes.accompanyingTextRecognitionModes[0] = ATRM_GENERAL; iRet = reader.UpdateRuntimeSettings(&runtimeSettings,szErrorMsg,256);
从条码结果中获取伴随文本
for (int iIndex = 0; iIndex < paryResult->resultsCount; iIndex++) { PExtendedResult* extResults = paryResult->results[iIndex]->results; unsigned char* accompanyingTextBytes = (*extResults)->accompanyingTextBytes; printf("Accompanying text: %s\n", accompanyingTextBytes); }
按 F5 运行应用程序。
Dynamsoft Barcode Reader 可以正常工作。随着数据集的增长,文本识别率将在下一个版本中继续提高。
下一步是什么
Dynamsoft 条码开发团队正在开发价格标签 OCR,并将尽快发布第一个 Beta 版本。价格标签 OCR 可以将带有摄像头的机器人变成自动价格检查器,完全消除人为干预。机器人可以扫描杂货过道,同时捕捉价格标签的图像,读取条码以确定商品 SKU,并使用 OCR 将结构化定价信息返回以验证与数据库的价格是否一致。
技术支持
如果您对 Dynamsoft Barcode Reader SDK 有任何疑问,请随时联系 support@dynamsoft.com。
发布历史
v7.3,2020 年 1 月 2 日
新内容
- 添加了一种新的条码类型邮政编码,包括 USPS Intelligent Mail、Postnet、Planet、澳大利亚邮政条码、RM4SCC。
- 在结构体 PublicRuntimeSettings -> LocalizationModes 中添加了一种新的定位模式 LM_STATISTICS_POSTAL_CODE,用于识别邮政编码。
- 增加了获取线性条码顶部或底部伴随文本的功能。可以通过打开结构体 PublicRuntimeSettings -> FurtherModes -> AccompanyingTextRecognitionModes 来启用此功能。
- 实现了识别扭曲的 QR 码的功能。可以通过打开结构体 PublicRuntimeSettings -> FurtherModes -> DeformationResistingModes 来启用此功能。
- 实现了补全 QR 码和 DataMatrix 条码缺失部分的功能。可以通过打开结构体 PublicRuntimeSettings -> FurtherModes -> BarcodeComplementModes 来启用此功能。
- 添加了一个新设置 AutoFilter,用于设置是否在结构体 FrameDecodingParameters 中自动过滤帧。
- 添加了一个新设置 ScaleUpModes,用于设置具有小模块大小的线性条码的放大模式。可以通过打开结构体 PublicRuntimeSettings -> ScaleUpModes 来启用此功能。
已改进
- 改进了对安静区较窄的 DataMatrix 的解码精度。
- 改进了对模块尺寸较小的 1D 条码的解码精度。