我正在研究一个从视频中提取中文硬编码字幕的程序。我程序的最后一步将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 Recognition和How 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空间的敏感程度?
顺便说一句,简单地删除所有空格是不可行的,因为某些字幕确实包含空格,例如该文本的第一个和第二个字符之间。
如果有帮助,则空格通常如该图所示那样宽。任何帮助将不胜感激。