2017-04-13 31 views
7

所以我试图从图像中提取文本。而且由于图像的质量和尺寸不好,它会给出不准确的结果。我用PIL尝试了一些增强功能和其他东西,但这只会加剧图像的质量。通过pytesseract&PIL提高文本识别的准确度

有人可以在图像中提出一些增强来获得更好的结果。图像的几个例子:

two

three

+0

据我了解,这里对于stackoverflow的规则非常严格,其中一条规则是专注于回答问题,而不是展示如果没有要求,还可以做些什么来实现目标。所以,如果你想要的答案也可以给你更好的结果,但不是基于增强图像的感觉,可以随意在你的问题中提出。 – Claudio

+0

如何将我的答案标记为已接受?我错过了解释一些事情吗? – Claudio

+0

P.S.再次检查我的答案 - 我已经添加了一些解释。 – Claudio

回答

4

在图像的提供的示例文本在视觉上是相当不错的品质,所以这个问题是怎么弄的是OCR给出的结果不准确?

为了说明这个答案的进一步文中给出的结论让我们通过正方体运行给定的图像

enter image description here

。下面的Tesseract OCR的结果:

"fhpgearedmomrs©gmachom" 

现在让我们来调整图像的四倍,并应用阈值到它。我已经在Gimp中手动完成了大小调整和阈值设置,但是通过适当的调整大小方法和PIL的阈值,它可以确保自动化,以便在增强后获得类似于我获得的增强图像的图像:

enter image description here

通过正方体OCR改进的图像运行给出以下文字:

“fhpgearedmotors©gmail.com”

这表明恩缩小图像可以帮助在提供的文本图像示例上实现100%的准确性。

放大图像有助于获得更好的OCR准确度,但是可能会出现奇怪现象,但是... OCR是为了将印刷媒体的扫描转换为文本并期望通过设计获得文本的300dpi图像而开发的。这就解释了为什么一些OCR程序没有自行调整文本大小以改善结果,并且为了能够通过放大而实现图像的更高dpi分辨率的小字体做得不好。

这里从Tesseract FAQ on github.com prooving上述声明的摘录:

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

+0

非常好的解释和很好的答案。我一直致力于从图像中读取文本(用于识别文档部分的软件),并且我想知道您是否设法获得某种动态变量,即必须放大图像的次数以便能够识别文本?对于800x800的图像,如果放大到1600x1600,则它会识别所有内容,但为了识别所有内容(逗号,点,斜线等等),需要将30x800的图像放大到120x3200。另外,你知道为什么单词“文件”不被很好地识别吗?字符'我'不是来自英文字母 –

相关问题