【发布时间】: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 文件。
标签: c++ opencv ocr tesseract spaces