我该如何告诉Tesseract我的字体有特定的大小?

4
我有一组打印机打出的图像标题,如下所示: Typewritten text 我知道打印机是一致的,等宽的,字符测量为14x22px(从大写字母顶部到下降者底部)。
当Tesseract检测到正确的字母边界框时,输出结果如下: OCR results for typewritten text 当许多字母串聚在一起时(例如第一行上的“Ea”,“tree”,“fr”和“om”),结果通常会出现问题。这些总是被错误地转录,并且占据了大部分错误。
很不爽,因为我预先知道所有字符都是特定大小的。是否可能将此信息传递给tesseract命令行工具?
生成框文件的命令如下:
tesseract foo.jpg foo batch.nochop makebox

如果可能的话,我更愿意避免在字体上训练Tesseract——我没有手动转录的样本,因此构建训练数据语料库需要一些努力。

你找到解决方案了吗?最近我遇到了类似的问题。 - Yang Kui
我最终从Tesseract转换到Ocropus。请参见下面第一个答案的评论。 - danvk
五年后,Tesseract可以使用默认设置正确处理该图像。 - user202729
2个回答

8
我不确定Tesseract是否像Noremac所说的那样完全忽略连接字符。实际上,我认为每当单词检测的结果不尽如人意时,它就会包含连接字符的切割,正如在Tesseract OCR引擎概述的第4.1段中所解释的那样。
我还认为,一旦它发现了固定间距文本,即使字符相连(请参见同一篇论文的图2),它也应该自动切割文本。
我知道现在回答有点晚了,但也许对一些未来的访客有所帮助!

2
问题不在于字体大小,而在于字母之间的连接。如果您使用能够显示实际像素(而不是将它们模糊在一起)的程序放大上面的图片,您会看到那些组合的两个字符实际上是连接在一起的。tessearctOCR完全基于连接组件,所以如果它们有任何连接,那么它就会完全失效。我看到了几个选项:
  1. 如果可能,请提供更高分辨率的图像,其中字符之间有更多的分离
  2. 调整预处理以进行更严格的阈值。
    1. 我注意到第一次出现的E和a之间连接的像素较浅,因此调整阈值将删除该连接。然而,这可能会影响超出您期望的字符分离。
更新阈值时请考虑以下内容:https://groups.google.com/forum/#!topic/tesseract-ocr/JRwIz3xL45U

感谢您的解释,我之前没有意识到字符分割是基于连通组件的。在接近的字母之间添加人工白线可以显著提高OCR质量。由于我知道每个字符应该有多宽,所以很容易确定何时将2个、3个或4个字符结合在一起。我只需将框分开即可。是否有可能让Tesseract在给定盒文件的情况下OCR图像中的字符?我更喜欢绕过它的分割,因为我知道我能做得更好。 - danvk
除非您希望对每个字符执行OCR,否则我不知道有什么方法可以做到这一点。但是,这样会失去上下文,例如构成字典中有效单词的周围字符,因此准确性可能会受到影响。 - Noremac
5
就我个人而言,这和其他问题促使我从Tesseract转向Ocropus,后者在其管道方面更加透明。我写了几篇博客文章关于这个过程。链接 - danvk

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