检测图像上是不是存在文本的算法
Posted
技术标签:
【中文标题】检测图像上是不是存在文本的算法【英文标题】:Algorithm to detect presence of text on image检测图像上是否存在文本的算法 【发布时间】:2011-06-04 03:00:05 【问题描述】:通过我的新任务,我正在寻找一种方法来检测图像上是否存在文本。图像是地图 - 例如可以是谷歌地图。任务是检测街道/城市标签的位置。
我知道 opencv 库有可以检测特征(例如人脸)的算法 - haar 分类器或 hog(定向梯度直方图),但我听说此类算法的学习过程相当困难。
您是否知道任何算法、方法或库可以做到这一点(检测图像上是否存在文本)?
谢谢, 约翰
【问题讨论】:
【参考方案1】:视觉中有一个标准问题,称为图像中的文本检测。它与 OCR 完全不同。 OCR 关注它所说的内容,而文本检测是关于确定图像中是否有文本。 Adi Shavit 的第三个链接是解决这个问题的方法。您可以在text detection 上查看谷歌学者被引用的文章。
【讨论】:
【参考方案2】:您可以采取几种可能的方法。
-
使用 OCR。在 *** 上搜索 OCR 将显示许多选项。其中包括Tesseract 和Ocropus。
如果您的文本使用非常特定的固定字体,您可能会使用simple template matching。
在更一般的情况下,您可能需要查看“Detecting Text in Natural Scenes with Stroke Width Transform”
2017 年 1 月更新 OpenCV 3.2 contrib 模块现在有一个text detection module。 它还包括如何使用它的示例(C++、Python)。
【讨论】:
Ocropus 可以将找到的字母转换为实际文本,但不会帮助首先找到字母。带有附加限制的简单模板匹配要求至少两个字符在水平线上彼此靠近,这对于谷歌地图的情况非常有效。 Epshtein 等人。论文(Stroke Width Transform)已实现并由Saurav & Andrew分享。 这是一个使用 python opencv 包装器github.com/opencv/opencv_contrib/blob/master/modules/text/… 的示例的 python 实现【参考方案3】:您需要将其调整为特定类型的地图图像,否则问题将非常困难(请参阅上一篇关于文章链接的帖子)。
OCR 是可行的方法,您应该使用现有的库。然而,OCR 主要是对白色背景上的文本进行的。要将您的问题简化为常规 OCR 问题,您应该尝试处理地图的颜色空间。地图文本可能具有非常特定的颜色,这可能足以找到这些像素。然后,您可以根据连接区域的大小过滤检测到的像素。
如果您实际上只想找到文本标签的位置,您可以执行上述操作,并且几乎只需跳过 OCR 步骤。如果标签不是太靠近,可以使用简单的聚类算法来找到它们各自的位置。
【讨论】:
以上是关于检测图像上是不是存在文本的算法的主要内容,如果未能解决你的问题,请参考以下文章