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

13

我正在尝试从图像中提取文本。由于图像的质量和大小不好,它会给出不准确的结果。我尝试了一些使用PIL的增强和其他方法,但这只会使图像的质量变得更糟。

有人能建议一些图像增强技术以获得更好的结果。以下是一些图像示例:

two

three


据我所了解,stackoverflow 上有相当严格的规则之一是专注于回答问题,而不是展示如何实现目标的其他方法,如果没有被问到的话。因此,如果您想要得到可以给您更好结果但不基于增强图像的答案,可以在您的问题中提出要求。 - Claudio
将我的回答标记为已接受怎么样?我有遗漏解释什么吗? - Claudio
请再次查看我的答案-我对其进行了一些解释。 - Claudio
请耐心等待。我使用了 PIL 应用了该概念并放大了图像,但结果不是完全准确的。我还没有接受答案,希望能得到更多的回答。 - sprksh
你还相信你会得到更多的答案吗? - Claudio
我认为现在是时候结束这个问题/答案循环了,这样每个人都能看到问题已经得到解答了... - Claudio
1个回答

12
在提供的图像示例中,文本视觉上质量相当不错,那么OCR为什么会给出不准确的结果呢?
为了说明本答案后续文本中所给出的结论,让我们运行给定的图像。

enter image description here

通过Tesseract进行OCR识别。以下是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像素,尽管这可以因字体而异。在x高度低于10个像素的情况下,您几乎没有获得准确结果的机会,在大约8个像素以下,大部分文本将被“去噪”。]

非常好的解释和答案。我一直在研究从图像中读取文本(用于识别文档部分的软件),我想知道您是否成功获得了某种动态变量,以确定必须放大图像多少次才能识别文本?对于800x800的图像,如果将其放大到1600x1600,则可以识别所有内容,但是,对于30x800的图像,需要将其放大到120x3200才能识别所有内容(逗号,点,斜杠等)。此外,您知道为什么单词“文件”无法很好地被识别吗?字母“i”不属于英文字母表。 - Vulovic Vukasin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接