智能国际象棋记录器开发之旅

在发现配备传感器的棋盘价格高达500美元后,决定开发Clio α——一款智能国际象棋记录器,能够记录并分析棋局。这个价格对于日常棋手或当地棋类俱乐部来说并不十分亲民,这激发了开始研发Clio α的灵感。

在本文中,将分享制作这个棋局记录系统的旅程快照,这是一个比配备传感器的棋盘更便宜、更便携的替代方案,用于记录和分析棋局。将了解到如何解决数字化现实生活棋局的一些挑战。

计算机视觉领域,数字化棋局的问题可以分为几个部分:棋盘检测——检测棋盘的边界,并将棋盘的透视视图从图像转换为2D正交视图;棋子识别——识别棋盘上的棋子及其位置。在现实生活设置中,棋盘和棋子外观的变化以及独特的照明条件是计算机视觉技术的核心技术挑战之一。

如果想要制作一个便携且小型的系统,那么就会遇到由于相机放置在较低高度而产生的棋盘角落和棋子被遮挡的问题。相机系统越低,这些问题就越严重。下图展示了其中一些问题。

许多商业解决方案已经因为这些原因放弃了计算机视觉,并倾向于使用基于硬件的解决方案,如传感器。不幸的是,使用传感器既昂贵又仅限于特定的棋盘。目标是通过使用计算机视觉和机器学习来克服这些限制,创造一个更通用、更易用的棋局记录体验,可以应用于市场上大多数标准的棋盘。

便携性、成本和美观性是希望系统具备的关键要求,决定制作一个满足这些要求的设备。方法可能不是最简单的,但发现它在现实生活场景中是成功的。

经过无数次的头脑风暴和设计周期,最终推出了Clio lite,这是一款专为记录棋盘游戏而设计的便携式相机。Clio lite具有固定的相机角度和视场(FOV),这简化了计算机视觉问题,并允许在开发算法时做出某些假设。

完全展开的Clio lite尺寸仅为55(W) x 50(L) x 210(H)mm,比大多数三脚架都要小。在电子方面,它配备了一个微控制器和一个广角相机,这有助于降低成本。

文献和开源项目中有许多棋盘检测的方法,决定在检测算法中使用x角(黑白方格之间的角落)的概念。棋盘检测算法的步骤在下面的图表中进行了总结。

基于校准的预包装输入图像

由于相机角度是固定的,可以通过预先确定单应性矩阵并使用它来矫正输入图像,使棋盘呈正方形并似乎与图像平面平行,从而简化算法的后续步骤。

对于这种校准,使用OpenCV编写了一个工具,用于在原始输入图像上选择4个点(下图中的红点),然后将其传递给OpenCV的findHomography()函数,将这4个选定的点包裹到理想正方形的顶点。然后输出的单应性矩阵被保存到校准文件中,以供以后使用。

估计图像的旋转和平移

在用上一步中预先确定的单应性矩阵矫正输入图像后,图像的旋转和平移仍然未知。首先通过学习图像上x角和方格的位置来估计图像的变换。使用Roboflow Annotate,创建了一个数据集,并用Ultralytics YOLOv5进行了训练。

当对训练好的模型进行推理时,将得到棋盘上x角和方格的点云。想法是估计这些推断出的点云与理想的7x7 x角和8x8方格网格之间的变换。

寻找旋转:首先假设相机放置在棋盘中心线附近,使得图像旋转不超过45度。然后,计算以下内容:

随机配对两个点,并计算线与原点之间的角度α
使用angle_array = [-90, 90, 180, -180],找到argmin(abs(angle_array - α))
如果两个点形成近乎垂直或近乎水平的线,角度差应小于45度。如果它们形成对角线,跳过这次迭代
重复N次,选择的角度差的平均值是估计的旋转角度

寻找平移:在估计旋转并将其应用于点云后,估计平移就相对直接了,因为点云非常像网格。可以计算点云的质心,并找到它们之间的差异,这相当于它们的近似平移。

将变换后的x角与理想的x角网格配对

不期望YOLO的x角检测率达到100%,这就是为什么需要确定哪些x角已经被检测到。一旦x角点云被变换到接近预定义的理想x角网格(具有已知的像素位置),就可以开始配对它们,并为输入x角创建一个占用网格。

确定最终的单应性矩阵

最后一步是通过对点云进行“微调”变换,将x角映射到理想网格,并再次计算单应性矩阵。

在这里,希望找到构成最大可能盒子的4个点,以减少对像素误差的敏感性。如下图所示,可以创建一个盒子,并循环遍历点云,直到盒子的所有4个顶点都有一个对应的x角点。一旦确定了x角/理想网格对,就可以计算最终的单应性矩阵。

最后,要处理一个新的原始输入图像,首先从YOLO推理中获得x角和方格点云。然后,应用预定义的单应性矩阵 -> 应用变换 -> 将最终的单应性矩阵应用于点云,以便有一个具有已知像素位置的棋盘网格。

为了定位棋子,一种典型的方法是使用机器学习(如YOLO模型)来识别和分类各个棋子。这种方法在鸟瞰相机视角下效果很好,棋子的遮挡不太严重。相机系统以较低的高度查看棋盘,这会大大降低这种方法的检测精度。决定使用基于方格占用的方法来解决这个问题。

再次,使用Roboflow注释棋盘方格,并使用YOLOv5训练占用模型。然后,能够使用基于方格占用的方法推断棋子的位置。

为了更好的可用性,为Clio lite设备开发了一个移动应用程序。它允许用户实时流式传输数字化的棋局或回放录制的棋局。请参阅下面的剪辑,了解简单的实时流和游戏回放演示。

对Clio lite的诞生感到非常兴奋,迫不及待地想看到它在社区中被使用!改进软件的鲁棒性是算法未来版本的首要任务之一。计划将棋子和棋盘检测能力扩展到包括中国象棋和围棋在内的其他流行的棋类游戏,采用类似的方法论。

如果对项目感兴趣,甚至想加入,邀请访问网站,通过电子邮件info@a1h1.com.au与联系,或在上查看Clio lite演示。

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