Tesseract虚假空间识别

时间:2015-06-26 11:49:16

标签: c++ opencv ocr tesseract spaces

我正在使用tesseract来识别序列号。这是可接受的常见问题,如错误识别零和“O”,6和5,或M和H存在。 除此之外,这个tesseract为识别的单词添加了空格,图像中没有空格。以下图像被识别为“HI 3H”

Example Image 1

此图像会产生“FBKHJ 1R1”

Example image 2

所以tesseract增加了一个空间,尽管图像中没有空间。 是否有可能参数化tesseract的间距行为?

修改

对不起,忘了添加,我也有包含空格的序列号。因此,我无法删除已识别序列号中的所有空格。

例如,在将tesseract识别为 J4 F1583BB 之后,以下包含序列号空格的图像结果。除了对字符的识别是错误的,用该图像识别空间是正确的。

Example image 3

我对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字体。原因是我想,这有助于确定字符识别。这种Monospace字体类型的缺点是每个字符具有相同的宽度,即内核(字符之间的空格)不同。 请参阅以下来源Source

的示例图片

Proportional vs. Monospace

您认为哪种字体类型会获得更好的识别效果?

1 个答案:

答案 0 :(得分:0)

我不是C ++程序员,但我认为可以校准每个字母空间的宽度。我找到了这个参数" textord_space_size_is_variable "在这个site中,它表示"如果为true,则假定单词分隔符空格具有可变宽度,即使字符具有固定的音高。"

祝你好运! :)