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

Image processing 如何告诉Tesseract我的字体有特定的大小?,image-processing,ocr,tesseract,Image Processing,Ocr,Tesseract,我收集了一组打印的图像标题,如下所示: 我知道这台打字机是一致的、单空格的,字符大小为14x22px(从大写字母的顶部到下降字母的底部) Tesseract正在生成如下输出: 当Tesseract检测到字母的正确边界框时,结果通常是好的。但是有许多字母串是聚集在一起的(例如第一行的“Ea”、“tree”、“fr”和“om”)。这些都是不正确的转录和占大多数的错误 这是令人沮丧的,因为我先验地知道所有的角色都有特定的大小。是否可以将此知识传递给teseract命令行工具 生成box文件的命令是

我收集了一组打印的图像标题,如下所示:

我知道这台打字机是一致的、单空格的,字符大小为14x22px(从大写字母的顶部到下降字母的底部)

Tesseract正在生成如下输出:

当Tesseract检测到字母的正确边界框时,结果通常是好的。但是有许多字母串是聚集在一起的(例如第一行的“Ea”、“tree”、“fr”和“om”)。这些都是不正确的转录和占大多数的错误

这是令人沮丧的,因为我先验地知道所有的角色都有特定的大小。是否可以将此知识传递给
teseract
命令行工具

生成box文件的命令是:

tesseract foo.jpg foo batch.nochop makebox

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

问题不是字体大小,而是字母连接。如果您使用显示实际像素(而不是将它们模糊在一起)的程序放大上述图像,您可以看到这两个字符实际上是连接在一起的。tessearctOCR完全基于连接的组件,因此,如果它们是连接的,那么它会将其完全丢弃。我看到了几个选择:

  • 如果可能,给它一个更高分辨率的图像,其中字符之间有更多的分离
  • 调整预处理以执行更严格的阈值。
  • 我注意到第一次出现时连接E和a的像素较亮,因此调整阈值将删除该连接。然而,这可能会影响到比你想要的更多的东西,例如,在你不期望的地方,角色脱节

  • 更新阈值的考虑如下:

    < P>我不确定TeSeStACT完全抛出连接字符,如Noremac所说。< /P> 事实上,我认为它包括在单词检测结果不令人满意时对连接字符进行切分,如本节第4.1段所述

    我还认为,一旦它找到一个固定音高的文本,它应该自动切掉文本,即使字符是连接在一起的(参见同一篇文章的图2)


    我知道现在添加这个答案有点晚了,但也许它会帮助一些未来的访问者

    感谢您的解释,我还没有意识到字符分割是基于连接组件的。在紧闭字母之间添加人造白线可以显著提高OCR。因为我知道每个角色应该有多宽,所以我很容易确定2、3或4是何时聚集在一起的。我可以简单地把盒子分开。是否可以让Tesseract对给定box文件的图像中的字符进行OCR?我宁愿绕过它的分割,因为我知道我可以做得更好。我不知道,除非你想让它对每个字符单独执行OCR。但是,如果你失去了上下文,比如字典中构成有效单词的周围字符,那么准确性可能会受到影响。值得一提的是,这一问题和其他问题导致我从Tesseract切换到Ocropus,它的管道更加透明。我写了一些关于这个过程的文章。你找到解决办法了吗?我最近遇到了一个类似的问题。我最终从Tesseract转换过来→奥克洛普斯。请参阅我对下面第一个答案的评论。5年后,tesseract可以使用默认设置正确处理该图像。