10分钟跑通 VinXiangQi:基于 YOLOv5 的象棋智能连线工具实战指南
10分钟跑通 VinXiangQi:基于 YOLOv5 的象棋智能连线工具实战指南
【免费下载链接】VinXiangQiXiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi
VinXiangQi 是一款基于 YOLOv5 的中国象棋智能连线工具:它持续识别屏幕上某个象棋对局软件里的棋盘,把识别结果交给 UCI/UCCI 象棋引擎分析,再把引擎建议的走法自动点回游戏里。换句话说,它解决的是"看着屏幕上的棋局,让 AI 替我思考并落子"这件事,识别与点击全程自动,不用手动输入棋谱。
先说清楚:它适合谁,不适合谁
适合在电脑上下网棋(天天象棋、JJ 象棋等)、想给对局接一个 AI 分析或自动续盘的棋友;也适合想研究"视觉识别 + 引擎驱动"这套流程的开发者。
它不是独立的象棋对弈软件,自己不能开局对局,必须依附于一个已在屏幕上运行的象棋客户端。另外项目当前仍在完善中(README 作者也明确在招募参与者),部分功能以"能跑通"为标准,遇到边界情况需要自己调。
动手前准备:环境清单一次列全
依赖很少,主要是 Windows 侧的开发环境:
- Windows 系统+.NET Framework 4.8(工程文件 目标框架为 v4.8)
- Visual Studio 2019 或 2022(任意社区版即可,勾选 .NET 桌面开发负载)
- 一个 UCI/UCCI 象棋引擎的可执行文件,如 Stockfish 的象棋版、Vain 等,后面接引擎时用
- 一个你打算连线的象棋客户端(对局软件)已经装好
NuGet 包仓库里已经内置(packages/目录,含 OnnxRuntime、SQLite 等),一般不需要手动还原;若编译提示缺包,在 Visual Studio 里对解决方案执行一次"还原 NuGet 包"即可。
第一次跑起来:从零到首局识别的最短路径
第一步,克隆仓库:
git clone https://gitcode.com/gh_mirrors/vi/VinXiangQi第二步,用 Visual Studio 打开VinXiangQi.sln,按 F5 编译运行。首次启动后按下面顺序操作:
- 选方案。主界面里选择要连线的目标方案,内置的有"天天象棋"和"JJ象棋_棋力评测"两个(方案文件是程序根目录
Solutions文件夹里的 TXT,写明截图/点击用哪个窗口的标题或类名)。连别的软件就点"寻找窗口句柄":点完按钮 2 秒内把鼠标移到目标窗口上即可捕获。 - 调缩放比。进入调试状态后,看左上角的截图预览:截图显示不全就调大缩放比,出现黑边就调小,直到窗口刚好覆盖整张棋盘图。
- 选截图与鼠标模式。默认是后台截图 + 后台鼠标,大多数软件可用;若调试画面是黑的,改勾"前台截图"(见后面排错一节)。
- 开始连线。打开游戏对局,按当前轮到谁选择"我方开始"或"对方开始",识别就会启动;卡住了就点"重新检测棋盘"刷新一次。
跑通后的状态就是上面那张主界面截图的样子:左边是识别画面和识别结果,右边是引擎与识别的各项设置。识别结果面板里的棋子是可以点击的,点一下会把点击转发到被连线的游戏里,方便你调试点击落点是否准确。
它是怎么"看懂"棋盘的
原理可以压缩成一句话:截图 → YOLOv5 模型检测 → 还原成 9×10 的棋盘数组 → 喂给引擎。
每次检测,软件先按方案截一张棋盘区域图,交给 YOLOv5 的 ONNX 模型(默认nano.onnx,输入尺寸 640×640,见 模型定义),模型输出每颗棋子的类别和坐标,软件据此拼出当前局面。核心逻辑集中在 识别模块 里,源码里维护了"稳定棋盘"和"待确认棋盘"两份状态,用来过滤动画过程中的中间帧,避免走子动画被误判成局面变化。
接上引擎:UCI 引擎怎么配、参数给多少
在引擎管理里添加引擎,填入引擎 exe 的完整路径即可。软件通过 UCI/UCCI 协议与引擎通信,会读取引擎自带的全部选项(引擎通信源码),你可以在设置面板里逐项改。
影响体验最大的几个参数(默认值来自 ProgramSettings):
- 引擎步进时间(思考时间):默认 2.0 秒。电脑慢就调到 1.5 秒,追求深度就加到 3~4 秒
- 检测间隔:默认 550ms。这是识别轮询的频率,调小反应更快但更吃 CPU
- 线程数:默认 4,按你的物理核心数调整
- 停止分数:默认 2000,局面已明显领先/落后时提前停算,省资源
调完不用反复猜测效果:引擎的思考输出面板会实时打印info行,深度和评估分都在里面,你能直接看到引擎"想了多少、觉得谁优"。
三个真实用法:开局库、棋力对练、自动续盘
开局库对练。在开局库设置里选择是否启用云库或本地开局库(界面见下图)。之后每到一个开局阶段,软件会先查库给出库里推荐着法,而不是每次都让引擎从零算起。适合复盘经典开局、看引擎和库的推荐差在哪。
让引擎替一方下棋(人机/双引擎对练)。选"我方开始"或"对方开始"决定引擎控制哪一方。引擎算出最佳步后,自动点击模块会把这一步点回游戏窗口。你可以一边看引擎思考输出,一边观察识别面板上的棋子位置是否和实际局面一致,不一致通常就是缩放比没调好。
自动续盘。有些平台对局结束后需要点"再来一局"之类的按钮。自动点击管理支持你框选这类按钮:在管理界面右侧的画面上点两次(先左上角后右下角)框出按钮区域,点保存;然后在连线设置里勾选自动点击。之后识别到按钮出现在画面上,软件就会自动点下去。
框按钮时尽量把范围收小、只包住按钮核心部分,不要框整个按钮块——匹配范围越小,检测越快越准。
想让它更顺眼:按设备档位给参数
原则很简单:识别频率(检测间隔)决定"跟手"程度,思考时间决定"聪明"程度,两者都吃 CPU,按机器分档。
| 设备档位 | 思考时间 | 检测间隔 | 线程数 | 典型用途 |
|---|---|---|---|---|
| 老机器 / 集显 | 1.5 秒 | 800ms | 2 | 挂机式自动续盘 |
| 主流独显机 | 2.5 秒 | 500ms | 4 | 日常对弈辅助 |
| 高性能多核 | 4.0 秒 | 300ms | 按物理核数 | 认真看深度分析 |
另外记住:识别模型默认是nano.onnx(速度优先)。软件也支持把别的.onnx模型文件放进目录里切换,精度和速度的取舍自己按机器定。
出问题先查这几处
现象:调试截图是黑屏。可能原因:目标软件渲染方式不被后台截图支持(浏览器、部分客户端常见)。 处理:勾选"前台截图"。代价是窗口不能被遮挡。
现象:识别出来了,但自动点击没点上。可能原因:后台鼠标依赖向窗口发系统消息,不是所有软件都响应。 处理:改勾"前台鼠标",这是通用模式;缺点是连线点击期间会占用你的鼠标,期间别动它。
现象:识别结果出现,软件却停止分析。可能原因:持续识别模式下偶发的状态卡死(作者在 README 里也提到了这个概率性问题)。 处理:点"重新检测棋盘"手动刷新;若频繁出现,把检测间隔调大一点。
现象:引擎一直报加载失败或超时。可能原因:引擎路径写错,或引擎不是 UCI/UCCI 协议的程序。 处理:在引擎管理里重新选一遍 exe;确认引擎单独运行时能正常响应uci指令。
现象:识别的棋子位置和真实棋盘错位。可能原因:缩放比没对齐,截图区域和真实棋盘有偏移。 处理:重新进入调试状态微调缩放比,以"窗口刚好覆盖棋盘、无黑边"为准。
再往深处走一点
到这一步已经能稳定用了,剩下的是"玩得更细"的三件事:
- 自定义 YOLOv5 模型。你的客户端棋子样式比较特殊、识别总掉链子时,可以按 YoloXiangQiModel 里定义的类别和尺寸训练自己的模型,导出
onnx替换即可。 - 方案通用化。保存方案时(方案保存),如果截图标题里带了具体对局信息或网址,删掉标题只留窗口类名,方案换个对局还能复用。
- 开局库策略。软件支持"最高分"和"随机"两种取法,对练时切随机模式,开局套路会更多样。
代码去哪找
想了解哪段逻辑,直接看对应文件(均在VinXiangQi/目录下):
- 主流程与交互:Mainform.cs
- 棋盘识别核心:DetectionLogic.cs
- 引擎通信(UCI/UCCI):EngineHelper.cs
- 截图与窗口句柄:ScreenshotHelper.cs、ScreenshotForm.cs
- 模板匹配点击:ImageHelper.cs、MouseHelper.cs
- 开局库与棋库:OpenBookHelper.cs、ChessDBHelper.cs
- 规则与局面合法性:XiangQiGame.cs
先接上一个游戏试试
参数不用一次调到位:先用默认配置把一个你常下的客户端连上,确认"识别对、引擎会想、点击能落下"三件事都成立,剩下的档位调整自然会知道往哪调。遇到问题可以进项目 README 里留的交流群(755655813)反馈,作者也在那里。
【免费下载链接】VinXiangQiXiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
