在JPG图像中查找文本的边界框

时间:2011-07-14 19:59:15

标签: java ruby image ocr text-recognition

我的问题类似于this one,但在范围上更具体。

在我的纸牌游戏应用程序中,我希望用户能够点击位于扫描的jpeg图像中的单词。请参阅此示例Pokemon trading card

在这种情况下,用户应该能够将鼠标悬停在文本“Scratch”上,文本周围会出现一个脉冲矩形边框,表示它是可点击的。问题是如何检测文本的边框。用户可以点击一系列单词KNOWN BEFOREHAND(这些将在逐个卡的基础上从数据库中检索)。继续我们的例子,在这种情况下,数组将是[“Scratch”,“Live Coal”]。一旦用户点击“Scratch”,应用程序必须通过回叫知道选择了“Scratch”而不是“Live Coal”。

我正在考虑使用光学字符识别库来解决这个问题,但是开源选项的质量很差(例如GOCR)和/或在多个平台上没有经过良好测试(例如Tesseract)。我只关心Windows和Mac的兼容性。我错过了一个不需要OCR的明显/简单的解决方案/算法吗?我不能简单地在每张卡的边界框中手动编码,因为我的数据库中会有数千张扫描卡。用户还可以上传自己的自定义卡片扫描,并附带一系列可点击的文本。

文字颜色并不总是黑色。请参阅此panorama允许的不同卡片和文字样式。黑卡有白色文字,倒数第三张卡(Zekrom)有黑色文字,白色轮廓。

赞赏任何编程语言的解决方案。但请注意,我正在寻找开源算法和/或库。如果有一个Ruby或Java的解决方案,甚至更好,因为我的代码主要使用这两种语言。

编辑:我忘了提到数组中单词/短语的顺序与卡上的顺序相同。因此,阵列将是[“Scratch”,“Live Coal”]而不是[“Live Coal”,“Scratch”]。我提到这一点是因为它可以简化任务。因此,对于这个例子,我可以简单地寻找黑色像素(虽然我必须注意白色圆圈中的黑色星星)。但是,在较小的字体中,攻击名称下面存在描述性文本的情况会更加困难(同样,请参阅全景图中的示例)。

2 个答案:

答案 0 :(得分:1)

我只想编写一个程序,它允许您在文本周围可视化地绘制一个边界框以简化,但可以这样做,购买检测像素颜色的差异。由于文本为黑色,您可以看到左上角最黑的像素没有大凹痕的位置以及卡片的下半部分。

答案 1 :(得分:0)

当光标静止时,检查光标下方或下方是否有黑色像素。如果是,请检查前三个连续(因为字母之间可能还有非黑色像素)光标左侧,右侧,顶部和底部的非黑色像素。如果是,请使用这些位置绘制正方形。您可以使用OpenCV