Tesseract错误空间识别(JavaCPP预设)

时间:2018-07-03 22:05:56

标签: java ocr tesseract javacv javacpp

我正在研究一个从视频中提取中文硬编码字幕的程序。我程序的最后一步将JavaCPP Presets for Tesseract库用于OCR。

TessBaseAPI api = new TessBaseAPI();

// Initialize tesseract-ocr with Simplified Chinese
if (api.Init(pathToTessdata, "chi_sim") != 0) {
    System.err.println("Could not initialize tesseract.");
    System.exit(1);
}

// Open input image with leptonica library
PIX image = pixRead(pathToInputImage);
api.SetImage(image);

// Get OCR result
BytePointer outText = api.GetUTF8Text();
String result = outText.getString();

该字符的识别效果很好,但是Tesseract偶尔会在图像中没有空格的地方添加空格。请考虑以下图片:

正确的输出为这么快就到了,但是Tesseract将其呈现为这么快就到 了。我相信这是因为除了顶部的水平线之外,字符了-仅由一条垂直线组成,左侧有很多空白空间。

我发现使用Tesseract和C ++的两个人已经面临相同的问题:Tesseract False Space RecognitionHow to keep Tesseract from inserting extra whitespace in words?。解决方案建议更改tosp_min_sane_kn_sp的设置。但是,我无法使用Java来运行它。

Google也找不到javacpp tosp_min_sane_kn_sp的任何内容。我尝试了api.SetVariable("tosp_min_sane_kn_sp", "2.8");,但没有成功。

我还试图声明我的字体是等宽字体-因为汉字是按定义的等宽字体-但无法弄清楚该怎么做。另外,如果某些数字出现在字幕中,则它们可能不是等宽的。

所以我的问题是:如何更改Tesseract对Java空间的敏感程度?

顺便说一句,简单地删除所有空格是不可行的,因为某些字幕确实包含空格,例如该文本的第一个和第二个字符之间。

如果有帮助,则空格通常如该图所示那样宽。任何帮助将不胜感激。

0 个答案:

没有答案