Skip to content

Repository files navigation

VisionScript

面向 Windows 的 Python 视觉自动化运行时:截屏、识别、脚本化调度与键鼠执行可在同一套引擎里组合使用。

设计包含捕获与识别、键鼠执行两大形态;脚本采用「项目目录 + manifest.json」结构;核心与界面通过 EventBus 解耦(见 core/event_bus.pycore/visionscript_events.py)。


功能概览

VisionScript 将截屏、识别、键鼠执行与脚本调度整合为一套引擎,各模块通过 EventBus 松散耦合。

核心运行时(core)

  • Engine 主循环:固定 FPS 驱动,支持暂停 / 继续 / 停止 / 动态脚本切换。
  • ScriptContext:脚本唯一入口对象 ctx,整合截图、感知、键鼠执行与日志。
  • EventBus:同步 / 异步事件总线,解耦核心、脚本、UI 与识别模块。
  • WorldState:全局单例状态(暂停标志、停止请求、扩展数据字典)。
  • ScriptRuntimeModule:运行时脚本宿主,支持 tick(ctx) 约定与模块级状态持久化。

屏幕捕获(capture)

  • 窗口截图:BitBlt 窗口客户区捕获,支持标题匹配与 HWND 指定。
  • 全屏截图ScreenCapture 直接抓取整个屏幕。
  • Win11 兼容:提供 BitBlt 黑屏注册表修复与 DwmGetDxSharedSurface 回退。
  • 区域裁剪:支持从大图中按 ROI 裁剪子区域。

视觉识别(perception)

  • 模板匹配:OpenCV matchTemplate,支持多尺度与 NMS。
  • YOLO 检测:ONNX Runtime 推理,实时目标检测。
  • OCR 识别:PaddleOCR 文字识别,支持中英文与多语言。
  • 感知流水线PerceptionPipeline 串接多种识别器,统一输出结构化结果。
  • UI 识别器:专门识别游戏内固定 UI 元素(按钮、对话框等)。

键鼠执行(executor)

  • 鼠标控制:Windows API 注入,支持贝塞尔曲线路径、随机延迟、相对/绝对移动。
  • 键盘控制:支持单键、组合键、文本输入、长按与快捷键。
  • ActionExecutor:高层封装(click_atnavigate_clickshortcutcombo_action 等)。
  • 人性化模式:默认启用随机偏移与延迟,模拟真实人类操作。

脚本系统(scripts)

  • 清单格式:支持 manifest.json与 YAML / JSON 清单文件。
  • 配置嵌套:运行时配置(capture / perception)统一放在 visionscript 键下(兼容旧键 vhsr)。
  • 动态加载:UI 中双击脚本列表即可热切换,无需重启程序。
  • 目录扫描:自动扫描 scripts/ 目录,实时更新可用脚本列表。
  • 热键绑定:每个脚本可独立配置全局快捷键(如 F5Ctrl+F9),一键启动;支持 manifest.json 声明或 config.json 集中管理。
  • 约定入口:脚本模块实现 def tick(ctx): ...,由 Engine 每帧调用;任务完成时可 ctx.finish()return False 结束运行(脚本队列自动衔接下一项,见 docs/script_queue.md)。

用户界面(ui)

  • PyQt6 主窗口:日志面板、脚本列表、控制按钮。
  • 脚本面板:右侧 QListWidget 展示可用脚本,双击加载;QFileSystemWatcher 实时刷新。
  • 日志通道visionscript.* 级别日志自动转发到 ui.log 事件,实时显示在日志面板。
  • 全局热键:支持为每个脚本绑定独立启动快捷键(manifest.json / config.json 双源配置,组合键可用),并可通过通用停止键(默认 F6)一键终止当前脚本。
  • 待机启动:UI 启动时不自动运行引擎,等待用户手动选择脚本后启动。

配置管理

  • 统一配置目录config/ 存放 config.json 等运行时配置(如 WINDOW_TITLEUI_THEMELOG_FLOAT_ENABLEDLOG_FLOAT_BG_ALPHALOG_FLOAT_TEXT_ALPHA 悬浮日志窗、SCRIPT_HOTKEYS)。
  • 脚本清单配置manifest.jsonvisionscript 键下可配置 capture、perception。
  • 输入录制:GUI「录制」页可在 scripts/ 下自动生成 record_* 项目目录与清单;详见 docs/core.md

更细的 API、配置项与限制见 文档索引ScriptContext API 参考


环境与平台

  • 操作系统:Windows(capture/executor/ 依赖 Win32)。
  • Python:建议 3.10+(与 requirements.txt 中依赖一致即可)。

安装

cd <本仓库根目录>
python -m venv venv
.\venv\Scripts\activate
pip install -r requirements.txt

使用 WGC / DwmGetDxSharedSurface 捕获(create_capture 模式 1/2/3)时,额外安装:

pip install -r requirements-capture-ext.txt

运行

python main.py --script <路径>
# 带 PyQt6 界面(与引擎同进程)
python main.py --script <路径> --gui

<路径> 可以是:

  1. YAML 清单文件(入口字段 entrymain
  2. JSON 清单文件nameversionmain,扩展配置在 visionscript 中,兼容 vhsr
  3. 脚本项目目录(内含 manifest.json

不传 --script 时,仅启动空引擎主循环(一般用于扩展自定义模块后再接入)。

内置示例

命令 作用
python main.py --script scripts/example.yaml 最简 YAML + example_tick.py
python main.py --script scripts/example_project manifest.json + tick.py
python main.py --script scripts/input_example ctx.actions 键鼠 API 说明(默认不落键鼠;实机微动见该目录 tick.py

用户脚本约定:在入口模块中实现 def tick(ctx): ...ctxScriptContext(捕获、感知、执行器、ctx.bus 等)。说明见 docs/core.md


仓库结构(精简)

VisionScript/
├── main.py                 # CLI 入口
├── requirements.txt
├── core/                   # 引擎、状态、脚本宿主、EventBus
├── capture/                # 屏幕/窗口捕获
├── perception/           # 识别与流水线
├── executor/             # 键鼠与 ActionExecutor
├── scripts/              # 仅脚本:YAML、manifest 项目目录与入口 .py
├── ui/                   # PyQt6 界面(EventBus 桥接)
├── examples/             # 非 --script 的辅助示例(如 EventBus 终端订阅)
├── docs/                 # Markdown 文档
└── utils/                # 日志等工具

文档

文档 内容
docs/README.md 文档总索引
docs/core.md 脚本清单、tick(ctx)、EventBus、键鼠
docs/capture.md 捕获模式与限制
docs/perception.md 识别流水线与模型
docs/packaging.md Windows 打包与 Setup.exe(PyInstaller、Inno Setup)

说明与责任

本项目用于技术研究与个人自动化学习。请遵守游戏与服务条款,勿用于作弊或未授权场景;键鼠与截图能力具有真实系统影响,仅在可信环境与可信脚本下使用。


许可证

以仓库根目录 LICENSE 为准(GPL-3.0)。

About

VisionScript 是面向 Windows 的 Python 视觉自动化运行时,整合了屏幕捕获、视觉识别、脚本调度与键鼠执行能力。。 本版本为首个正式发布,提供可运行的核心引擎、脚本体系与桌面界面。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages