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

Java 在JPG图像中查找文本的边界框,java,ruby,image,ocr,text-recognition,Java,Ruby,Image,Ocr,Text Recognition,我的问题类似于,但范围更具体 在我的纸牌游戏应用程序中,我希望用户能够单击扫描的jpeg图像中的单词。请看这个样品 在这种情况下,用户应该能够将鼠标悬停在文本“Scratch”上,文本周围会出现一个脉冲矩形边框,表示可以单击。问题是如何检测文本的边框。将有一个预先知道的单词数组,用户可以点击(这些单词将从数据库中逐卡检索)。为了继续我们的示例,本例中的数组将是[“Scratch”,“livecoal”]。一旦用户单击“Scratch”,应用程序必须通过回调知道选择了“Scratch”而不是“li

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

在我的纸牌游戏应用程序中,我希望用户能够单击扫描的jpeg图像中的单词。请看这个样品

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

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

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

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


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

我只想编写一个程序,允许您在文本周围直观地绘制一个边界框,以简化操作,但可以通过检测像素颜色的差异来实现这一点。因为文本是黑色的,所以你可以看到最左上角的黑色像素没有大的缩进,并且在卡片的下半部分。

我只想写一个程序,让你可以直观地在文本周围画一个边框,这样做很简单,但是可以通过检测像素颜色的差异来实现。由于文本是黑色的,您可以看到最左上角的黑色像素没有大的缩进,并且位于卡的下半部分。

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

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

好的思维,但应在整个单词或短语周围绘制一个矩形边框。例如,在链接到的OpenCV页面中,第一个图中的“将\OpenCV\bin添加到系统路径”周围有一个红色矩形。这个如何。您可以预先在每个文本区域周围绘制透明矩形。因此,对于每个卡片对象,都有一个关联的矩形数组列表,其中包含矩形的坐标。现在,每当用户移动鼠标时,检查用户是否在这些“隐藏”矩形中。如果他/她是,只需将该矩形的颜色更改为黑色或其他颜色?如果您不知道手中的卡片,只需保存预定义单词的图像,例如“刮擦”,当用户扫描新卡片时,检查卡片是否包含您存储的任何图像。如果有,你可以检测图像的位置,并在图像周围画一条线……这可能有用,但我不制作卡片,因此没有我试图识别的文本字体。此外,我如何检查卡是否包含图像?在OpenCV中,您可以将图像转换为黑白或灰度。这使得比较图像更容易。这样你就不用担心背景了。这听起来是个很酷的主意:与人在线玩口袋妖怪卡片,用你的网络摄像头显示卡片或其他东西。想法不错,但整个单词或短语应该画一个矩形边框。例如,在链接到的OpenCV页面中,第一个图中的“将\OpenCV\bin添加到系统路径”周围有一个红色矩形。这个如何。您可以预先在每个文本区域周围绘制透明矩形。因此,对于每个卡片对象,都有一个关联的矩形数组列表,其中包含矩形的坐标。现在,每当用户移动鼠标时,检查用户是否在这些“隐藏”矩形中。如果他/她是,只需将该矩形的颜色更改为黑色或其他颜色?如果您不知道手上的卡片,只需保存预定义单词的图像,例如“scratch”和当用户