我一直在尝试使用Tesseract识别一系列图像中的一些数字,在寻求建议后,我做了一些改进。到目前为止,我已经尝试了以下步骤:
尽管它们的边缘有些锯齿状,但它们的形状完全相同且完全对齐。处理过的图像示例:
Tesseract对这些确实没有问题,但它经常会混淆8个,3个,6个,5个,9个,5个。
我一直在寻找一些不同的方法来平滑图像和尝试不同的尺度,但我也想知道是否通过训练Tesseract的过程更有意义。只有10个可能的值总是几乎相同,似乎它不应该太难以学会识别它们,但训练Tesseract似乎也是一个巨大的痛苦。
有关如何在这些图像上获得Tesseract的最终精确度的任何建议吗?
我使用的是tess4j和Java,因此特别感谢特定于Java的建议和库。虽然我自己愿意实施算法,但我不想重新发明轮子。
答案 0 :(得分:4)
我尝试了一些预处理的想法,但没有取得多大进展,包括各种类型的灰度,图像颜色反转,调整大小和备用二值化策略。这些都没有改进我原来的,未调整大小的二值化。最终我决定给Tesseract训练一个机会。我按照这里的说明操作: Manual Tesseract Training Walkthrough
我很难找到任何帮助实际在Windows 64位工作的程序,最终手工完成大部分工作。我使用jTessBoxEditor编辑手动生成的.box文件,虽然我也在文本编辑器中进行了一些编辑,以添加盒子文件生成器遗漏的缺失字符的条目。我只有这些小tiff才能工作,所以我的训练文件不符合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
这是因为我需要在unicharset文件之前放置我的lang前缀,教程没有指示我这样做。完成后,我成功构建了 A 训练的数据文件。我不知道它是否会起作用,我将它放入我的tessdata目录,将我的语言切换到新的训练语言并再次尝试。
VOILA,它很完美。它似乎现在可以100%准确地识别我的数字(至少在我有限的样本量上)。我正在进行的唯一预处理是对图像进行二值化,而不进行进一步的清理或重新缩放。
所以,显然有一个小字符集,手动培训是值得的。花了我3个小时的时间来找到工作的工具,并在整个过程中克服困难。作为参考,我从14个tif开始,类似于我最初的帖子。其中四个在路上有一个错误或另一个错误加上我从cntraining中省略的1(但不是来自其他任何东西......?),所以就像... 9和2/3图像用于训练。由于我的角色的一致性,这显然已经足够了。