AQ Watcher 面向获授权的隔离测试环境,通过窗口画面、ROI 模板和本地 OCR 识别卡片与价格,再由状态机规划外部鼠标动作;默认 Dry Run,只记录应点击坐标,以可审计边界验证视觉自动化流程。
在一个需要反复查看卡片、读取名称和价格、再按规则打开详情的市场测试流程里,真正困难的不是发出一次鼠标点击,而是让识别、排序、复核和异常恢复形成可解释的闭环。
AQ Watcher 被定位为 Windows 外部视觉自动化原型,服务于获授权的隔离测试环境。它不注入目标进程,不读取内部状态,而是像人一样只看可见窗口,再根据既定状态机决定下一步。
问题与定位:只使用屏幕事实
内部接口或进程级读取可能带来更高的耦合和更大的安全边界。
AQ Watcher 选择更克制的路线:枚举屏幕上的可见顶层窗口,使用精确窗口标题与窗口类绑定目标,不打开目标进程句柄;通过客户区捕获获得画面,在 ROI 内做模板匹配和 OCR,再把结果转换为候选槽位。
这样牺牲了对隐藏状态的直接访问,换来可观察、可回放、可审计的输入来源。
工具的默认启动模式是 Dry Run:系统只记录“本应点击的坐标”,不真正发送输入。只有测试环境确认、窗口白名单和目标窗口处于前台等条件同时成立,才允许进入实际输入路径。这让识别算法、排序逻辑和坐标诊断可以在不触发外部动作的情况下先被验证。
核心方案:OCR、网格拟合与状态机组合
纯外部视觉 OCR 管线
窗口客户区捕获目标约为 20 FPS,但预览显示节流到 4 FPS;窗口最小化时不生成预览帧,避免无意义的采集。主窗口和自身下拉菜单会从截图合成中排除,下拉展开期间暂停取帧,减少界面控件污染识别区域。
中文道具名使用本地 PP-OCRv5,高频价格使用轻量英文数字 OCR,并按灰度、反色和二值化重试;失败时回退 Windows OCR。清理阶段会移除中文字符间、数字间及标点附近的异常空格,同时保留正常英文词间空格。
一张真实卡片锚定二维网格
市场页不为每个槽位单独配置 ROI,而是框选一张真实卡片作为共享模板和固定锚点,由此向上下左右推导完整行列。二维网格拟合可以降低列表边缘框选误差造成的整排漂移。卡片换位后,程序按规范化名称重新建立名称到槽位的映射,因此不需要因为位置变化重新校准。
这个设计把“几何位置”和“业务对象”拆开:前者由网格计算,后者由 OCR 名称确认。
从识别到购买结果的状态机
主线先生成卡片槽位,再 OCR 全部名称和价格,然后做名称到槽位映射与优先级排序。排序考虑是否达到目标价、近 45 秒的波动次数以及最久未打开时间。
进入详情后还要复核名称并再次读价;价格过高时关闭详情、复用缓存槽位并重新排序,避免把一次观察误当成最终决策。价格达到条件后加入随机延时和二重校验,再发送购买动作并等待结果。成功弹窗使对应道具计数加一并轮询下一槽位,超时则关闭后重开同一卡片。
关键工程实现:输入、诊断与安全隔离
输入自检和点击诊断被拆开,便于区分“坐标算错”“前台不对”和“输入未发送”等问题。全局急停快捷键是 Ctrl+Shift+F10,用于在测试过程中立即停止自动化链路。
实际外部输入只使用标准 SendInput 与 SetCursorPos;架构明确禁止 OpenProcess、读内存、DLL 注入、全局钩子和驱动。
边界不是文档中的口号,自动架构测试会扫描源码,一旦出现侵入式 API 就让测试失败。
在实现层面,捕获、预览和决策需要解耦:高频采集服务识别提供新帧,预览层按较低频率显示,状态机只消费带有槽位、名称、价格和置信信息的中间结果。这样既避免把 UI 刷新频率误当作识别频率,也让 Dry Run 能复用同一套决策结果来输出诊断记录。
边界与验证
- 工具只面向获授权、隔离的测试环境;外部视觉和标准输入不等于可以绕过目标系统的授权。
- 资料能证明设计的识别管线、状态机和禁止项,不能证明某个目标应用上的识别准确率、购买成功率、持续运行时长或生产规模。
- 应分别验证最小化窗口、下拉菜单展开、中文 OCR、价格 OCR 失败回退、卡片换位、价格变化、详情超时、成功弹窗和急停。
- 默认 Dry Run 是首轮验收入口:先核对截图、OCR 文本、槽位映射、优先级和候选坐标,再在白名单窗口和前台条件齐备时做受控输入测试。
- 如果窗口绑定、名称复核或二重价格校验失败,状态机应停止或回退,不应凭猜测点击。
总结
AQ Watcher 的核心不是“更激进地控制目标”,而是把“看画面—提取证据—排序—复核—动作—等待结果”做成一条边界清晰的外部状态机。
共享锚点减少了网格配置成本,专用 OCR 与预处理重试针对名称和价格的不同特征,Dry Run、急停和源码架构测试则把风险控制前置。它仍然是原型,价值在于用可观察、可回退的工程方法验证视觉自动化,而不是宣称未经核验的稳定性或规模。
评论