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

时间:2018-01-09 14:48:03

标签: java opencv image-processing tesseract

我正在尝试制作一个可以从营养标签中读取信息的程序,但Tesseract有很多问题实际上能够阅读任何内容。我尝试过使用OpenCV的许多不同的图像处理技术,但似乎没什么帮助。

以下是一些我看起来更好看的尝试(恰好是最简单的):

Tango bottle label uneditied

Tango bottle label edited

输出:

  

200k],Saturates,09

Irn Bru bottle label unedited

Irn Bru bottle label edited

Output

这只是将图像更改为灰度,3x3高斯模糊和Otsu二值化。

对于如何使用OpenCV或任何其他图像处理库使文本更具可读性,我将不胜感激。

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

1 个答案:

答案 0 :(得分:-1)

首先阅读此StackOverflow Answer关于OCR预处理。

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

以下是一个例子:

原始图片

Original

灰度

Grey Scale

不清晰标记

Unsharp Mark

<强>二值化

Binarization

现在准备应用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();