没有必要经历重新训练Tesseract的繁琐任务。是的,你会得到更好的结果,但在某些情况下你可以使用ENG训练集。
您可以通过注意以下事项来改善结果:
使用二进制图像作为输入,并确保在白色背景上有黑色文本
默认情况下,Tesseract会尝试用没有间距的东西来制作单词。尝试单独分割每个字符并将它们放在具有大量间距的新图像中。特别是如果你有字母和数字的组合,Tesseract将“纠正”这个以匹配周围的字符。
尝试使用白名单对图像的不同部分进行细分,以确定您应该知道的角色。如果您只在第一部分中查找数字,则使用Tesseract的单独实例来检测这些数字,仅使用数字白名单。
如果多次使用同一个对象而不重置它,Tesseract似乎有一个内存。这意味着每次执行OCR时都可以获得不同的结果。您可以重置Tesseract来对此进行计数或仅创建一个新对象。
最后但并非最不重要的,使用 resultIterator 通过Tesseract可以提供的方框。您可以检查每个字符的大小和置信度并相应地进行过滤。
resultIterator
根据我的经验:
1.如何使用Tesseract提高文本识别率?
首先,预处理。确保输入图像是具有良好阈值的二进制图像。 OpenCV 具有一组很好的功能来应用阈值算法,如Otsu算法以及轮廓检测,以帮助扭曲和旋转。
OpenCV
您还可以在OpenCV中使用轮廓检测来区分文本行。
一些过滤也会消除噪音,这通常会使测试混淆并增加处理时间。
为tesseract设置适当的配置(例如eng.config)。完整的配置列表( http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version )。一些例子包括黑名单,白名单,斩波等......
使用适当的标志。例如。 -psm 6 如果你正在做文本块而不是行
-psm 6
训练了我自己的语言数据......我想说只有你有足够的时间和资源才能这样做。或者,如果您的字体非常特殊(例如点阵)。
更新版的Tesseract(接近3.0)允许在同一个传递中使用多个语言文件( -l one+two )。这意味着您可以拥有一个经过专门培训的文本和另一个用于数字的文在我们的例子中,它似乎运作良好。
-l one+two
tesseract结果的后处理对我们来说也特别重要。字符串替换典型的错误识别和什么不是。
2.在Tesseract中应用了任何其他预处理步骤。
Tesseract使用leptonica库进行预处理。
3.在Tesseract OCR中完成了褪色文本。?
我倾向于认为是的。考虑到翘曲功能是leptonica的一部分。
Tesseract是一个高度可配置的软件 - 虽然它的配置文档很少(除非你想深入挖掘150K代码行)。这里有一个很好的综合清单 http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version 。
另外看看 https://code.google.com/p/tesseract-ocr/wiki/ControlParams 和 https://code.google.com/p/tesseract-ocr/wiki/ImproveQuality
如果您提供有关您正在进行OCR的数据的更多信息,您可以极大地提高质量。 例如如果图像都是遵循某些标准MRZ格式的国家ID或护照,您可以配置tesseract以使用该信息。
对于您附加的图像(MRZ),我得到以下结果,
IDFRADOUEL<<<<<<<<<<<<<<<<<<<<9320 05O693202O438CHRISTIANE<<N1Z90620<3
通过使用以下配置
# disable dict, freq tables etc which would distract OCR'ing an MRZ load_system_dawg F load_freq_dawg F load_unambig_dawg F load_punc_dawg F load_number_dawg F load_fixed_length_dawgs F load_bigram_dawg F wordrec_enable_assoc F # mrz allows only these chars tessedit_char_whitelist 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ<
另请参阅您的安装是否经过字体培训,以获得更准确的结果。在你的情况下,它似乎是OCR-B字体。