通过 pytesseract 和 PIL 提高文本识别的准确性

Increase Accuracy of text recognition through pytesseract & PIL

所以我想从图像中提取文本。由于图像的质量和尺寸不好,它给出的结果不准确。我用 PIL 尝试了一些增强和其他东西,但这只会恶化图像质量。

有人可以建议对图像进行一些增强以获得更好的结果。一些图片示例:

在提供的图像示例中,文本在视觉上质量非常好,所以问题是 OCR 给出不准确结果的原因是什么?

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

通过 Tesseract。下面是 Tesseract OCR 的结果:

"fhpgearedmomrs©gmachom"

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

通过 Tesseract OCR 改进的图像 运行 给出以下文本:

"fhpgearedmotors©gmail.com"

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

放大图像有助于实现更好的 OCR 准确性可能看起来很奇怪,但是 ... OCR 的开发目的是将印刷媒体的扫描件转换为文本,并通过设计期望文本的 300 dpi 图像。这解释了为什么一些 OCR 程序没有自行调整文本大小以改善其结果,并且在期望图像的更高 dpi 分辨率的小字体上表现不佳,这可以通过放大来实现。

此处摘自 Tesseract FAQ on github.com 以证明上述陈述:

[There is a minimum text size for reasonable accuracy. You have to consider resolution as well as point size. Accuracy drops off below 10pt x 300dpi, rapidly below 8pt x 300dpi. A quick check is to count the pixels of the x-height of your characters. (X-height is the height of the lower case x.) At 10pt x 300dpi x-heights are typically about 20 pixels, although this can vary dramatically from font to font. Below an x-height of 10 pixels, you have very little chance of accurate results, and below about 8 pixels, most of the text will be "noise removed".]