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 无法识别单个字符的主要内容,如果未能解决你的问题,请参考以下文章