OCR玩牌

11

我想做一个有趣的项目,接受纸牌图像作为输入,并返回其点数和花色。我认为只需查看左上角即可获取所有信息。它应该具有鲁棒性 - 如果我有一张大的方块A的图像,我应该能够将其缩放到20%至200%的任何位置,仍然能得到正确的答案。

首先问题是 - 是否已经有人编写过这个程序?如果有,我会找其他东西来OCR,以免重复努力。

其次 - 最佳方法是什么?神经网络?手工编码?有人能给一些指针吗?(0xCAAF9452不是可接受的答案)。


11
0xCAAF9460是一个十六进制数,它没有明显的语言含义。 - MitMaro
2
听起来你正在制作一个扑克机器人,而不是进行一些智力练习。 - Andrew Johnson
不,扑克机器人赚不到任何钱。我并不那么愚蠢 =)。 - bob
你打算从截图中识别卡片,还是打算从真实卡片拍摄的照片中识别卡片? - Alceu Costa
4个回答

3

我不认为已经有针对你正在尝试实现的内容的现成解决方案(至少是开源和使用Python)。

至于你的第二个问题,这取决于你要识别什么。如果输入可能来自不同的来源 - 例如,具有独特风格的不同品牌纸牌 - 那么你应该使用基于机器学习的算法(如神经网络或支持向量机[SVM]),以让它学习如何识别未知输入。然而,如果输入始终具有相同的形状或样式,则简单的图像比较算法就足够了(例如将切片左上角的像素与每个等级的像素进行比较)。

如果你决定使用基于机器学习的算法,我也认为你不需要非常复杂的特征,因为花色和等级在形状或样式上并没有太大变化,你只需使用左上角的像素作为特征即可。

这里有一个有趣的玩具OCR示例here。所使用的库(LibSVM)也有Python版本,我使用过,并且发现非常容易使用。

希望能有所帮助。

1

它不是特别健壮,但您可以查看卡上3或4个位置的颜色,以便如果它们是白色或其他颜色,您可以确定哪张牌和花色。显然,如果您没有始终使用相同的牌,则无法使用此方法。


1

就个人而言,我会选择使用机器学习的方法来解决这个问题。


1
当问题如此具体时,为什么需要机器学习呢? - Hannes Ovrén
3
也许我误解了问题,但是原帖的意思是在拍摄纸牌的照片并尝试推断它们的点数和花色,对吗? - DevDevDev

1

鉴于样本数量有限(4种花色,13个不同的值),我建议尝试将参考图像的花色和值与新输入图像匹配。首先找到传入花色/值的边界框(包含所有非白色像素的最小框),将您的参考图片缩放以匹配该边界框的大小,并通过像素绝对差找到最佳“匹配”。图片的颜色(即红色或黑色)将使这更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接