OCR应用前的图像清理

15

我最近尝试了PyTesser几个小时,发现它是一个非常好的工具。有几点关于PyTesser的准确性我注意到:

  1. 带有图标、图片和文字的文件 - 准确率为5-10%
  2. 只有文本的文件(图片和图标被清除)- 准确率为50-60%
  3. 拉伸的文件(这是最好的部分) - 在x或y轴上拉伸第2条中的文件可将准确率提高10-20%

因此,显然Pytesser不考虑字体尺寸或图像拉伸。虽然有很多关于图像处理和OCR的理论可以阅读,但无论使用哪种语言的库,在应用PyTesser或其他库之前都需要进行哪些标准的图像清洗程序(除了擦除图标和图像)?

...........

哇,这篇文章现在相当古老了。最近几天我重新开始研究OCR。这次我放弃了PyTesser,改用Tesseract引擎与ImageMagik。直截了当地说,这就是我发现的:

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忽略它们的方法。另外,在图像中的文本布局和格式也会产生很大影响。它在只有文本的图片中表现出色。希望这可以帮到你。


6
对于任何OCR系统,要识别的图像通常需要进行以下处理:1)几何校正;2)去噪;3)光照和对比度校正;4)分辨率校正。 - Sergey
5
抢我一步了。通常,当我看到这些问题时,我会问“你面临哪些问题?” 我可以对任意图像应用数百种去噪算法,但是决定是否使它们自适应以及我们面临的噪声类型,才是更大的问题。将模糊滤镜应用于带有脉冲/椒盐噪声的图片会带来负面影响,而不是帮助,但在处理高斯噪声等实用情况下,则会有所帮助。 - Cloud
1
我几年前使用过PyTesser,也注意到了同样的问题。很高兴看到不是我的问题。关于你的问题,这肯定取决于库和包。尽管如此,不同的包可能会或可能不会做这样的事情,你需要进行实验并做出这些发现。一般来说,在这样的任务之前进行清理将非常有帮助。不幸的是,这部分是一个鸡生蛋/蛋生鸡的问题。如果你能完美地清理,那么你就不需要OCR,因为你必须已经知道所有东西在哪里。即便如此,一般的清理也是有帮助的。 - Paul
2
就像Dogbert所说的那样,“图像清理的标准程序”是不存在的。地球上没有任何算法能够猜测出你想要去除什么,以及你想要增强什么。 - user1196549
3个回答

6

事实证明,tesseract维基百科有一篇文章,以我最能想象的方式回答了这个问题:


我没有使用过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

如您所见,“全局Otsu”并不总是会产生理想的结果。
更好地理解tesseract“看到”的内容是将Otsu的方法应用于您的图像,然后查看生成的图像。
总之: 提高识别率最直接的方法是自己对图像进行二值化(很可能需要通过试错找到好的阈值),然后将这些二值化的图像传递给tesseract

有人很好心地发布了tesseract的api文档,因此可以验证之前关于处理流程的声明:ProcessPage -> GetThresholdedImage -> ThresholdToPix -> OtsuThresholdRectToPix


5

3
我知道这不是一个完美的答案。但我想和你分享一个视频,它来自于2013年PyCon,可能适用于你的问题。它缺少一些实现细节,但可能会为你解决/改进问题提供一些指导/灵感。 视频链接 演示文稿链接 另外,如果你决定使用ImageMagick对源图像进行预处理。这里有一个问题,指向了它的Python绑定。
顺便说一下,关于Tesseract,一个相当重要的事情是需要对其进行训练,否则它不会像它有能力做到的那样好/准确。

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