中国象棋识别、棋谱识别

中国象棋识别、棋谱识别

项目主页

Chinese Chess Recognition

Xiangqi Recognition

在线 Demo

huggingface space demo

黑子(将士相马车炮卒 对应简写kabnrcp) 、红子(帅将相马车炮卒 对应简写KABNRCP) + 其他 简写x + 空位 简写.

pose-detection

cchess_reg

Pretrained Model

https://huggingface.co/spaces/yolo12138/Chinese_Chess_Recognition/tree/main/onnx

摘要

真实场景下的象棋识别。能够直接从图像中预测棋局信息(棋盘位置,棋子位置,棋子类型)。

在真实场景下,拍摄角度、棋盘、棋子都会影响识别效果。

本项目尝试使用深度学习 并通过两步进行 棋盘关键点检测、多区域分类检测。

并采用 Swin Transformer2 网络架构,将最终生成特征图 10x9x16,来预测棋局信息。

背景

日常场景的棋局识别时,不仅需要考虑 棋子的位置和分类,还需要考虑 棋盘的倾斜、棋子摆放不正、棋盘背景复杂等场景。

RELATED WORK

分步处理策略

尝试方法

端到端识别

物体检测与关键点检测

多区域分类检测

分步处理策略

其他方法的尝试

项目开始时,尝试了多种方法,但都存在局限性。

比如:

基于文字识别,效果并不理想。

YOLO, 需要不同角度,不同大小的棋子,需要大量多样的数据。

使用 LineNet 模型,通过 棋盘的直线检测。

但象棋的棋子是在线上的,会干扰直线的预测

端到端识别

这是最终的目的

但这也是最困难最复杂的方案,需要足够多的数据资源。

参考国际象棋领域的 End-to-End Chess Recognition,

基于该文章的思路,可以实现。

真实场景的标注样本也很难获取和标注。

综上,分步处理对我来说,是更可行的方案,每一步都是相对简单,更容易验证。

关键点检测

34 个关键点,棋盘的外圈。标注为

A0 A1 A2 A3 A4 A5 A6 A7 A8

B0 B8

C0 C8

D0 D8

...

E-I

...

J0 J1 J2 J3 J4 J5 J6 J7 J8

最终保留了 A0、A8、J0、J8 四个关键点。

A0 与 A8, 为 黑方 的两个角点

J0 与 J8, 为 红方 的两个角点

多区域分类检测

前置: 透视变化, 将图片转换成统一格式

通过 4 个角点,可以将图片透视变化成俯视图。

该方法非常契合中国象棋:

可以减少棋盘倾斜的影响: 全部转换成俯视角度,棋盘倾斜的影响基本可以忽略。(国际象棋俯视图就不适用)

可以减少背景干扰。

棋盘、棋子大小不一的影响: 透视变化后, 基本使得棋盘大小一致,棋子大小也会在一定范围内。

多区域

10x9 的区域,每个区域 16 分类。耦合象棋布局。

将俯视图 通过 backbone 后,再使用 卷积 来处理特征信息,最终特征宽高为 10x9x16

最终输出特征图

+----------+

/ /|

/ 16 |

/ / |

+----9-----+ |

| | |

| | |

| | |

| 10 +

| | /

| | /

| |/

+----------+

16 分类

16分类包含: 黑子(将士相马车炮卒 对应简写kabnrcp) 、红子(帅将相马车炮卒 对应简写KABNRCP) + 其他 简写x + 空位 简写.

数据集与评估指标

数据集

数据增强

损失函数

评估指标

数据集

pose demo: https://drive.google.com/file/d/1pbUt9mTVxpNQahZUmYKMPYMh0MS7KJ3O/view?usp=drive_link

cchess_reg demo: https://drive.google.com/file/d/1EHv_pafyCb6qa0DTwZVL3yrz4wHt7TuM/view?usp=drive_link

数据增强

除了常规的方法,还增加了一些针对象棋的增强:

CChessMixSinglePngCls: 填充棋子到棋盘上,并修改对应 label, 并对棋子进行随机旋转。

CChessHalfFlip: 象棋版本的翻转。

损失函数

loss 使用 KLDiscretLoss + SmoothL1Loss

todo:

Wing Loss

FocalLoss

评估指标

除了传统的多分类方法,(Accuracy、Recall、F1)

但差异不大,

使用整局90个棋子全部正确,视为完全正确

full-err-k: $= \frac{\text{出现的错误} \leq k \text{ 个棋子的棋局}}{\text{所有棋局}}$

在本校验集中

full-err-zero: 0.83

full-err-1: 0.90

full-err-3: 0.96

TODO

局限性

黑车 与 黑卒,相似度高

角度,俯视最佳,倾斜角度也会影响识别率

更多方向

收集数据(更多棋子样式,棋盘样式)

技术框架

本项目基于以下开源框架开发:

MMPose:用于棋盘关键点检测

MMPretrain:用于棋子分类识别

感谢OpenMMLab团队提供的这些优秀工具,使本项目的开发成为可能。

参考文献

附录

End-to-End Chess Recognition

RTMPose

源码

https://github.com/TheOne1006/chinese-chess-recognition

安装

pip install -e .

文件结构

.

├── cchess_pose/ # 关键点检测

├── cchess_reg/ # 棋局分类

数据集

数据统计

示例图像

s

This page was generated by GitHub

Pages.

养生小贴士

超级县令攻略大全 新手攻略汇总
💡 小知识

超级县令攻略大全 新手攻略汇总

📅 07-09 👍 280
对开门冰箱怎么分冷冻和冷藏
💡 小知识

对开门冰箱怎么分冷冻和冷藏

📅 07-25 👍 460
小红书,一夜出海
💡 小知识

小红书,一夜出海

📅 09-17 👍 513