我的问题与此类似,但范围更具体。
在我的纸牌游戏应用程序中,我希望用户能够单击扫描的 jpeg 图像中的单词。请参阅此口袋妖怪交易卡示例。
在这种情况下,用户应该能够将鼠标悬停在文本“Scratch”上,文本周围会出现一个脉动的矩形边框,表明它是可点击的。问题是如何检测文本的边界。将有一组用户可以点击的事先知道的单词(这些单词将逐张从数据库中检索)。继续我们的示例,本例中的数组将是 ["Scratch", "Live Coal"]。一旦用户点击“Scratch”,应用程序必须通过回调知道选择了“Scratch”而不是“Live Coal”。
我正在考虑使用光学字符识别库来解决这个问题,但是开源选项质量很差(例如 GOCR)和/或在多个平台(例如 Tesseract)上没有经过良好测试。我只关心 Windows 和 Mac 的兼容性。我是否缺少不需要 OCR 的明显/更简单的解决方案/算法?我不能简单地在每张卡片的边界框中手动编码,因为我的数据库中将有数千张扫描的卡片。用户还可以上传他自己的自定义卡片扫描,并附带一系列可点击的文本。
文本颜色并不总是黑色。查看允许的不同卡片和文本样式的全景图。黑卡有白色文字,倒数第三张卡(捷克罗姆)有黑色文字和白色轮廓。
任何编程语言的解决方案都值得赞赏。但是,请注意,我正在寻找开源算法和/或库。如果有 Ruby 或 Java 的解决方案,那就更好了,因为我的代码主要使用这两种语言。
编辑:我忘了提到数组中单词/短语的顺序与卡片上的顺序相同。因此,数组将是 ["Scratch", "Live Coal"] 而不是 ["Live Coal", "Scratch"]。我之所以提到这一点,是因为它可能会简化任务。因此,对于这个例子,我可以简单地寻找黑色像素(尽管我必须注意白色圆圈中的黑色星星)。但是,在攻击名称下方以较小字体显示描述性文本的情况会更加困难(同样,请参见全景图示例)。