提高 tesseract ocr 结果的质量

Improve quality of tesseract ocr result

我正在使用 JNI 为 Android 开发 OCR 应用程序,并使用 OpenCV 和 Tesseract 在 C++ 下开发代码。它将用于从应用拍摄的照片中读取带有字母数字 ID 的徽章。

我开发了一个处理图像预处理的代码,以获得如下所示的"readable image":

我使用 tesseract 为 "reading" 图像编写了以下函数:

char* read_text(Mat input_image)
{
    tesseract::TessBaseAPI text_recognizer;
    text_recognizer.Init("/usr/share/tesseract-ocr/tessdata", "eng", tesseract::OEM_TESSERACT_ONLY);
    text_recognizer.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
    text_recognizer.SetImage((uchar*)input_image.data, input_image.cols, input_image.rows, input_image.channels(), input_image.step1());
    text_recognizer.Recognize(NULL);
    return text_recognizer.GetUTF8Text();
}

预期的结果是"KQ 978 A3705",但我得到的是"KO 978 H375"。

我提出了 https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality. In addition, reading the docs from https://github.com/tesseract-ocr/docs 中关于提高图像质量的所有建议,我尝试使用多边形对图像进行近似以获得 "better" 特征。我使用的图像是这样的:

有了这张图片,我得到了 "KO 978 A3705"。结果明显比上一个好,但是还不行。

我认为我传递给 tesseract 的经过处理的图像足以获得良好的结果,但我不明白。我不知道还能做什么,所以我问你的想法,以解决这个问题。我需要一个准确的结果,我想我可以用我得到的处理后的图像得到它。请出主意! =)

我注意到通过一些扩张,结果 ORC 结果改善得非常好!对我来说,这是解决方案