首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在 CNB 用 WorkBuddy 搞了个 6500+ Forks 的地图识别项目,全程靠「说人话」

在 CNB 用 WorkBuddy 搞了个 6500+ Forks 的地图识别项目,全程靠「说人话」

原创
作者头像
valetzx
修改2026-06-30 09:50:12
修改2026-06-30 09:50:12
411
举报

说实话,这个项目能做出来,我自己都挺意外的~

首页识别台
首页识别台
大地图路线规划
大地图路线规划

起因很简单——玩洛克王国的时候需要找矿找宝箱,网上的地图又要开个页面手动去找,又不想在电脑上下太大的python库,就想做个工具实时识别小地图位置。本来以为是个小周末项目,结果越做越上头,最后搞出了一个完整的前后端系统。

而且整个过程,我几乎没手写什么代码,全是靠 WorkBuddy 一句一句聊出来的。

这东西到底干嘛的?

一句话概括:你打开浏览器捕获游戏画面 → 后端用视觉算法识别小地图 → 悬浮窗实时标点

听起来简单,但我后续还额外塞了不少东西:

功能

干嘛用的

🔍 实时识别

浏览器抓画面,SIFT/AI 三引擎并行算

🗺️ 大地图展示

Canvas 渲染超大地图,箭头标记你的位置

📍 标记点系统

2000+ 个 NPC/宝箱/传送点,分块加载

🛣️ ****路线规划

TSP 最短路径,22 条预设跑图路线

📺 展示室直播

一人操作,多人围观

🥚 孵蛋提醒

OCR 自动检测孵化完成

🖼️中画悬浮窗

悬浮窗模式,覆盖原本游戏地图

技术上是前端浏览器画面捕获 + 后端 Python OpenCV 视觉计算的轻量架构。一台普通电脑就能跑。

为什么选 WorkBuddy?因为我有几个硬伤

坦白讲,单靠自己干这个项目,大概率会半途而废:

  1. 算法劝退——SIFT 特征匹配、光流追踪、卡尔曼滤波……这些 CV 算法参数多到让人头秃
  2. 前后端割裂——Python 后端 + 原生前端,两边要紧密配合,我一个人搞不定
  3. 性能要求高——实时识别要 <100ms 延迟,多线程、WebSocket、节流推送……

WorkBuddy 刚好全接住了。它不只是写代码,而是真的能理解你在说什么,然后帮你把想法变成现实。

提示词才是核心竞争力

这部分是重点。整个项目的开发历程,其实就是我怎么跟 WorkBuddy 对话的过程

第一天:搭骨架

刚开始我只丢了一段很朴素的需求:

代码语言:txt
复制
我要做一个洛克王国游戏的地图识别工具。
技术要求:
1. 前端用原生 JavaScript,通过浏览器的 Screen Capture API 获取游戏画面
2. 后端用 Python + Flask + Flask-SocketIO,使用 OpenCV 的 SIFT 算法进行图像识别
3. 通过 WebSocket 实时传输截图到后端,后端返回识别坐标
4. 整体架构要轻量,能在一台普通电脑上运行

请帮我设计整体项目结构,包括目录划分、前后端通信协议、数据流设计。
重点关注:如何保证实时性?如何处理低纹理场景的识别失败?

WorkBuddy 没有直接甩代码,而是先给了我一个清晰的分层架构:

  • 捕获层(前端):截帧 → JPEG 编码 → WebSocket 发送
  • 计算层(后端):接收帧 → 小地图检测 → SIFT 匹配 → 算坐标
  • 推送层(双向):Socket.IO 双通道,支持主动推 + 被动拉

最让我惊喜的是它主动提了低纹理兜底链的设计思路——SIFT 失效时依次降级:放宽参数 → ECC 对齐 → 相位相关 → 哈希粗定位 → 惯性导航。这个后来成了鲁棒性的核心。

架构
架构

第二天:搞定核心算法

接下来是重头戏——SIFT 引擎开发。我的提示词长这样:

代码语言:txt
复制
实现一个基于已有 SIFT 的小地图识别引擎:

输入:
- 大地图预计算的特征点索引文件 (map_feats.npy, map_coords.npy)
- 实时捕获的小地图圆形区域图像(已裁剪)

输出:
- 玩家在大地图上的绝对坐标 (x, y)
- 匹配置信度
- 是否检测到场景切换(传送等)

实现要点:
1. 使用 cv2.SIFT_create() 提取特征
2. FLANN KD-Tree 进行快速近邻搜索(k=2)
3. Lowe's ratio test 过滤误匹配(阈值 0.82)
4. RANSAC 估计单应性矩阵(最小匹配数 5,重投影阈值 5.0)
5. CLAHE 自适应直方图均衡化增强对比度
6. 支持色温补偿(游戏画面偏暖色问题)
7. 结果经过卡尔曼平滑后再输出

注意:代码要模块化,方便后续切换 ORB 和 AI 引擎。

这段直接产出了 tracker_engines.py 的核心逻辑(约 77KB)。WorkBuddy 最强的地方在于——它能把论文级的算法描述直接转成工程代码。Lowe's Ratio Test、RANSAC 鲁棒估计这些细节全都一次到位。

模式快速切换
模式快速切换

第三天:UI 部分——这是我最担心的

作为一个室内设计师,做 UI 一直是AI弱项。但 WorkBuddy 的表现完全超出预期。

我只用了自然语言描述风格,没有写一行代码:

代码语言:txt
复制
请为"地图识别工具"的识别台页面设计并实现 UI。

页面布局:
- 左侧:视频预览区(显示捕获的游戏画面),带一个小地图圆形高亮 overlay
- 右侧上:状态面板(当前坐标、匹配点数、置信度、FPS、引擎状态)
- 右侧下:控制按钮区(开始/停止捕获、切换引擎、重置、打开地图页、展示室模式)
- 底部:日志滚动区域,显示识别过程的 debug 信息

设计风格:
- 暗色主题,类似游戏 HUD 风格
- 主色调:深灰底色 (#1a1a2e) + 青色强调色 (#00d4ff) + 橙色警告色 (#ff6b35)
- 圆角卡片式布局,带微妙的玻璃拟态效果(backdrop-filter: blur)
- 状态数字用等宽字体,坐标变化时有平滑过渡动画
- 按钮 hover 时有发光效果(box-shadow glow)

交互要求:
1. 点击"开始"后请求屏幕捕获权限,显示选择源界面
2. 捕获开始后自动通过 socket.io 发送帧到后端
3. 收到坐标更新后,状态面板数字要有跳动动画
4. 响应式设计,最小支持 1024x768 分辨率

请生成完整的 HTML + CSS + JS 代码。
后端配置页
后端配置页

注意看——我全程在说感受:"暗色主题"、"HUD 风格"、"玻璃拟态"、"发光效果"。WorkBuddy 把这些模糊的形容词变成了精确的 CSS:

  • backdrop-filter: blur(10px) 搞定玻璃效果
  • box-shadow: 0 0 20px rgba(0, 212, 255, 0.5) 实现发光
  • transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) 流畅动画
  • CSS 变量体系定义主题色,一键换肤

它的审美是在线的。 圆角、阴影、微交互、色彩搭配……全部到位。对于一个不会前端的人来说,这体验简直像魔法。

大地图页面的提示词也类似:

代码语言:txt
复制
实现大地图浏览页面:

核心功能:
1. 显示一张超大地图图片(约 15000x12000 像素),支持拖拽平移和滚轮缩放
2. 在地图上渲染一个表示玩家位置的箭头(根据朝向旋转)
3. 显示标记点(POI)图标,按分类筛选显示(NPC、传送点、宝箱、任务等)
4. 支持点击标记点查看详情
5. 支持绘制路线(TSP 最短路径可视化)

视觉要求:
- 地图容器占满整个视口
- 标记点用不同颜色和图标区分类别
- 玩家位置箭头带脉冲动画效果
- 路线用渐变色线条 + 箭头方向指示
- 缩放时有惯性效果(momentum zoom)
- 标记点聚合:缩小时自动合并附近标记,显示数量气泡

性能要求:
- 使用 Canvas 2D 渲染(不用 DOM)
- 视口外的标记点不渲染(空间索引裁剪)
- 地图图片用分块加载(虚拟化)

第四天:系统集成

最后是通信协议和配置热更新:

代码语言:txt
复制
设计前后端的 WebSocket 通信协议:

场景特点:
1. 前端以 ~10fps 发送 JPEG 图像帧(每帧约 50-100KB)
2. 后端处理后需要 <80ms 内返回坐标
3. 支持多个浏览器标签页同时连接(多会话隔离)
4. 支持展示模式:一人推流,多人观看

协议设计要求:
- 帧数据用二进制传输,不要 base64(省 33% 带宽)
- 坐标返回用紧凑 JSON 格式
- 服务端实现节流:如果处理不过来,自动丢弃旧帧
- 双模式推送:Plan A 处理完主动推 / Plan B 客户端拉缓存
- 会话用 token 绑定,每个 token 独立的 tracker 实例
- 展示室用 room 概念,10fps 节流广播

以及运行时配置热更新:

代码语言:txt
复制
实现运行时配置热更新功能:

需求:
1. 所有算法参数集中在 config.py 中定义(200+ 个参数)
2. 后端启动后在控制台可以输入命令动态修改参数
3. 不重启服务,修改立即生效
4. 参数变更时相关模块自动重新初始化(如 SIFT 参数变了要重建特征检测器)
5. 支持命令:help / show / set KEY=VALUE / reset

到这里,整个项目基本成型了。从零到能跑,前后也就三四天

几个让我印象深刻的瞬间

· 它自己设计了"展示室"

我只是随口提了一句"能不能让别人看到我的识别过程"。结果 WorkBuddy 不仅实现了基础广播,还设计了完整的展示室系统:

  • 展示者/观众角色分离
  • 服务端 10fps 智能节流(防带宽爆炸)
  • 断线自动清理 + 冲刷任务保证最后一帧必达
  • 观众列表实时同步

这些细节我一个字都没提,是它基于对"展示室"的理解自己补上的。

· UI 审美在线

WorkBuddy 生成的界面让我刮目相看——圆角卡片、玻璃拟态、微交互动效、语义化配色(成功绿/警告橙/错误红)、键盘无障碍支持、CNB一键启动……

它知道什么是"现代感"。

· 帮我抓到了一个藏了两天的 bug

有一次定位结果系统性右偏 30-40 像素,只在特定角度出现。我自己查了两天没找到原因。

我跟 WorkBuddy 说:"小地图中心点转换到大地图坐标后,系统性右偏 30-40px,只在特定角度出现"

它分析后直接指出:OpenCV 的 SIFT 特征点坐标原点是左上角,而透视变换假设的是几何中心,差了一个半圆半径的 offset。

两行代码修好。这个问题我排查了两天。

项目现在怎么样了?

截至 2026 年 6 月:

指标

数值

⭐ Stars

105

🍴 Forks

6,505

几个实用的小技巧

技巧 1:沿着数据流描述需求

给 WorkBuddy 讲功能时,按数据流动的方向说比按步骤说效率高很多:

  • ❌ "先创建变量,再调用函数,然后……"
  • ✅ "JPEG 帧从 WebSocket 进来 → 解码成 numpy → SIFT 匹配 → 输出坐标"

技巧 2:先定义接口契约

每次开发新功能前,我会先用提示词定好输入输出格式。这样生成的代码天然满足约束,前后端联调成本几乎为零。

技巧 3:渐进式迭代

复杂功能别试图一次说完。我的节奏通常是:

轮次

目标

产出

第 1 轮

基础流程 MVP

~200 行能跑

第 2 轮

加增强和容错

~350 行

第 3 轮

性能优化

~550 行

第 4 轮

鲁棒性兜底

~800 行

第 5 轮

架构重构

最终版 1200+ 行

每轮在上轮基础上增量修改,WorkBuddy 能完美理解上下文。

最后

这个项目从想法到落地,WorkBuddy 扮演的角色远不止"代码生成器":

它是架构师——帮我设计了分层解耦的系统;

它是算法专家——将 CV 论文知识转化为工程代码;

它是UI 设计师——把模糊的风格描述变成精致的界面;

它是调试伙伴——通过现象描述快速定位问题;

它是文档作家——生成了完善的 README 和注释。

提示词模板
提示词模板

如果你也在用 WorkBuddy 做了有趣的项目,欢迎来分享季投稿交流,一起聊聊你的"神仙用法" 🎉


本文基于「地图跟点助手」真实开发经历整理。感谢 WorkBuddy 团队,也感谢所有 Star/Fork 的朋友们!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这东西到底干嘛的?
  • 为什么选 WorkBuddy?因为我有几个硬伤
  • 提示词才是核心竞争力
    • 第一天:搭骨架
    • 第二天:搞定核心算法
    • 第三天:UI 部分——这是我最担心的
    • 第四天:系统集成
  • 几个让我印象深刻的瞬间
    • · 它自己设计了"展示室"
    • · UI 审美在线
    • · 帮我抓到了一个藏了两天的 bug
  • 项目现在怎么样了?
  • 几个实用的小技巧
    • 技巧 1:沿着数据流描述需求
    • 技巧 2:先定义接口契约
    • 技巧 3:渐进式迭代
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档