黑名单字符不被 Tesseract OCR 忽略。

3
我正在使用Tessearct OCR来识别图像中的字符。但是,我希望OCR忽略数字字符,使用的方法是

_tesseract->SetVariable("tessedit_char_blacklist", "0123456789");

通过这种方式,OCR无法识别数字字符,但它会提供一些其他字符代替它们,而我不想要那些字符。

例如:有一张图像上有文本USD 12,当我对该图像应用OCR时,它会提供USD fl

如上所示,OCR将12转换为fl,而我不希望出现。我想忽略OCR中的12

有没有办法让结果显示为USD而不是USD fl

请给我任何解决方案。感谢您的帮助。


你能否使用正则表达式简单地从输出文本中删除数字字符? - nguyenq
我想要改善结果。你有什么建议可以让我改善结果吗? - Nishant Tyagi
你好 @nguyenq,我想讨论一些关于Tesseract SDK的事情,你能否加入http://chat.stackoverflow.com/rooms/info/25582/tesseract-ios?tab=general? - Saurabh
通过将数字列入黑名单,Tesseract被指示用其他可能不正确的字母替换它们--这使得删除真正的数字变得困难。因此,不要将数字列入黑名单,让Tesseract检测它们,并使用正则表达式从输出文本中删除它们。识别准确性仍然在很大程度上取决于输入图像的质量,因此如果可能的话,请对其进行预处理。 - nguyenq
2个回答

7
请查看此评论中关于SetVariable()方法的说明:
// For most variables, it is wise to set them before calling Init.

我和你遇到了相同的问题,将代码移动到Init之前解决了这个问题:

tess = new TessBaseAPI();    
tess->SetVariable("tessedit_char_whitelist", 
   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
tess->SimpleInit([dataPath cStringUsingEncoding:NSUTF8StringEncoding],  
   "eng", false);

4

这不是tessedit_char_blacklist的作用。 tessedit_char_blacklist用于确保图像中没有数字。如果您向Tesseract提供错误的信息,您将得到错误的结果。

相反,您需要的是对Tesseract输出进行后处理。让它输出正确的OCR,然后只需删除数字字符即可。


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