【问题标题】:Next step in image preprocessing for OCR with Tesseract (tess4j)使用 Tesseract (tess4j) 进行 OCR 图像预处理的下一步
【发布时间】:2015-02-25 03:03:30
【问题描述】:

我一直在尝试使用 Tesseract 来识别一系列图像中的一些数字,并在寻求建议后进行了一些改进。到目前为止,我已经尝试了以下步骤:

  • 以适当的阈值对图像进行二值化以挑选出数字
  • 将 Tesseract 限制为仅限数字
  • 使用多种方法放大图像(getScaledInstance 使用 Image.SCALE_SMOOTH,AffineTransform 使用 AffineTransformOp.TYPE_BICUBIC)
  • 探索不同的 Tesseract 页面分割模式。当前使用模式 6。

这些数字在形状上都是相同的,并且完全对齐,尽管它们的边缘有些锯齿状。处理后的图像示例:

Tesseract 对这些没问题,但它经常混淆 8 与 3、6 与 5、9 与 5。

我一直在研究不同的方法来平滑图像并尝试不同的比例,但我也想知道只是通过训练 Tesseract 的过程是否更有意义。只有 10 个可能的值总是几乎相同,看起来学习识别它们应该不会太难,但训练 Tesseract 似乎也很痛苦。

关于如何在这些图像上从 Tesseract 获得最终精度的任何建议?

我正在使用 tess4j 和 Java,因此特别感谢 Java 特定的建议和库。虽然我愿意自己实现算法,但我不想重新发明轮子。

【问题讨论】:

    标签: java image-processing ocr tesseract tess4j


    【解决方案1】:

    我尝试了更多的预处理想法,但没有取得太大进展,包括各种类型的灰度、图像颜色反转、调整大小和替代二值化策略。这些都没有比我原来的、未调整大小的二值化得到改进。最终,我决定试一试 Tesseract 培训。我按照这里的说明进行操作: Manual Tesseract Training Walkthrough

    我很难找到任何可以在 64 位 Windows 中实际运行的程序来提供帮助,最终我手动完成了大部分工作。我使用 jTessBoxEditor 编辑手动生成的 .box 文件,尽管我还在文本编辑器中进行了一些编辑,以添加框文件生成器遗漏的字符的条目。我只需要处理这些小问题,所以我的训练文件不符合 Tesseract wiki 指南,但是哦。

    我在使用 box.train 时遇到了一些错误:

    FAIL! apply_boxes BOXFILE LINE ... failure! COULDN'T FIND A MATCHING BLOB
    

    在无效的谷歌搜索之后,我决定忽略它们并继续前进。

    我在尝试运行 cntraining 时遇到了更多错误:

    Error: Illegal number of feature sets!
    signal_termination_handler:Error:Signal_termination_handler called:Code 3001
    

    在进行了更多徒劳的谷歌搜索之后,我基本上尝试依次省略每个 .tr 文件,以查看是哪个文件导致了问题。最终我能够用 1 个丢失的文件完成 cntraining。我不知道这对我的输出有什么影响,但我再次决定忽略它并继续前进。

    我在运行 combine_tessdata 时遇到了另一个问题:

    Error opening unicharset file
    Error combining tessdata files into foo.traineddata
    

    这是因为我需要将我的 lang 前缀放在 unicharset 文件之前,而本教程并未指示我这样做。之后,我成功构建了 A 训练数据文件。不知道它是否会起作用,我把它放到我的 tessdata 目录中,将我的语言切换到新的训练语言并再次尝试。

    瞧,太完美了。它现在似乎可以 100% 准确地识别我的数字(至少在我有限的样本量中)。我正在做的唯一预处理是将图像二值化,无需进一步清理或重新缩放。

    因此,显然对于一个小字符集,手动训练是值得的。我大概花了 3 个小时来摸索找到有效的工具,并在整个过程中拼凑起来。作为参考,我从 14 个 tif 开始,与我最初的帖子中的那些类似。其中四个在此过程中出现了一个或另一个错误,加上我从 cntraining 中省略的 1(但没有从其他任何东西中......?),所以就像.. 9 和 2/3 的图像进行训练。这显然已经足够了,这要归功于我的角色的一致性。

    【讨论】:

    • 给定适当且正确命名的输入文件,jTessBoxEditor 应该为您自动完成整个训练过程。
    • 伙计,我希望我能弄清楚如何做到这一点。我尝试在每一步都搜索自动化选项,并使用我认为正确的命名约定来命名我所有的输入 tiff。也许我今晚会再试一次。
    • 查看samples 文件夹中的示例。
    猜你喜欢
    • 2015-05-10
    • 2019-01-12
    • 1970-01-01
    • 2014-03-30
    • 2019-10-16
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多