OCR纠错:如何组合三个错误结果以减少错误

时间:2010-09-10 08:03:07

标签: algorithm ocr error-correction

问题

我试图通过组合来自三个不同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

但现在我被困住了。我无法将这些部分组合成结果。

问题

你有吗

  • 一个想法如何结合不同的 常见的最长子串?
  • 或者你更了解如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

这一切都取决于你使用的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识别,但这取决于图像。

答案 1 :(得分:1)

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

or m_ip u
or m_ip u
or m_ip u

或者使用第一个和第二个字符串执行“最长公共子字符串”算法,然后使用第三个字符串再次执行结果。因此,您可以更轻松地获得相同的结果{。}}。

所以你可以假设字母应该是正确的。现在看看空间。在or m_ip u之前有两次or和一次l,请选择X。在lor之间,有两次m_ip和一次e,因此请选择XY。等等。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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

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