基于 模板匹配 + OCR + YAML 工作流 的游戏视觉自动化框架。当前内置示例目标是 崩坏:星穹铁道,推荐游戏窗口模式、客户区 1280×720。
本项目适合学习游戏视觉自动化、模板匹配、OCR 与可配置工作流。实际使用前请自行评估游戏用户协议和账号风险。
- 模板匹配:基于 OpenCV,支持 ROI、阈值、灰度/边缘/彩色匹配和轻量多尺度识别。
- OCR 识别:基于 RapidOCR,用于文字锚点和界面状态判断。
- YAML 工作流:用
tasks/*.yaml描述点击、等待、条件分支、循环和变量覆盖。 - 游戏插件机制:通过
entry_points注册新游戏插件,核心逻辑可复用。 - 调试工具链:提供模板框选、阈值标定、anchor 离线评估、内容识别、workflow lint、截图导入、离线校验、失败截图保存。
- Game Content Recognition / Perception v2:离线识别 screen state、可见 UI anchor、OCR 文本和结构化提取字段,并输出 JSON。
- 回归测试 fixtures:可用合成截图验证模板锚点是否仍可识别。
- Windows 10/11
- Python 3.11+(推荐 3.11 或 3.12)
- 游戏窗口化运行;星穹铁道推荐客户区 1280×720
- 可选:PowerShell 7 或 Windows PowerShell
说明:rapidocr-onnxruntime 在不同 Python 版本上的 wheel 支持可能不同。如果安装 OCR 依赖遇到问题,优先尝试 Python 3.11/3.12。
cd C:\Users\16025\PythonProjects\OCR4gamepython -m venv .venv
.\.venv\Scripts\Activate.ps1如果 PowerShell 拦截脚本执行,可临时允许当前会话执行:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\.venv\Scripts\Activate.ps1开发/本地运行推荐安装 dev 依赖:
python -m pip install --upgrade pip
pip install -e ".[dev]"只安装运行依赖:
pip install -e .ocr4game --version
ocr4game --list-games如果命令不可用,可先确认虚拟环境已激活,或用模块方式运行:
python -m ocr4game.app --list-games推荐顺序:
安装 → 启动游戏窗口 → 离线校验 → 准备模板 → 标定阈值 → 窗口预检 → 运行任务
- 使用窗口模式,不要最小化。
- 客户区分辨率尽量与
configs/games/star_rail/profile.yaml中的resolution一致。 - 默认配置会匹配窗口标题和进程名
StarRail.exe。
列出候选窗口:
ocr4game-annotate --game star_rail --list-windows --verbose期望看到类似信息:
process=StarRail.exe size=1280x720 ... <-- 已选
无需打开游戏:
ocr4game --validate --game star_rail --task daily严格校验会把缺失模板等资源问题视为失败:
ocr4game --validate --strict --game star_rail --task dailyocr4game-annotate --game star_rail --name main_menu_marker
ocr4game-annotate --game star_rail --name claim_button
ocr4game-annotate --game star_rail --name confirm_button操作方式:弹出窗口后拖拽框选 UI,按 Enter 保存,按 R 重新抓取当前游戏画面,按 Esc 取消。工具会自动:
- 保存模板到
configs/games/star_rail/assets/ui/ - 更新
configs/games/star_rail/profile.yaml中对应锚点的roi
ocr4game-import --game star_rail --from-dir D:\captures\star_rail支持目录结构:
D:\captures\star_rail\
ui\
ui\claim_button.png
ui\buttons\confirm_button.png
frames\
daily_panel.png
nested\debug_frame.jpg
说明:
- UI 模板会按
profile.yaml中anchors.*.image的相对路径导入,支持子目录。 - frames 支持
.png、.jpg、.jpeg、.webp。 - 默认会同步到
tests/fixtures/;不需要同步时加--no-fixtures。
仅用于测试/CI,不代表真实游戏界面:
python tests/fixtures/generate_star_rail.py在线从游戏窗口截屏:
ocr4game-threshold --game star_rail --anchor claim_button --sweep离线使用静态截图:
ocr4game-threshold --game star_rail --anchor claim_button `
--frame tests/fixtures/star_rail/frames/daily_panel.png --sweep将建议阈值写回 profile.yaml:
ocr4game-threshold --game star_rail --anchor claim_button --apply窗口预检,不执行动作:
ocr4game --dry-run --game star_rail --task daily运行 daily:
ocr4game --game star_rail --task daily临时覆盖任务变量:
ocr4game --game star_rail --task daily --var sweep_times=3 --var claim_loop_max=5提高日志详细程度:
ocr4game --log-level DEBUG --game star_rail --task daily| 命令 | 说明 |
|---|---|
ocr4game --list-games |
列出已注册 / 已配置游戏 |
ocr4game --validate --game star_rail --task daily |
离线校验任务 |
ocr4game --dry-run --game star_rail --task daily |
校验 + 窗口预检 |
ocr4game --game star_rail --task daily |
执行任务 |
ocr4game-annotate --game star_rail --name claim_button |
框选并保存模板 |
ocr4game-annotate --game star_rail --list-windows --verbose |
排查窗口绑定 |
ocr4game-threshold --game star_rail --anchor claim_button --sweep |
查看匹配置信度和阈值档位 |
ocr4game-import --game star_rail --from-dir D:\captures\star_rail |
批量导入模板和 frames |
ocr4game-report --run runs/star_rail_xxx |
根据 trace 生成 run 诊断报告 |
ocr4game-replay --run runs/star_rail_xxx --anchor claim_button |
离线用失败截图复查锚点识别 |
ocr4game-recognize --game star_rail --image tests/fixtures/star_rail/frames/daily_panel.png --json |
离线输出 screen/content JSON |
完整参数与退出码见 docs/CLI.md。
configs/
global.yaml # 日志、捕获、输入、工作流默认配置
games/star_rail/
profile.yaml # 窗口、分辨率、锚点、模板匹配参数
tasks/daily.yaml # daily 工作流
assets/ui/*.png # 实机模板图
docs/ # 使用、CLI、工作流、新游戏和排错文档
src/ocr4game/ # 引擎、感知、插件、运行时和工具 CLI
tests/ # 单元测试与 fixtures 回归
runs/ # 运行失败截图和日志产物(gitignore)
configs/games/star_rail/profile.yaml 定义:
window:窗口标题、排除项、进程名resolution:期望客户区大小和容差anchors:模板/OCR 锚点screen_states:由 anchor/OCR 规则组合出的画面状态content_extractors:按状态和 ROI 提取任务名、数字、按钮状态等结构化字段recovery:失败恢复按键extensions:插件或游戏自定义扩展配置
模板锚点常见字段:
claim_button:
type: template
image: ui/claim_button.png
threshold: 0.88
scales: [0.95, 1.0, 1.05]
match_mode: gray
roi: [0.3, 0.5, 0.7, 0.95]screen_states 用 require/optional/reject 规则判断当前画面,例如:
screen_states:
reward_screen:
require:
- anchor_visible: claim_button
optional:
- ocr_contains_any: ["领取", "奖励"]content_extractors 可从固定 ROI 或 anchor 结果提取结构化内容:
content_extractors:
daily_training:
when_state: reward_screen
fields:
active_points:
type: ocr_number
roi: [0.7, 0.2, 0.95, 0.35]
reward_claimable:
type: anchor_visible
anchor: claim_button工作流 when 也可使用内容条件:screen_state、ocr_contains、content_eq、content_gt 等。
离线识别示例:
ocr4game-anchor-eval --game star_rail --include-ocr --screenshots tests/fixtures/star_rail/frames --output-dir runs/anchor_eval --html --overlay
ocr4game-recognize --game star_rail --image tests/fixtures/star_rail/frames/daily_panel.png --json
ocr4game-recognize --game star_rail --images tests/fixtures/star_rail/frames --output-dir runs/recognize_batch
ocr4game-lint --game star_rail --task daily --strict
python -m ocr4game.app --validate --strict --game star_rail --task dailyconfigs/games/star_rail/tasks/daily.yaml 描述步骤、条件、循环和变量。更多语法见 docs/WORKFLOW.md。
安装 dev 依赖后运行:
pytest
python -m ruff check src tests常用定向测试:
pytest tests/test_fixture_regression.py -q
pytest tests/test_workflow_engine.py tests/test_validation.py -q
ocr4game --validate --strict --game star_rail --task daily如果当前环境提示 No module named pytest 或 No module named ruff,说明未安装 dev 依赖:
pip install -e ".[dev]"新增游戏通常需要:
- 新建
configs/games/<game_id>/profile.yaml - 新建
configs/games/<game_id>/tasks/*.yaml - 准备模板资源
configs/games/<game_id>/assets/ - 可选:实现
src/ocr4game/games/<game_id>/plugin.py - 在
pyproject.toml注册 entry point
[project.entry-points."ocr4game.plugins"]
my_game = "ocr4game.games.my_game.plugin:MyGamePlugin"| 问题 | 处理 |
|---|---|
ocr4game 命令不存在 |
激活 .venv,或重新执行 pip install -e ".[dev]" |
| 找不到游戏窗口 | 确认窗口化、未最小化、profile.yaml 的标题/进程名正确 |
| 分辨率不匹配 | 调整游戏客户区到 profile.yaml 中的分辨率,或同步修改配置 |
| 模板识别失败 | 重新框选模板、缩小 ROI、运行 ocr4game-threshold --sweep 标定阈值 |
| OCR 依赖安装失败 | 尝试 Python 3.11/3.12,并升级 pip |
| 任务中途失败 | 查看 runs/<game_id>_<timestamp>/fail_<step_id>.png |
更多排查见 docs/TROUBLESHOOTING.md。
| 文档 | 内容 |
|---|---|
| docs/USAGE.md | 从安装到运行的完整流程 |
| docs/CLI.md | CLI 参数和退出码 |
| docs/WORKFLOW.md | 工作流 YAML、vars、when/if |
| docs/TROUBLESHOOTING.md | 常见问题排查 |
| docs/diagnostics.md | trace、报告生成和离线 replay |
| docs/ADDING_A_GAME.md | 接入新游戏 |
| docs/ARCHITECTURE.md | 架构与扩展点 |
| configs/README.md | 配置字段参考 |
本工具仅供学习与研究。使用自动化可能违反游戏用户协议并导致账号风险,请自行评估并遵守相关规定。