我正在使用JNI和使用OpenCV和Tesseract在C ++下开发的代码开发Android的OCR应用程序。它将用于从应用拍摄的照片中读取带有字母数字ID的徽章。
我开发了一个处理图像预处理的代码,以获得如下所示的“可读图像”:
我使用tesseract编写了以下“读取”图像的功能:
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图像质量的建议。此外,从https://github.com/tesseract-ocr/docs阅读文档,我尝试使用多边形来近似图像,以获得“更好”的功能。我使用的图像是这样的:
有了这张图片,我得到了“KO 978 A3705”。结果显然比前一个好,但不是很好。
我认为我传递给tesseract的处理过的图像很好,但是得到了很好的结果而且我没有得到它。我不知道还能做什么,所以我向你提出想法以解决这个问题。我需要一个确切的结果,我想我可以用我得到的处理过的图像得到它。好主意! =)
答案 0 :(得分:1)
我注意到,通过一些扩张,结果ORC结果得到了令人难以置信的改善!对我来说,这是解决方案