OCR识别扑克牌
我决定做一个有趣的项目,想要输入一张扑克牌的图片,然后返回它的点数和花色。我想只需要看左上角,因为那里有所有的信息。这个程序应该很强大——如果我有一张大的红桃A的图片,我应该能把它缩放到20%到200%之间,仍然能得到正确的结果。
第一个问题是——有没有现成的东西可以做到这一点?如果有的话,我就找别的东西来做,避免重复劳动。
第二个问题是——做这个的最佳方法是什么?用神经网络?还是手动编码?有没有人能给我一些建议?(0xCAAF9452 这个答案不算数)。
4 个回答
我个人觉得可以用机器学习的方法来解决这个问题。
由于样本数量有限(4种花色,13个不同的点数),我建议你尝试将新输入的图片与参考图片进行匹配。首先,找到新图片中花色或点数的边界框(也就是包围所有非白色像素的最小矩形框)。然后,把你的参考图片缩放到和这个边界框的大小一致,接着通过逐像素的绝对差异来找到最佳的“匹配”。图片的颜色(比如红色或黑色)会让这个过程变得更简单。
我觉得你想做的事情目前还没有现成的解决方案(至少在开源和Python方面是这样的)。
至于你第二个问题的答案,这要看你想识别的是什么。如果输入的来源不同,比如不同品牌的扑克牌样式各异,那么你可能需要用到机器学习的算法(比如神经网络或支持向量机[SVM]),这样可以让算法学习如何识别未知的输入。不过,如果输入的形状或样式总是一样的,那么一个简单的图像比较算法就足够了(比如,把左上角切片的像素和每个等级的像素进行比较)。
如果你决定使用机器学习的算法,我认为你不需要非常复杂的特征,因为花色和等级在形状或样式上变化不大,使用左上角的像素作为特征就可以了。
这里有一个简单的OCR示例可以看看,你可能会觉得有趣。使用的库(LibSVM)也有Python版本,我用过,觉得非常简单易用。
希望这些对你有帮助。