我试图通过组合来自三个不同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
但现在我被困住了。我无法将这些部分组合成结果。
你有吗
答案 0 :(得分:2)
这一切都取决于你使用的OCR引擎,你可以得到的结果的质量。您可能会发现,通过选择更高质量的OCR引擎可以为您提供置信水平和边界框,可以在一开始就为您提供更好的原始结果,然后提供可用于确定正确结果的额外信息。
使用Linux将限制可用的OCR引擎。我个人认为,与Windows下的商用OCR引擎相比,Tesseract的评分为6.5 / 10。
http://www.abbyy.com/ocr_sdk_linux/overview/ - SDK可能并不便宜。
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
。在l
和or
之间,有两次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