向Tesseract OCR引擎添加黑体字体支持

3
我正在努力让林肯字体在Tesseract中生效,即使经过了非常复杂的训练过程,结果也很糟糕。
这就是字体的样子,所以确实有点棘手:

Lincoln sample

我精心制作了一张训练图片,然后用它制作了一个框文件。训练图片在这里(25MB!)。该图片为300 DPI,并且具有代表性的字符,在垂直和水平方向上间距得很好。
我为训练图片创建了一个框文件,并且它正常工作。我使用框文件编辑器验证了它的正确性。
我使用这个框文件/tif文件创建了训练数据。我也同样地对Tesseract提供的30多个其他示例图像/字体进行了操作。
我创建了unicharset文件。
我创建了font_properties文件。该网站没有关于何时应该使用fraktur的指导。因此,我尝试了这种方式(Lincoln上开启fraktur):
eng.lincoln.box 0 0 0 0 1

而这样(去除黑体):

eng.lincoln.box 0 0 0 0 0

最后,我尝试了使用和不使用字典文件。当我使用字典文件时,它们来自于我的搜索引擎Sphinx的单词映射表,其中包含约15K个常见单词和约20K个不常见单词。
在所有情况下,当我尝试OCR 此文件(3MB) 的前几行时,质量都很差。与其得到:
United States Court of Appeals 
for the Federal Circuit

我得到:
OniteiJ %tates C0urt of QppeaIs
for the jfeI1eraICircuit

为什么?
2个回答

1

我不是Tesseract专家,但我已经评估了几乎所有可用的OCR引擎,我的评论基于多年分析OCR错误的经验。

只是想知道为什么您的图像背景有斑点而不是纯白色背景。我不知道Tesseract或训练工具如何工作,但背景可能会导致一些问题。

仅仅阅读示例页面就很困难,需要大量的注意力。例如F和I这样的字符非常相似,U和N也是如此。像许多OCR引擎一样,Tesseract将使用许多不同的技术来识别字符,在字体中使用的笔画和曲线之间没有太大的区别。

这些字符,特别是大写字符,由于与标准的拉丁/罗马类型字符非常不同,会混淆许多不同的匹配算法。这在您的结果中表现出来,即所有大写字母都有OCR错误。


1

我认为你需要更多的样本(字母)和更好的训练图像(干净的背景、灰度、300 DPI等)。首先尝试只使用一种字体(例如Lincoln)进行训练。您可以使用jTessBoxEditor工具生成您的训练图像并编辑框文件。

一旦您掌握了训练过程,就可以将其他字体添加到您的训练中。您可以通过在训练图像本身上执行OCR来测试所得语言数据的成功率--识别率应该很高。

font_properties中的字体名称应该是:

lincoln 0 0 0 0 1


1
最终,我制作了更大的训练文件,并一遍又一遍地重复训练过程,直到它成功为止。感谢您的帮助。 - mlissner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接