使用Tesseract和OpenCV(Java)从图像中读取文本

使用Tesseract和OpenCV(Java)从图像中读取文本,java,opencv,image-processing,tesseract,Java,Opencv,Image Processing,Tesseract,我正在尝试制作一个程序,可以读取营养标签上的信息,但是Tesseract在阅读任何东西时遇到了很多问题。我用OpenCV尝试了许多不同的图像处理技术,但似乎没有多大帮助 以下是我的一些好看的尝试(碰巧是最简单的): 输出: 200k],饱和,09 这只是将图像更改为灰度、3x3高斯模糊和大津二值化 如果您能帮助我使用OpenCV或任何其他图像处理库使文本更具可读性,我将不胜感激 放弃使用Tesseract而使用机器学习会更简单吗?首先阅读有关OCR预处理的文章 上述最重要的步骤是图像二

我正在尝试制作一个程序,可以读取营养标签上的信息,但是Tesseract在阅读任何东西时遇到了很多问题。我用OpenCV尝试了许多不同的图像处理技术,但似乎没有多大帮助

以下是我的一些好看的尝试(碰巧是最简单的):

输出:

200k],饱和,09

这只是将图像更改为灰度、3x3高斯模糊和大津二值化

如果您能帮助我使用OpenCV或任何其他图像处理库使文本更具可读性,我将不胜感激

放弃使用Tesseract而使用机器学习会更简单吗?

首先阅读有关OCR预处理的文章

上述最重要的步骤是图像二值化图像去噪

以下是一个例子:

原始图像

灰度级

取消锐化标记

二值化

现在准备好应用OCR了吗

JAVA代码

Imgproc.cvtColor(original, grey, Imgproc.COLOR_RGB2GRAY, 0);

Imgproc.GaussianBlur(grey, blur, new Size(0, 0), 3);

Core.addWeighted(blur, 1.5, unsharp, -0.5, 0, unsharp);

Imgproc.threshold(unsharp,binary,127,255,Imgproc.THRESH_BINARY);

MatOfInt params = new MatOfInt(Imgcodecs.CV_IMWRITE_PNG_COMPRESSION);
File ocrImage = new File("ocrImage.png");
Imgcodecs.imwrite(ocrImage,binary,params);

/*initialize OCR ...*/
lept.PIX image = pixRead(ocrImage);
api.SetImage(image);
String ocrOutput = api.GetUTF8Text();