Tesseract 无法识别单个字符

Posted

技术标签:

【中文标题】Tesseract 无法识别单个字符【英文标题】:Tesseract does not recognize single characters 【发布时间】:2012-03-26 18:50:32 【问题描述】:

如何表示:

    使用油漆创建新图像(任何尺寸) 在此图片中添加字母 A 尝试识别 -> tesseract 找不到任何字母 将此字母复制粘贴到此图像 5-6 次 尝试识别 -> tesseract 会找到所有字母

为什么?

【问题讨论】:

【参考方案1】:

您必须将“页面分割模式”设置为“单字符”。

例如,在 android 中,您可以执行以下操作:

api.setPageSegMode(TessBaseAPI.pageSegMode.PSM_SINGLE_CHAR);

【讨论】:

谢谢!设置PageSegMode.SingleChar 解决了这个问题。 api.SetPageSegMode(tesseract::PSM_SINGLE_CHAR); 对于 C++ 用户 ;) 等效命令行参数:--psm 10【参考方案2】:

执行该配置的python代码如下:

import pytesseract
import cv2
img = cv2.imread("path to some image")
pytesseract.image_to_string(
     img, config=("-c tessedit"
                  "_char_whitelist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
                  " --psm 10"
                  " -l osd"
                  " "))

--psm 标志定义了页面分割模式。

根据 tesseract 的文档,10 表示:

将图像视为单个字符。

所以要识别单个字符,您只需要使用:--psm 10 标志。

【讨论】:

【参考方案3】:

需要将 Tesseract 的分页方式设置为“单字符”。

【讨论】:

嗯,这完全取决于您如何使用 tesseract。如果你从 shell 调用它,你会说tesseract $image $outbase -psm 10。 -psm 设置页面分割模式,模式 10 用于单个字符。这一切都在手册页中。 在某些情况下,模式 13 效果更好。或者使图像更小/更大可能会有所帮助。 将 psm 设置为 10 似乎没有什么不同。我的用例是较大的白色背景上的单个大字符。此示例中清晰的“A”会在 200 DPI 时产生 psm 为 10 的“-\n”。【参考方案4】:

你见过吗?

https://code.google.com/p/tesseract-ocr/issues/detail?id=581

错误列表将其显示为“不再是问题”。

一定要有高分辨率的图片。 如果要调整图像大小,请务必保持高 DPI,不要调整得太小 一定要train your tesseract system 在init Tesseract 之前使用baseApi.setVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); 代码 另外,您可以查看which font to use with OCR

【讨论】:

以上是关于Tesseract 无法识别单个字符的主要内容,如果未能解决你的问题,请参考以下文章

Tesseract OCR 无法识别除法符号“÷”

自动化脚本无法处理验证码?Python图片识别库Tesseract实战

为啥 Tesseract 数字识别无法正常工作?

有没有办法将 tesseract 用于个位数?

如何训练 tesseract 识别低 DPI 下的小数字?

无法识别 Tesseract 中的数字 - android