【问题标题】:OCR error correction: How to combine three erroneous results to reduce errorsOCR纠错:如何结合三个错误结果来减少错误
【发布时间】:2011-04-10 15:06:08
【问题描述】:

问题

我正在尝试通过组合来自三个不同 OCR 系统(tesseract、cuneinform、ocrad)的输出来改进 OCR 过程的结果。 我已经进行了图像预处理(去歪斜、去斑、阈值处理等等)。我不认为这部分可以改进很多。 通常要识别的文本长度在 1 到 6 个单词之间。文本的语言是未知的,它们经常包含幻想词。 我在 Linux 上。首选语言是 Python。

到目前为止我所拥有的

通常每个结果都有一两个错误。但他们在不同的字符/位置有错误。错误可能是它们识别出错误的字符或它们包含不存在的字符。他们不经常忽略一个角色。

示例可能如下所示:

Xorem_ipsum
lorXYm_ipsum
lorem_ipuX

X 是错误识别字符,Y 是文本中不存在的字符。空格替换为“_”以提高可读性。

在这种情况下,我会尝试组合不同的结果。 在三对之间重复使用“最长公共子串”算法,我可以获得给定示例的以下结构

or m_ipsum
lor m_ip u
orem_ip u

但是我现在卡住了。我无法将这些部分组合成一个结果。

问题

你有吗

  • 如何结合不同的想法 常见的最长子串?
  • 或者您有更好的办法解决这个问题吗?

【问题讨论】:

    标签: algorithm ocr error-correction


    【解决方案1】:

    这完全取决于您所使用的 OCR 引擎以及您可以获得的结果质量。您可能会发现,选择一个质量更高的 OCR 引擎,它可以为您提供置信度和边界框,首先会为您提供更好的原始结果,然后可以使用额外的信息来确定正确的结果。

    使用 Linux 会限制您可以使用的 OCR 引擎。与 Windows 下可用的商业 OCR 引擎相比,我个人认为 Tesseract 为 6.5/10。

    http://www.abbyy.com/ocr_sdk_linux/overview/ - SDK 可能并不便宜。

    http://irislinktest.iriscorporate.com/c2-1637-189/iDRS-14-------Recognition--Image-preprocessing--Document-formatting-and-more.aspx - 适用于 Linux

    http://www.rerecognition.com/ - 可作为 Linux 版本使用。该引擎被许多其他公司使用。

    与 Tesseract OCR 相比,上述所有引擎都应该为您提供置信度、边界框和更好的结果。

    https://launchpad.net/cuneiform-linux - 楔形文字,现已开源并在 Linux 下运行。这可能是您正在使用的三个引擎之一。如果没有,您可能应该考虑添加它。

    您可能还想查看http://tev.fbk.eu/OCR/Products.html 以获取更多选项。

    您能否提供一两个典型图像的样本以及引擎的 OCR 结果。还有其他方法可以提高 OCR 识别率,但这取决于图像。

    【讨论】:

    • 目前我正在使用 tesseract、楔形文字和 OCRAD。图像将来自不同的来源。有些将是照片,一些扫描和一些屏幕打印。有些有背景噪音,有些有非黑色字符...
    • 是什么导致您的 OCR 错误?是您使用的分区算法来查找图像上的文本吗?此外,图像是否倾斜。你有没有试过去斑。在某些情况下,您还可以尝试对照片进行阈值处理以去除背景颜色。
    • 为 OCR 引擎提供良​​好的边界框以供阅读也可以提高识别率。像您一样阅读混合文档将是一项挑战。
    • 我已经进行了图像预处理(去歪斜、去斑、阈值处理等等)。我不认为这部分可以改进很多。
    • 听起来你正在做大部分可能的事情。让事情变得更好的唯一方法是改进用于消除噪音错误的识别引擎,开始分析其他数据,如边界框、字符置信度、字典、三元组分析等。我会尝试确定引擎正在制作的原因他们首先出现的错误 - 低分辨率?噪音 ?有色?看看是否可以改进。使用另一个引擎或一些边界框信息,您可能会使您的原始提案生效。我需要查看样本和 OCR 结果才能进一步制作 cmets。
    【解决方案2】:

    也许重复“最长公共子串”,直到所有结果都相同。 对于您的示例,您将在下一步中获得以下信息:

    or m_ip u
    or m_ip u
    or m_ip u
    

    或对第一个和第二个字符串执行“最长公共子字符串”算法,然后再对第三个字符串执行结果。所以你更容易得到相同的结果or m_ip u

    所以你可以假设字母应该是正确的。现在看看空格。在or 之前有两次l 和一次X,所以选择l。在orm_ip之间有两次e和一次XY,所以选择e。以此类推。

    【讨论】:

      【解决方案3】:

      我是 OCR 的新手,但直到现在我才发现这些系统是基于单词词典而不是逐个字母构建的。因此,如果您的图像没有真实的文字,也许您将不得不更接近您正在使用的系统的字母识别和训练部分。

      【讨论】:

        【解决方案4】:

        我遇到了一个非常相似的问题。 我希望这可以帮助:http://dl.tufts.edu/catalog/tufts:PB.001.011.00001

        另请参阅 Bruce Robertson 开发的软件:https://github.com/brobertson/rigaudon

        【讨论】:

          猜你喜欢
          • 2015-03-03
          • 1970-01-01
          • 2019-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-12
          • 1970-01-01
          相关资源
          最近更新 更多