OCR应用前的图像清理

2024-09-29 02:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去的几个小时里,我一直在尝试PyTesser,它是一个非常好的工具。我注意到了一些关于女主角准确性的事情:

  1. 带有图标、图像和文本的文件-准确率为5-10%
  2. 仅包含文本的文件(图像和图标被删除)-准确率为50-60%
  3. 拉伸文件(这是最好的部分)-拉伸文件 在2)以上x或y轴上,精度提高了10-20%

所以很明显,Pytesser没有考虑字体尺寸或图像拉伸。尽管有很多关于图像处理和OCR的理论需要阅读,但是在应用PyTesser或其他库之前,是否有任何标准的图像清理过程(除了删除图标和图像之外)需要完成,而不管语言是什么?

。。。。。。。。。。。

哇,这篇文章已经很老了。这几天我又开始研究OCR了。这一次我抛弃了PyTesser,改用了带有ImageMagik的Tesseract引擎。直截了当地说,我发现:

1) You can increase the resolution with ImageMagic(There are a bunch of simple shell commands you can use)
2) After increasing the resolution, the accuracy went up by 80-90%.

因此,Tesseract引擎无疑是市场上最好的开源OCR引擎。这里不需要事先清理图像。需要注意的是,它不适用于包含大量嵌入图像的文件,而且我无法找到训练Tesseract忽略这些图像的方法。同时,图像中的文本布局和格式也有很大的不同。它可以很好地处理只有文本的图像。希望这有帮助。


Tags: 文件工具the图像引擎文本can图标
4条回答

事实证明,^{}wiki有一篇文章以我能想象到的最佳方式回答了这个问题:


(初步答案,仅供参考)

我没有用过PyTesser,但是我用tesseract(版本:3.02.02)做了一些实验。

如果对彩色图像调用tesseract,则它首先应用全局Otsu's method对其进行二值化,然后在二值(黑白)图像上运行实际的字符识别。

图像来自:http://scikit-image.org/docs/dev/auto_examples/plot_local_otsu.html

Otsu's threshold illustration

可以看出,“全球大津”未必总能产生令人满意的结果。

为了更好地理解tesseract“看到”的是将Otsu的方法应用到您的图像,然后查看结果图像。

总之:提高识别率的最直接的方法是自己对图像进行二值化(很可能通过反复试验找到了好的阈值),然后将这些二值化的图像传递给tesseract

有人很好地发布了api docs for tesseract,因此可以验证以前关于处理管道的语句:ProcessPage->;GetThresholdedImage->;ThresholdToPix->;OtsuThresholdRectToPix

我知道这不是一个完美的答案。但我想和大家分享一段我从Pycon2013上看到的可能适用的视频。它有点缺乏实现细节,但可能只是对如何解决/改进问题的一些指导/启发。

Link to Video

Link to Presentation

如果你决定使用ImageMagick对源图像进行一些预处理。Here是一个问题,它为您指出了很好的python绑定。

旁注。泰瑟雷克很重要。你需要对它进行训练,否则它不会像它所能做到的那样好/准确。

不确定你的目的是否是为了商业用途,但这会让你怀疑你是否在一堆类似的图片上执行OCR。

http://www.fmwconcepts.com/imagemagick/textcleaner/index.php

原件 ORIGINAL

在使用给定参数进行预处理之后。

After Pre-Processing with given arguments.

事实证明,^{}wiki有一篇文章以我能想象到的最佳方式回答了这个问题:


(初步答案,仅供参考)

我没有用过PyTesser,但是我用tesseract(版本:3.02.02)做了一些实验。

如果对彩色图像调用tesseract,则它首先应用全局Otsu's method对其进行二值化,然后在二值(黑白)图像上运行实际的字符识别。

图片来源:http://scikit-image.org/docs/dev/auto_examples/plot_local_otsu.html

Otsu's threshold illustration

可以看出,“全球大津”未必总能产生令人满意的结果。

为了更好地理解tesseract“看到”的是将Otsu的方法应用到您的图像,然后查看结果图像。

总之:提高识别率的最直接的方法是自己对图像进行二值化(很可能通过反复试验找到了好的阈值),然后将这些二值化的图像传递给tesseract

有人很好地发布了api docs for tesseract,因此可以验证以前关于处理管道的语句:ProcessPage->;GetThresholdedImage->;ThresholdToPix->;OtsuThresholdRectToPix

相关问题 更多 >