我的问题与this one类似,但在范围上更具体。在JPG图像中查找文本的边框
在我的纸牌游戏的应用程序,我想为用户能够点击位于扫描JPEG图像的话。请参阅此示例Pokemon trading card。
在这种情况下,用户应该能够给他的鼠标移到文本“划痕”,在其上脉冲矩形边框周围会出现文字徘徊,表明它是点击。问题是如何检测文本的边框。将会有一系列已知BEFOREHAND的用户可以点击的单词(这些单词将从数据库中逐个检索)。为了继续我们的例子,这个例子中的数组将会是[“Scratch”,“Live Coal”]。一旦用户点击“Scratch”,应用程序必须通过回调知道选择了“Scratch”而不是“Live Coal”。
我正在考虑使用光学字符识别库来解决这个问题,但是开源选项质量差(例如GOCR)和/或在多个平台(例如Tesseract)上未经过良好测试。我只关心Windows和Mac的兼容性。我是否错过了一个不需要OCR的明显/更简单的解决方案/算法?我不能简单地手动编码每个卡的边界框,因为我的数据库中将有成千上万的扫描卡。用户也可以上传他自己的自定义卡片扫描和一系列可点击文本。
文字颜色不总是黑色。看到这个panorama将允许不同的卡和文本样式。黑卡有白色文字,倒数第三张卡(Zekrom)的黑色文字有白色轮廓。
赞赏任何编程语言的解决方案。不过,请注意,我正在寻找开源算法和/或库。如果在Ruby或Java中有解决方案,甚至更好,因为我的代码主要使用这两种语言。
编辑:我忘了提的单词的顺序/阵列中的短语将是相同的在卡上。因此,阵列将是[“划痕”,“活煤”]而不是[“活煤”,“划痕”]。我提到这一点是因为它可以简化任务。因此,对于这个例子,我可以简单地寻找黑色像素(尽管我必须留意白色圆圈中的黑色星星)。但是,在攻击名称下面有较小字体的描述性文本时(例如,请参阅全景图),会出现更多的困难情况。
如果允许用户上传图片**和**随附的文字,你怎么在验证他们键入什么文本实际上匹配计划?此外,将卡的方向(如果一张卡横向显示,或在一些奇怪的角度会发生什么?)?你可能希望做的是清空现有的文本,然后*生成*文本 - 更容易生成边界框,更容易翻译(如有必要),没有(或很少,取决于)OCR。只有实际图像处理要做的是确定'移动'部分的边界框(您可能不想做,以预先限制OCR区域)。 –
@ X-Zero谢谢,这听起来像是一个可行的解决方案。你会如何建议我检测'移动'部分的边界框? – Klarerwind
取决于其他东西应该是可点击的,它基本上不是主图片 - 所有这些(似乎)都有一个相当明确的边界。卡的中点也有一个水平条,似乎有不错的对比度(对不起,我从来没有做过图像分析)。在任何情况下,如果用户可以上传(并假定制作)他们自己的卡片,那么您可能只想制作一个卡片创建者,他们可以在其中输入自己的文本,并包含某种自定义图片的小精灵;这应该更简单。目前,你必须认识到卡.. –