如何在使用tesseract阅读之前清理图像文本?

时间:2017-09-05 07:12:32

标签: java imagemagick ocr tesseract

我正在使用tesseract从图像中读取文本。由于我的BinaryImage输入不是纯白色背景上的简单文本,因此我只得到50%作为正确的输出。

有没有办法预处理图像,以便我可以从tesseract获得正确的输出?我已经尝试使用Otsu's method进行灰度缩放和二值化图像,但没有任何改进。

当我使用java做这一切时,如果有人可以分享任何java lib的详细信息或步骤以从tesseract获得更好的结果,将会很有帮助。

我没有得到正确的ImageMagick文档也可以在我的Java代码中使用它。对此有任何帮助表示赞赏。

sample image ( any wireless bill of AT & T)

2 个答案:

答案 0 :(得分:0)

我认为您对账单的扫描可能分辨率太小。如果你有更高分辨率的图像(更大的尺寸),我相信你的效果会更好。您也可以尝试以非有损压缩格式保存扫描。你可以尝试局部区域阈值。但我不认为这会对这么小的文字有所帮助。不过,在ImageMagick中你可以用-lat命令来做。

convert image.jpg -negate -lat 25x25+10% -negate result.png

enter image description here

根据需要调整值。我还有一个bash unix shell脚本,textcleaner,可能在其他图像上更好。您可以在http://www.fmwconcepts.com/imagemagick/textcleaner/index.php

查看示例

答案 1 :(得分:0)

我尝试通过灰度缩放和二值化图像来优化输出,但这没有用。然后我尝试boofcv来锐化我的图像,我得到了90%的优化输出。

在锐化图像之前,如果分辨率不够大,我们可以使用以下代码重新缩放图像:

public static BufferedImage scale(BufferedImage img, int imageType, int dWidth, int dHeight, double fWidth, double fHeight) {
BufferedImage img = null;
if(img != null) {
    img = new BufferedImage(dWidth, dHeight, imageType);
    Graphics2D g = img.createGraphics();
    AffineTransform at = AffineTransform.getScaleInstance(fWidth, fHeight);
    g.drawRenderedImage(img, at);
}
return img;

}

万一,任何人都陷入同样的​​境地。