1

我的问题与类似,但范围更具体。

在我的纸牌游戏应用程序中,我希望用户能够单击扫描的 jpeg 图像中的单词。请参阅此口袋妖怪交易卡示例。

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

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

文本颜色并不总是黑色。查看允许的不同卡片和文本样式的全景图。黑卡有白色文字,倒数第三张卡(捷克罗姆)有黑色文字和白色轮廓。

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

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

4

2 回答 2

1

为了简单起见,我只想编写一个程序,允许您在文本周围直观地绘制一个边界框,但可以通过检测像素颜色的差异来做到这一点。由于文本是黑色的,您可以看到最左上角的黑色像素在没有大缩进的情况下位于卡片的下半部分。

于 2011-07-14T20:16:24.607 回答
0

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

于 2011-07-14T20:23:33.997 回答