Uno纸牌游戏的自动化计分系统

Uno是一款深受玩家喜爱的纸牌游戏,但随着游戏的进行,手动计算分数可能会变得繁琐。本文将介绍如何利用计算机视觉技术,通过自动化的方式来计算Uno游戏中的分数,从而简化游戏过程。

Uno游戏的目标是第一个达到500分的玩家获胜。玩家通过出完手中的所有牌来获得分数,而分数的多少取决于对手手中剩余的牌的类型。在Uno的官方规则中,详细说明了每张牌的分值。简而言之,玩家需要出完手中的所有牌,然后计算对手手中剩余牌的总分,最先达到500分的玩家获胜。

在COVID-19疫情期间,居住在威尔士卡迪夫的软件工程师Adam Crawshaw玩了很多Uno游戏。他发现,计算所有牌的分数有时会变得相当乏味。因此,他决定开发一个应用程序,自动计算Uno牌手中的总分。

Adam利用计算机视觉技术,通过对象检测来实现Uno牌的识别和总分的计算。他的结果非常出色,通过使用对象检测技术,他成功地自动化了Uno牌的计分过程。

为了构建一个成功的Uno牌计分系统,Adam首先需要收集数据、标记数据、确保数据与测试环境相似、对数据进行预处理以适应模型、训练模型,并将模型部署到移动设备上。

Adam精心收集了每种颜色变化的每张牌的照片。这需要拍摄每种0、2、3、4、5、6、7、8、9、跳过、+2和反转牌各四张照片,以及一张野牌和一张+4反转野牌——总共41张原始源图像。

他巧妙地利用了计算机视觉中的合成数据创建技术。具体来说,他使用Python的OpenCV包对牌进行边缘检测,以便在三张牌的集合中随机叠加牌。这使得他能够创建出几乎无限组合的牌手。

此外,Uno游戏的背景表面并不恒定。有各种各样的桌面纹理,模型需要学会在寻找牌和相应的数字时“调谐”这些纹理。因此,Adam转向牛津可描述纹理数据集(DTD),为他的数据处理合成背景。

在将Uno牌叠加到这些纹理上之前,Adam首先需要标记每张牌的分值。至关重要的是,只有牌的右上角应该被标记。如果模型识别了Uno牌的正面朝上(右上角)和倒置(左下角)的标记,它可能会将某些牌计算两次。

在收集和标记数据后,Adam转向Roboflow,这是一个数据集管理平台,用于预处理、增强和导出数据,以测试多个模型。

Adam的图像都被适当地调整为正方形(416x416),以支持许多模型架构。此外,他对灰度可能会影响模型性能感到好奇,因此他创建了多个版本的数据集,可以进行可重复的实验。

Roboflow的增强选项使Adam能够通过上下文增强选项进一步增加数据集的大小。例如,随机裁剪增强模拟了现实世界场景,其中牌在相机框架的不同部分,并且相对于持有移动设备的人的距离(大小)不同。

由于Roboflow的一致版本控制和易于导出相同数据集到任何注释格式,Adam能够信任进行并行实验的公平性。

鉴于应用程序需要进行实时推理,Adam选择了已知的小而适合移动设备的模型,如YOLOv3和MobileNetSSDv2。

Adam在Google Cloud Platform上启动了训练资源,利用Roboflow模型库中的基线模型架构,插入了来自Roboflow的数据集URL,并开始训练。

最终,Adam发现YOLOv3对他用例的性能最好——但他最近开始重新评估这些结果与YOLOv5的对比。

为了在移动设备上部署,Adam将他的模型编译为TensorFlow Lite模型,并将输出放入他精心开发的应用程序中。就这样,他创建了一个始终可用的自动Uno计分器!

“总的来说,不得不说——在喝了几杯葡萄酒之后,这让Uno游戏的计分变得简单了一些。”

Adam Crawshaw非常慷慨地通过Roboflow公共数据集发布了他的8,992张(和26,976个注释!)数据集,供公众使用,与其他免费计算机视觉对象检测数据集一起使用。

这个数据集包含8,992张Uno牌的图像和26,976个在各种纹理背景上标记的示例。这个数据集由Roboflow用户Adam Crawshaw收集、处理和发布,并带有修改后的MIT许可证。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485