通过 pytesseract 和 PIL 提高文本识别的准确性
Posted
技术标签:
【中文标题】通过 pytesseract 和 PIL 提高文本识别的准确性【英文标题】:Increase Accuracy of text recognition through pytesseract & PIL 【发布时间】:2017-09-08 23:31:35 【问题描述】:所以我试图从图像中提取文本。并且由于图像的质量和尺寸不好,它会给出不准确的结果。我尝试了 PIL 的一些增强功能和其他功能,但这只会降低图像质量。
有人可以建议对图像进行一些增强以获得更好的结果。图片的几个例子:
【问题讨论】:
据我了解,*** 上有相当严格的规则,其中一条规则是专注于回答问题,而不是展示可以做些什么来实现目标,如果它没有被要求。因此,如果您还想要可以为您提供更好结果但不是基于增强图像的答案,请随时在您的问题中提出。 如何将我的答案标记为已接受?我错过了解释什么吗? P.S.再次查看我的答案 - 我已经添加了一些解释。 请耐心等待。我应用了这个概念并用 PIL 放大了图像,得到了更好但不准确的结果。我没有接受答案只是为了获得更多答案。 你还相信你会得到更多答案吗? 【参考方案1】:在提供的图像示例中,文本在视觉上质量非常好,所以问题是 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 的摘录,证明了上面的陈述:
[为了合理的准确性,有一个最小文本大小。您必须考虑分辨率和点大小。精度下降到 10pt x 300dpi 以下,迅速低于 8pt x 300dpi。快速检查是计算字符 x 高度的像素。 (X 高度是小写 x 的高度。)在 10pt x 300dpi 时,x 高度通常约为 20 像素,尽管这可能因字体而异。低于 10 像素的 x 高度,您几乎没有机会获得准确的结果,低于大约 8 像素,大部分文本将被“去除噪点”。]
【讨论】:
很好的解释和很好的答案。我一直在努力从图像中读取文本(用于识别文档部分的软件),我想知道您是否设法获得某种动态变量,即您必须放大图像多少次才能识别文本?对于 800x800 的图像,如果放大到 1600x1600,它可以识别所有内容,但是,需要将 30x800 的图像放大到 120x3200 才能识别所有内容(逗号、点、斜杠等)。另外,你知道为什么“文件”这个词不能被很好地识别吗? Char 'i' 不是来自英文字母以上是关于通过 pytesseract 和 PIL 提高文本识别的准确性的主要内容,如果未能解决你的问题,请参考以下文章
为啥不能用 PIL 和 pytesseract 获取字符串?
python(pillow /tesseract-ocr/pytesseract)安装介绍