Tesseract 错误空间识别
Posted
技术标签:
【中文标题】Tesseract 错误空间识别【英文标题】:Tesseract False Space Recognition 【发布时间】:2015-09-13 08:45:13 【问题描述】:我正在使用 tesseract 来识别序列号。这适用于可接受的常见问题,例如错误识别零和“O”、6 和 5,或存在 M 和 H。 除此之外,这个 tesseract 为识别的单词添加了空格,图像中没有空格。下图被识别为“HI 3H”。
此图像生成“FBKHJ 1R1”
所以 tesseract 添加了一个空格,尽管图像中并没有真正的空格。 是否有可能参数化 tesseract 的间距行为?
编辑
对不起,忘记补充了,我也有包含空格的序列号。所以我无法删除已识别序列号内的所有空格。
例如下图的序列号中包含空格的图片经过tesseract识别成:J4 F1583BB。除了字符的识别是错误的之外,该图像可以正确识别空格。
我对 tesseract 的实际参数是:
tesseract::TessBaseAPI tess;
tess.Init(NULL, "eng", tesseract::OEM_TESSERACT_ONLY);
tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
tess.SetVariable("tessedit_char_whitelist",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345789");
char* out = tess.GetUTF8Text();
string text = string(out);
编辑
从已经存在的答案中可以看出,例如,“J”和“I”之间的空间似乎比其他字符之间的空间多一点。我选择的字体类型是 Monotype 字体。原因是我认为这有助于 tesseract 进行字符识别。这种等宽字体类型的缺点是,每个字符都具有相同的宽度,内核(字符之间的空间)会发生变化。 查看以下来源Source的示例图片
您认为哪种字体类型会取得更好的识别效果?
【问题讨论】:
作为一个懒惰的家伙,我想问一下你的连续剧是否会包含空格? 对不起,编辑了我的问题,包含空格的序列号存在... 当你在TessBaseAPI
对象上调用 Init
时,你传入 "eng" 作为第二个参数。是指定字符集还是语言?如果是后者,您能否将其更改为仅指字母数字字符但不具有英语本身语义的选项?
不知道你的情况,但FBK
中的J和我之间的距离可能是一个空格,即使对于人类来说也是如此
好的,谢谢。在打开一个新问题之前我也已经搜索过了:)但是没有找到有用的东西,......但是我会更深入地看看你提到的 cpp 文件。
【参考方案1】:
我不是 C++ 程序员,但我认为可以校准每个字母空间的宽度。我在这个site 中找到了这个参数“textord_space_size_is_variable”,它说“如果为真,即使字符有固定的间距,单词分隔符空格也被认为具有可变宽度。” em>
祝你好运! :)
【讨论】:
没见过这么多参数可调。我会试试的,谢谢。【参考方案2】:调整参数tosp_min_sane_kn_sp
可能会有所帮助。我通过这样做解决了问题。
如果没有帮助,您可以尝试其他tosp_*
参数,或解决空间源代码“tospace.cpp”
【讨论】:
以上是关于Tesseract 错误空间识别的主要内容,如果未能解决你的问题,请参考以下文章