Skip to content

# [Bug] computer_state 显式请求 OCR 时被 UIA 缓存短路,WebView2 无 aria 元素无法 OCR 定位 #3

Description

@Linearl

问题描述

computer_state(operation=state, mode="ocr", window_id=...) 显式请求 OCR 时,只要窗口没有产生"语义变化",就返回 UIA 缓存"source":"uia","unchanged":true),OCR 从未真正执行。这导致对 WebView2(Edge WebView2 Runtime)渲染的应用,所有无 aria-label 的 DOM 元素(纯 SVG 图标按钮)完全无法通过 OCR 定位——而本地 mss 截屏 + PaddleOCR 能正常读到这些按钮的文字(如 tooltip/图标旁文本)。

复现步骤

环境:Windows 11,Reasonix 桌面版(wails v2 + WebView2),computer-use MCP 插件。

  1. 打开 Reasonix 桌面版窗口(侧边栏有纯 SVG 图标按钮:回收站 / 自动化 / 设置,均无 aria-label)
  2. 调用 computer_state({window_id, mode: "ocr", goal: "查看侧边栏底部按钮"})
  3. 实际返回:"source":"uia" + UIA 元素列表(TabItem 等带 aria 的 DOM 元素),或 "source":"uia","unchanged":true 复用缓存——mode=ocr 被忽略
  4. 同窗口下,只有当页面发生语义变化(如切换到另一个 Tab)后,OCR 才可能真正执行

对照实验:

  • 本地截屏:mss 截取侧边栏底部 160x240 区域 → PaddleOCR 识别出 回收站自动化设置SSH·已断开(坐标精确)
  • computer-use OCR:同一区域、同一时刻,返回 UIA 缓存,无任何 OCR 结果

影响

  • WebView2 应用(wails、Electron 等)中没有无障碍属性的元素(纯图标按钮、canvas 绘制控件)无法用 computer-use 的 OCR 定位,必须借助外部截屏工具
  • 依赖"语义变化"才触发 OCR 的机制还会错过短暂 UI 状态(如 hover tooltip,出现 1-2 秒即消失)
  • UIA 模式对无 aria 元素同样无效(UIA 树中不存在这些节点),二者无法互补,唯一可靠路径是强制 OCR

期望行为

显式传 mode: "ocr" 时应强制执行截屏 + OCR,不因 UIA 缓存而短路;unchanged 判定不应影响显式模式选择。建议:mode 显式指定时跳过缓存复用,只有 mode: "auto" 才允许缓存/回退。

临时 workaround

本机验证可行的替代方案:Python mss 截屏 + paddleocr 直接识别窗口区域,输出文字及坐标(已封装为脚本,可稳定定位无 aria 的图标按钮)。


  • 插件:Reasonix-computer-use(computer-use MCP)
  • 报告日期:2026-08-07

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions