Tesseract OCR 不会忽略黑名单字符

Posted

技术标签:

【中文标题】Tesseract OCR 不会忽略黑名单字符【英文标题】:blacklist characters are not ignored by Tesseract OCR 【发布时间】:2013-02-18 10:05:09 【问题描述】:

我正在使用 Tessearct OCR 来识别图像的字符。但我希望 OCR 使用

忽略数字字符
_tesseract->SetVariable("tessedit_char_blacklist", "0123456789");

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

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

正如我们在上面看到的那样,OCR 将 12 转换为我不想要的 fl 。我希望 OCR 忽略 12

有什么方法可以得到 USD 而不是 USD fl

的结果

为此提供任何解决方案。任何帮助都将不胜感激。

【问题讨论】:

您可以简单地使用正则表达式从输出文本中删除数字字符吗? 我想改进结果。你有什么想法可以让我改进结果吗? 你好 @nguyenq 我想讨论一些与 tesseract sdk 相关的事情,你可以加入 chat.***.com/rooms/info/25582/… 通过将数字列入黑名单,Tesseract 被指示用其他可能不正确的字母替换它们——这使得删除真正的数字变得困难。所以不要将数字列入黑名单,让 Tesseract 检测到它们,然后用正则表达式从输出文本中删除它们。识别准确率仍然很大程度上取决于输入图像的质量,因此请尽可能对其进行预处理。 【参考方案1】:

方法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);

【讨论】:

【参考方案2】:

这不是tessedit_char_blacklist 的用途。 tessedit_char_blacklist 保证数字不会出现在图像中。如果你告诉 Tesseract 不正确的信息,你会得到不好的结果。

您想要的是对 Tesseract 的输出进行后处理。让它输出正确的OCR,然后去掉数字字符。

【讨论】:

以上是关于Tesseract OCR 不会忽略黑名单字符的主要内容,如果未能解决你的问题,请参考以下文章

React native + redux-persist:如何忽略键(黑名单)?

利用/**/来绕过黑名单

Android Tesseract OCR 7 段数字

tesseract 的 OCR 结果高度不一致

Java OCR tesseract 图像智能字符识别技术

Python+OpenCV+Tesseract实现OCR字符识别