在节奏游戏等场景中,用户希望实现自动化点击或按键,但市面工具多为固定坐标、无屏幕反馈。本项目旨在开发一款**可配置、带视觉反馈**的连点器:支持在游戏画面上框选区域,通过 OCR 或颜色检测判断条件,再执行点击或按键,满足游戏辅助、自动化测试等需求。软件功能与核心模块
**1. 连点器模块**
- 支持添加多个连点点位,配置屏幕坐标、点击间隔、点击次数
- 触发条件:无条件 / OCR 识别指定文字 / 颜色像素计数超阈值
- 支持鼠标点击和键盘按键模拟
- 全局热键 F6 启动、F7 停止
**2. 音符联动模块**
- 针对节奏游戏,按颜色(蓝/粉/绿)检测音符出现
- 每条规则可配置 ROI 区域、HSV 范围、差分/峰值阈值
- 启动时自动采样背景基线,扣除常驻 UI 干扰
- 检测到音符后触发对应按键(如 f/j/f+j),支持诊断模式
**3. 区域编辑模块**
- 全屏截图后拖框选取 ROI 区域
- 实时预览 HSV 颜色检测结果与像素统计
- 支持预设和手动 HSV 校准
### 业务流程与功能路径
1. 启动程序 → 加载配置 → 选择「连点器」或「音符联动」标签页
2. 连点器:新增点位 → 编辑坐标/条件/动作 → 保存 → F6 启动
3. 音符联动:新增规则 → 框选判定区 → 选择颜色预设或自定义 HSV → 绑定按键 → 启动检测 → 游戏内自动按键
整体架构与技术栈
采用 Python 桌面应用架构,主要模块:
- **GUI 层**:Tkinter + ttk,双标签页(连点器 / 音符联动),Treeview 管理点位与规则
- **截图层**:mss 高性能截图(主),pyautogui 备用;线程本地 mss 实例避免跨线程 GDI 句柄问题
- **识别层**:OpenCV 做 BGR→HSV 转换和 inRange 颜色检测;pytesseract 做 OCR(可选)
- **输入层**:pyautogui 鼠标、pynput / interception 键盘
音符检测采用 200fps 主循环,串行截图降低延迟,差分+峰值双重触发逻辑,背景基线扣除常驻 UI 像素。
### 负责模块与量化结果
- 设计并实现**连点器引擎**:支持 OCR/颜色条件触发,检测延迟约 10–20ms
- 设计并实现**音符检测引擎**:背景基线、净像素计算、差分/峰值双触发,检测周期约 5ms
- 实现**区域选取器**:全屏截图 + 拖框选择 + HSV 预览,编辑体验对标专业校准工具
- 在 3 条规则、约 200fps 场景下,单次检测 + 提交按键延迟约 2–4ms
### 难点与解决方案
1. **背景干扰导致漏检**:ROI 框住常驻 UI 时,像素长期在 4000+,音符出现只增加几个像素,差分无法触发。
- 解决:启动时采样 5 帧中位数作为背景基线,用「净像素 = cnt - base」做峰值触发,并支持运行中重置基线。
2. **mss 跨线程异常**:检测线程与主线程共享 mss 实例导致 `srcdc` 错误。
- 解决:用 `threading.local()` 为各线程创建独立 mss 实例。
3. **检测延迟过大**:并行截图 + `wait(timeout=20ms)` 带来 10–12ms 延迟。
- 解决:改为串行截图,3 条规则总耗时约 2–4ms,延迟显著降低。
4. **冷却时间导致连音符漏检**:安全余量 20ms 使快速连击被冷却挡住。
- 解决:将安全余量降至 5ms,并让冷却以「按键释放时间 + 余量」为准。