视觉 Grounding、Box 与目标边界框:从截图定位到可靠点击
俊宁 · 2026-11-03
文章目录
一个手机 Agent 收到“点击查询”后,需要先在当前截图中找到那个按钮。模型返回一组坐标,看似已经完成定位;但按钮可能根本不在屏幕上,截图也可能在点击前过期。我在接入 Jev 图像能力时,发现“视觉 Grounding”“Box”“目标边界框”很容易被当作同一件事。把它们放回一次真实的动作流程,边界就清楚了。
一句话总结
视觉 Grounding 是把目标描述对应到图像位置的过程;Box 是 Jev 提供的一种定位问题;目标边界框是定位结果的数据形式。 边界框给出区域,动作系统还要确认目标存在、换算坐标、检查截图是否仍然有效,并验证点击后的页面变化。
三个词分别处在哪一层
| 名称 | 回答的问题 | 输入或输出 |
|---|---|---|
| 视觉 Grounding | “截图里说的那个目标在哪?” | 输入截图和目标描述,输出目标位置 |
Jev Box | “请在这张图中找到指定目标” | 一种模型问题类型,返回边界框和置信度 |
| 目标边界框(bounding box) | “目标占据哪个矩形区域?” | left、top、right、bottom 四条边 |
“目标边界框”是通用的数据结构。目标检测、OCR、无障碍节点和视觉 Grounding 都可能给出框;有框不等于用了视觉 Grounding。区别在于位置如何得到:视觉 Grounding 依据图像和目标描述寻找对应区域;无障碍树的 bounds 来自应用暴露的控件信息。
Jev 1.14 的 Box 则是视觉 Grounding 的一个具体接口。请求中放入图片,再用一句话描述要找的对象,例如“截图中的查询按钮”。模型返回图像中该对象的矩形位置。TypeSafe 的 Box 文档把四条边定义为相对于图像宽高的比例,取值范围是 0 到 1。
从 Box 到点击坐标,还要走两步
假设截图是 400×400 像素,目标边界框为:
{
"left": 0.20,
"top": 0.40,
"right": 0.80,
"bottom": 0.60
}
四条边对应像素区域 (80, 160) 到 (320, 240)。如果目标适合点击中心,点击点是 (200, 200):
const x = Math.round(((box.left + box.right) / 2) * imageWidth);
const y = Math.round(((box.top + box.bottom) / 2) * imageHeight);
这是图像坐标。实际设备可能存在截图缩放、裁剪、旋转、状态栏或内容视口偏移。动作系统必须使用执行点击时所用坐标系重新映射,不能把缩略图上的像素直接交给手机。点击前还应确认截图版本没有被新页面取代。
Box 找不到目标时也会给框
这是最容易误用的地方。按 TypeSafe 文档,Box 没有“未找到”结果:即使目标不在图中,它仍返回一个框。仅用 confidence 或“框的中心落在屏幕内”就执行点击,会把不存在的目标当成真实控件。
同一次请求可以再问一个 Noul:“目标是否出现在截图中?”Noul 返回 0 到 1 的肯定概率;当存在性证据不足时,动作系统应停止使用该 Box,重新观察或转用其他证据。TypeSafe 官方也建议用 Noul 配合 Box。阈值需要根据目标和误点代价评测,不能从单次样例推导。
一次安全的定位到动作流程可以写成:
采集当前截图 → 判断目标是否存在 → 获取 Box
→ 校验位置与截图版本 → 换算设备坐标
→ 点击 → 重新观察并验证页面效果
最后一步尤其重要:坐标命中不证明业务动作成功。弹窗遮挡、页面滑动、点击区域过小,都可能让动作落在预期之外。
一次最小探针证明了什么
我用 400×400 的白底合成图测试:黑色矩形实际位于 (80, 160) 到 (320, 240),规范化边界为 0.20/0.40/0.80/0.60。Jev 1.14 对“黑色矩形是否存在”的 Noul 给出 0.99;Box 返回 left=0.21、top=0.37、right=0.78、bottom=0.64,置信度 0.94。框覆盖了目标中心。
这次结果说明该请求链路能接收图片,并在这个简单样例上给出可用的位置。它没有证明复杂手机页面的定位准确率,也没有证明端到端点击成功。尤其在密集列表、重复按钮和文字很小的页面,目标描述必须足够具体,必要时先裁剪或放大区域。图像请求格式与 Box 当前仍被 TypeSafe 标为实验能力;上线前应按实际页面测缺失目标、重复目标、遮挡和延迟。
它和页面理解、Accessibility Tree 怎样配合
页面理解需要回答“现在是表单还是结果页”“哪个字段属于当前任务”“点击后是否完成”。视觉 Grounding 只回答其中一个更窄的问题:指定目标在当前图像中的位置。一个 Box 无法替代整页结构化观察,也不能判断业务结果是否正确。
Accessibility Tree 能提供控件文本、角色、状态和 bounds;信息完整时,它通常给出更直接的操作目标。缺少标签、绘制在画布里的元素或视觉上可见但未暴露节点的控件,才需要截图定位补足。无论位置来自无障碍树还是 Box,最终都应绑定当前画面,并在动作后核验效果。
要不要用 / 我的判断框架
- 值得上:目标在截图中清晰可见,但没有稳定的无障碍节点;系统具备存在性判断、坐标映射和动作后验证。
- 可以再等:无障碍节点已经稳定暴露目标与边界,额外的图片请求只增加延迟;或当前无法保证截图与点击使用同一画面状态。
- 重点关注:目标缺失时的误框、多个相似目标、缩放与视口偏移、截图过期,以及真实页面上的成功率和耗时。单次 Box 命中只能算定位探针通过。
我会把 Box 作为“按描述找区域”的能力来评估,把目标边界框当作待验证的坐标证据。只有存在性、坐标系和点击后的效果都闭合,视觉 Grounding 才真正参与了可靠的自动化。
本文使用 writting-skill 辅助写作,配图使用 better-imagegen 生成。项目已开源,欢迎在 GitHub 点个 Star。
文章作者俊宁
文章链接https://youngjunning.com/blog/e196ba9ba7b3b8ed
版权声明除特别声明外,本站手记均采用 CC BY-NC-SA 4.0 授权协议。转载请注明出处:硅基俊宁。