我正在尝试制作一个可以从营养标签中读取信息的程序,但Tesseract有很多问题实际上能够阅读任何内容。我尝试过使用OpenCV的许多不同的图像处理技术,但似乎没什么帮助。
以下是一些我看起来更好看的尝试(恰好是最简单的):
输出:
200k],Saturates,09
这只是将图像更改为灰度,3x3高斯模糊和Otsu二值化。
对于如何使用OpenCV或任何其他图像处理库使文本更具可读性,我将不胜感激。
放弃使用Tesseract并使用机器学习会更简单吗?
答案 0 :(得分:-1)
首先阅读此StackOverflow Answer关于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();