通过pytesseract& amp;提高文本识别的准确性。 PIL

时间:2017-04-13 01:37:43

标签: python-3.x python-imaging-library ocr tesseract pytesser

所以我试图从图像中提取文本。而且由于图像的质量和尺寸不佳,它会产生不准确的结果。我用PIL尝试了一些增强功能和其他功能,但这只会降低图像质量。

有人可以建议对图像进行一些增强以获得更好的效果。几个图像的例子:

two

three

1 个答案:

答案 0 :(得分:7)

在提供的图像示例中,文本在视觉上具有相当好的质量,因此问题是OCR如何提供不准确的结果?

为了说明这个答案的进一步文本中给出的结论,让我们运行给定的图像

enter image description here

通过Tesseract。低于Tesseract OCR的结果:

"fhpgearedmomrs©gmachom"

现在让我们调整图像大小四次并对其应用阈值处理。我已经在Gimp中手动完成了大小调整和阈值处理,但是通过适当的调整大小方法和PIL的阈值,它可以确保自动化,因此在增强后你会得到一个类似于我所获得的增强图像的图像:

enter image description here

通过Tesseract OCR运行的改进图像提供以下文字:

  

“fhpgearedmotors©gmail.com”

这表明放大图像有助于在所提供的文本图像示例上实现100%的准确性。

放大图像有助于实现更好的OCR准确度可能看起来很奇怪,但是... OCR的开发是为了将打印介质的扫描转换为文本,并期望通过设计获得300 dpi的文本图像。这解释了为什么有些OCR程序没有自己调整文本大小以改善其结果,并且对于希望通过放大可以实现更高的图像dpi分辨率的小字体做坏事。

这里摘录Tesseract FAQ on github.com以上的陈述:

  

[有一个合理准确度的最小文字大小。你必须考虑分辨率和点大小。精度降至10pt x 300dpi以下,迅速低于8pt x 300dpi。快速检查是计算角色x高度的像素。 (X高度是小写字母x的高度。)在10pt x 300dpi时,x高度通常约为20像素,尽管这可能因字体而异。在10个像素的x高度以下,您获得准确结果的可能性很小,而在大约8个像素以下,大部分文本将被“去除噪声”。]