pytesseract:良好的 OCR 或良好的线条 - 绝不会两者兼而有之
Posted
技术标签:
【中文标题】pytesseract:良好的 OCR 或良好的线条 - 绝不会两者兼而有之【英文标题】:pytesseract: good OCR or good Lines - never both 【发布时间】:2019-10-20 08:44:41 【问题描述】:我正在使用 pytesseract(tesseract 版本 3.05)到 OCR(光学字符识别)以数字方式创建的打印 PDF 账单。我对其进行预处理以去除任何颜色并将其设置为纯黑白和 600 DPI。这是专有信息,所以我不能在这里发布,但请相信我 - 它非常直截了当且非常清晰。
在处理图像时,我一直在使用各种页面分割模式 (PSM)。
一些 PSM(例如 11 和 12)出色地识别字符 - 几乎完美 - 但单行会变成多行,并且经常会被打乱,使得数据解析在功能上是不可能的。
其他 PSM(例如 3 和 4)保持完美的线条(这有助于数据解析),但 OCR 很糟糕(插入空格,破折号变成撇号,'l' 会变成 '1' 甚至“我”等)。
我已经尝试了所有 PSM,但找不到可以让我保持线条和质量 OCR 的版本。
是否有额外的转盘可以让我同时进行这两种操作,并可能进一步提高生成文本的质量?
代码:
psm_version = 3
text = pytesseract.image_to_string(b_w_file, lang = 'eng', config = '-psm '.format(psm_version))
【问题讨论】:
没有示例图片无法提供帮助。 并非不可能,但无疑更难。我希望有人对 py/tessearct 有一些经验,知道这个问题,并且可以在没有图像的情况下提供指导。我会尝试发布一张图片,以便尽快编辑相关数据。 【参考方案1】:我不熟悉 pytesseract,但我已经相当广泛地使用 C# 端口。我正在喂它 .tiffs,具有讽刺意味的是,我制作的 .tiff 的 DPI 越高,Tesseract 的性能似乎就越差。我找到了 119 DPI 的最佳位置。我发现可行的解决方案是创建两个 .tiff,1 个用于输出的高 DPI 和 1 个提供给 Tesseract 的低 DPI。我让 Tesseract 迭代器将其找到的边界框的坐标传递给我,然后我在更高 DPI .tiff 上使用这些坐标来做我想做的事情。它不是最有效的过程,所以我已经转向其他选项并且不再拥有代码。希望这会有所帮助!
【讨论】:
哇,119,很奇怪。你还记得你使用的 PSM 吗? 我不得不返回并查看 github 以获取 PSM 描述,但它可能是 3 或 2。我认为降低 DPI 有助于它更容易识别事物,而 PSM 保持我的格式,如上所述。 嗯,谢谢你的建议,但不幸的是它没有帮助。 119 DPI 的字体几乎难以辨认,OCR 似乎随着 DPI 的增加呈线性改善。不幸的是,我的电脑没有内存来处理超过 600 的任何东西,所以表盘完全转动了。以上是关于pytesseract:良好的 OCR 或良好的线条 - 绝不会两者兼而有之的主要内容,如果未能解决你的问题,请参考以下文章
python(pillow /tesseract-ocr/pytesseract)安装介绍