识别图像中的文字

时间:2014-08-16 11:30:34

标签: algorithm ocr image-recognition

想象一下这样一个简短的视频片段:黑色背景,中间的一行白色文字逐渐充满红色,不仅逐字逐句,而且每个字母都逐渐填充。这是一个简化的图像,说明了这一点:

enter image description here

(中间有一堆帧,但为简单起见省略了它们。)

因此,经过一段时间(如10秒)后,整个字符串将变为红色。

现在我必须解决的任务:

  • 我必须认识到最初的字符串,因此我应该得到" HELLO WORLD"结果。
  • 不仅如此。对于每个字母,我必须找出它在哪一点上星星被填满,并且在那时它被完全填满。

输出可能是这样的:

H,0ms,1000ms E,1000ms, 1500ms L,1500,2500ms L,2500ms,3500ms O,3500ms,4000ms

......等等。

不同字母的速度可能会有所不同。字体和字体大小始终相同。字符集包括小写和大写字母。

我考虑了两种方法:OCR识别或神经网络。我对这两者都没什么经验。

我认为OCR方法可以让我轻松识别文本。但是我如何识别未填充和填写的字母?

神经网络方法可能会让我识别未填充/填充的字母,但为此我必须将图像分成单独的字母,这本身可能是一项复杂的任务。

还有其他选择吗?或者考虑到上面两个选项,您会推荐哪一个,以及如何解决这两种方法概述的问题?

3 个答案:

答案 0 :(得分:0)

虽然使用专门调整的OCR或其他类型的图像识别算法将是最有效的方法,但可能需要您做出大量工作才能做到正确。

如何使用简单的图像过滤器将每个帧分成两层,而不是这样做?一层所有白色部分变成黑色,一个所有红色部分变成黑色。在第三个示例框架中,第一个图层在黑色背景中仅包含红色 H ,第二个图层在黑色背景中包含白色 ELLO WORLD

然后,您可以使用OCR算法从每个图层中获取字母,明确分为已填充和未填充的组。在原始框架上使用OCR可以为您提供整个文本,这样就可以轻松处理在两个图层中显示(损坏)的部分填充字母。

根据您的性能要求,这可能足以满足您的需求,尽管必须经常运行OCR算法三次......

答案 1 :(得分:0)

您可能希望尝试使用Tesseract OCR引擎并使用字符(符号级)置信度值(请参阅examples)。随着角色的颜色/填充变化,它也可能影响信心。

答案 2 :(得分:0)

我在强大的商业OCR应用程序中测试了您的图像。为简单起见,我一次测试了所有三个帧,因为这对一次读取或一次读取没有影响。分段自动处理并分别读取每个区域。结果如下所示(忽略蓝色突出显示): enter image description here

您看到的是实际的数字字符/字符串。软件检测到黑色背景上的白色文本。阿卡倒置文字。

我在测试前的担忧,并经测试证实,是关于那些部分填充的角色。 OCR将读取文本和任何看起来像文本的内容。你可能会得到像我这样的部分字符读取(见上面的第2帧),分号(部分C),句点(部分L),V(部分W)等等。只要你过滤那些我想的...... / p>

我认为OCR对于快速原型或一次性需求来说是一个更容易的选择,但它可能不完全精确到毫秒并且可能产生一些需要进行后处理的原始结果"以及其他决策和过滤器。

完全可靠的方法是图像和像素分析。正如您所说,在实际像素分析开始之前还需要一些额外的步骤。

所以最后,我认为两者都是一个优雅可靠的解决方案所必需的。

这个怎么样:

  1. 使用第一帧(没有红色像素的帧)使用OCR获取整个字符串,以及每个字符的坐标框。 (你没有停留,但似乎字符的位置在帧与帧之间保持完全相同。)我测试的OCR系统为您提供XML中每个字符的精确坐标。其他OCR也应该能够做到。

  2. 从左侧开始,分析每个字符边界框(将每个像一个小的单独图像处理几个像素宽和高,但使用精确坐标),以存在至少一个红色像素。繁荣 - 这是你填补这个角色的开始。

  3. 分析最后一个白色像素的同一个框。繁荣 - 这是你填补这个角色的结束。

  4. 重复所有字符。

    每个步骤都使用相对简单的可用工具,简单明确的算法,并且应该产生高一致性和可靠性。