检测图像中的文本

时间:2014-08-13 07:11:38

标签: php ocr

有没有什么好方法可以检测图像是否包含文字?

我没有找到检索文字的方法,只是为了检测图片中是否有一个或多个字符。

我可以理解,没有万无一失的检测文本的方法,比如当字体有点偏离标准时;它可能很难识别。我在&#34之后,尽可能好的"溶液

查看下图中的文字示例: example0 example1 example2 example3 example4

2 个答案:

答案 0 :(得分:4)

检测是否有文本与提取文本几乎相同,即如果您能够提取文本,则确认存在文本。检测文本大约与提取文本的步骤大致相同,最后10%是对OCR中特定语言和文本类型的一些优化,以产生更好的文本识别。大部分繁重的工作都发生在流程的开始阶段,特别是图像二值化和背景去除,分割成对象,布局的文档分析,对象类型检测以及单独识别每个对象。

有关背景信息,请查看我几个月前写的关于通过OCR从复杂图片和图像中检测和提取各种文本的博客文章: http://www.ocr-it.com/user-scenario-process-digital-camera-pictures-and-ocr-to-extract-specific-numbers

对于给定的图像,请一个接一个地执行这些步骤,您将能够确定今天的技术是否可以在这些图像以及任何其他图片中看到文本。

  1. 二值化。将图像转换为黑色&白色。转换后,您可以看到打印的文本字符。如果没有 - 进程结束 - 无法检测到文本。如果是,请继续执行下一步。

  2. 字符可分性。人眼比任何技术都更具适应性,并且可以挑选出隐藏在其他物体中的数据。在二值化图像中,可见字符与任何其他元素分开,即它们不接触其他字符或元素。如果没有 - 进程结束 - 那些字符很可能不会成为单个字符,而是分析期间某些其他非文本对象的部分,如图片/徽标/图表。如果是 - 你可以清楚地看到不同的字符 - 继续下一步。

  3. 旋转。字符是否在相同的“基线”上(你能在所有字符下划一行)吗?该线是水平还是垂直?如果不是 - 通常是进程结束 - 除非您指示OCR软件逐个检测单个字符。如果是 - 继续下一步。 (注意:如果有一个基线,但它处于一个陡峭的角度,就像在“Smoothdealer”图片中一样,诀窍是将图片一次旋转15度并通过OCR传递每个旋转的变体。在某些变体上,文本OCR可以检测到接近垂直或接近水平的位置。今天的OCR系统只能读取水平或垂直(某些可以)旋转的文本。

  4. 语言。需要指示和预先设置OCR以寻找某种特定语言,或至少一个字符集。您需要指定要查找的可能字符的范围。例如,如果你设置英文字符集,那么一些俄文或中文字母看起来不像字母(从英语角度来看),但更像是图形。

  5. 此外,OCR软件的质量将决定每个步骤的强大功能。更强大的OCR将能够成功处理更复杂的图像。例如,在过去使用Tesseract时,它经常没有返回任何内容,表明图像上没有文字。一些其他商业OCR能够从相同的小或非常低质量的图片返回文本,表明有文本。基本上两个实体告诉你不同的东西,你需要知道哪一个更聪明,并听取那个。

    此外,一些OCR将具有用于“积极”文本提取的特殊模式,这些模式甚至可以用于标识和图形,以便查找和提取每一段文本以及任何看起来像文本的文本。其他OCR可能只是将相同的徽标视为图片,即使其中包含文本,但该文本也不会成为字符。想想微软或谷歌的标志。我知道有两种商业产品可以从其他对象中提取高级文本:ABBYY FlexiCapture高级企业数据捕获软件,OCR-IT Cloud OCR API具有TextAgressive分析和提取模式。

    使用上述方法,让我们看看提供的每个样本:

    唐纳德 - 可以检测到一些角色,但机率很低

    Vip House - 无法检测到字符

    Smoothdealer - 可以通过15度旋转测试检测字符

    Oneplus - 可以检测到字符。大多数OCR软件都支持反向文本。

    500PCS - 可以轻松检测到字符

答案 1 :(得分:1)

您可以使用OpenCVTemplate matching来检测文字。我认为这将是与人脸检测算法类似的算法。