【发布时间】:2011-07-14 19:59:14
【问题描述】:
我的问题类似于this one,但范围更具体。
在我的纸牌游戏应用程序中,我希望用户能够单击扫描的 jpeg 图像中的单词。请参阅此示例Pokemon trading card。
在这种情况下,用户应该能够将鼠标悬停在文本“Scratch”上,文本周围会出现一个脉动的矩形边框,表明它是可点击的。问题是如何检测文本的边界。将有一组用户可以点击的事先知道的单词(这些单词将逐张从数据库中检索)。继续我们的示例,本例中的数组将是 ["Scratch", "Live Coal"]。一旦用户点击“Scratch”,应用程序必须通过回调知道选择了“Scratch”而不是“Live Coal”。
我曾考虑使用光学字符识别库来解决此问题,但用于此问题的开源选项质量较差(例如 GOCR)和/或未在多个平台上经过良好测试(例如 Tesseract)。我只关心 Windows 和 Mac 的兼容性。我是否缺少不需要 OCR 的明显/更简单的解决方案/算法?我不能简单地在每张卡片的边界框中手动编码,因为我的数据库中将有数千张扫描的卡片。用户还可以上传自己的自定义卡片扫描,并附带一系列可点击的文本。
文本颜色并不总是黑色。请参阅此panorama,了解允许的不同卡片和文本样式。黑色卡片有白色文字,倒数第三张卡片 (Zekrom) 有黑色文字和白色轮廓。
任何编程语言的解决方案都值得赞赏。但是,请注意,我正在寻找开源算法和/或库。如果有 Ruby 或 Java 的解决方案,那就更好了,因为我的代码主要使用这两种语言。
编辑:我忘了提到数组中单词/短语的顺序与卡片上的顺序相同。因此,数组将是 ["Scratch", "Live Coal"] 而不是 ["Live Coal", "Scratch"]。我之所以提到这一点,是因为它可能会简化任务。因此,对于这个例子,我可以简单地寻找黑色像素(尽管我必须注意白色圆圈中的黑色星星)。但是,在攻击名称下方以较小字体显示描述性文本的情况会更加困难(同样,请参见全景图示例)。
【问题讨论】:
-
如果您允许用户上传图片和随附的文字,您打算如何验证他们输入的内容是否与文字实际匹配?此外,卡片的方向是否重要(如果卡片横向显示或以某个奇怪的角度显示会发生什么情况)?您可能希望做的是将现有文本清空,然后 generate 文本就地 - 更容易生成边界框,更容易翻译(根据需要),没有(或很少,取决于)OCR。唯一要做的真实图像处理是确定“移动”部分的边界框(您可能无论如何都想这样做,以预先限制 OCR 区域)。
-
@X-Zero 谢谢,这听起来像是一个可行的解决方案。您如何建议我检测“移动”部分的边界框?
-
取决于其他什么东西应该是可点击的,它基本上是所有不是主要图片的东西——所有这些(似乎)都有一个相当明确的边界。在卡片的中点附近还有一个水平条,它似乎具有不错的对比度(抱歉,我从未做过图像分析)。无论如何,如果用户可以上传(并且可能制作)他们自己的卡片,您可能只希望制作一个卡片创建器,他们可以在其中输入自己的文本,并包含某种自定义的口袋妖怪图像;那应该更简单。目前,您必须识别卡..
标签: java ruby image ocr text-recognition