我尝试了更多的预处理想法,但没有取得太大进展,包括各种类型的灰度、图像颜色反转、调整大小和替代二值化策略。这些都没有比我原来的、未调整大小的二值化得到改进。最终,我决定试一试 Tesseract 培训。我按照这里的说明进行操作:
Manual Tesseract Training Walkthrough
我很难找到任何可以在 64 位 Windows 中实际运行的程序来帮助我,最终我手动完成了大部分工作。我使用 jTessBoxEditor 编辑手动生成的 .box 文件,尽管我还在文本编辑器中进行了一些编辑,以添加框文件生成器丢失的缺失字符的条目。我只有这些小 tiffs 可以解决,所以我的培训文件不符合 Tesseract wiki 指南,但是很好。
使用 box.train 时出现一些错误:
FAIL! apply_boxes BOXFILE LINE ... failure! COULDN'T FIND A MATCHING BLOB
在无效的谷歌搜索之后,我决定忽略它们并继续前进。
尝试运行 cntraining 时出现更多错误:
Error: Illegal number of feature sets!
signal_termination_handler:Error:Signal_termination_handler called:Code 3001
在进行了更多无效的谷歌搜索之后,我基本上尝试依次省略每个 .tr 文件,以查看是哪个文件导致了问题。最终我能够用 1 个丢失的文件完成 cntraining。我不知道这对我的输出有什么影响,但我再次决定忽略它并继续前进。
我在运行 combine_tessdata 时遇到了另一个问题:
Error opening unicharset file
Error combining tessdata files into foo.traineddata
这是因为我需要将我的 lang 前缀放在 unicharset 文件之前,而本教程并未指示我这样做。之后,我成功地构建了一个经过训练的数据文件。不知道它是否会起作用,我把它放到我的 tessdata 目录中,将我的语言切换到新的训练语言并再次尝试。
瞧,太完美了。它现在似乎可以 100% 准确地识别我的数字(至少在我有限的样本量中)。我正在做的唯一预处理是将图像二值化,无需进一步清理或重新缩放。
因此,显然,对于一个小字符集,手动训练是值得的。我大概花了 3 个小时来摸索找到有效的工具,并在整个过程中拼凑起来。作为参考,我从 14 个 tif 开始,与我最初的帖子中的那些类似。其中四个在此过程中出现了一个或另一个错误,加上我从 cntraining 中省略的 1(但没有从其他任何东西中......?),所以就像.. 9 和 2/3 的图像进行训练。这显然已经足够了,这要归功于我的角色的一致性。