我想从图像中检测文本区域作为 tesseract OCR 引擎的预处理步骤,当输入仅为文本但当输入图像包含非文本内容时,引擎运行良好,所以我只想检测图像中的文本内容,任何如何做到这一点的想法会有所帮助,谢谢。
4 回答
好吧,我在图像处理方面的经验并不丰富,但我希望我的理论方法可以帮助你。
在大多数情况下,文本形成平行的水平行,其中行之间的空间将包含大量背景像素。这可以用来解决这个问题。所以......如果你组合图像中的每个像素列,你会得到一个 1 像素宽的图像作为输出。当输入图像包含文本时,输出很可能是一个周期性的模式,其中黑暗区域之后是明亮区域反复出现。这些较暗像素的“组”将指示文本内容的位置,而较亮的“组”" 将指示各行之间的间隙。您可能会发现较亮的区域会比其他区域小得多。文本比任何其他图片元素都更通用,因此应该很容易分开。
您必须实施一个程序来检测这些周期性重复。一旦脚本可以确定输入图片具有这些特征,它就很有可能包含文本。(但是,这种方法无法区分实际文本和简单的水平条纹......)
对于下一步,您必须找到一种方法来确定段落的边界,使用上述方法。我正在考虑一个非常虚拟的算法,女巫会将输入图像分成更小、更窄的条纹(50-100 像素),然后分别检查这些区域。然后,它会比较这些结果以构建可能填充文本的区域的地图。这种方法不会那么准确,但它可能不会打扰 OCR 系统。
最后,您需要使用文本映射仅在所需位置运行 OCR。
另一方面,如果输入文本旋转超过 ~3-5 度,此方法将失败。还有另一个倒退,因为如果您只有几行,那么您的模式搜索将非常不可靠。更多行,更准确...
问候,G。
我是 stackoverflow.com 的新手,但我写了一个与此类似的问题的答案,这可能对任何分享此问题的读者有用。这个问题是否实际上是重复的,因为这是第一个,我将留给其他人。如果我应该在此处复制并粘贴该答案,请告诉我。我也首先在谷歌上发现了这个问题,而不是我回答的问题,所以这可能会使更多的人受益。特别是因为它提供了获取文本区域的不同方法。对我来说,当我查找这个问题时,它不适合我的问题案例。