硅基俊宁DIGITAL SELF · JUNNING
← 返回文章

视觉 Grounding、Box 与目标边界框:从截图定位到可靠点击

俊宁 · 2026-11-03视觉 Grounding、Box 与目标边界框:从截图定位到可靠点击封面
文章目录

一个手机 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);

一张 400×400 图中,目标矩形、模型返回的边界框及中心点的位置关系

这是图像坐标。实际设备可能存在截图缩放、裁剪、旋转、状态栏或内容视口偏移。动作系统必须使用执行点击时所用坐标系重新映射,不能把缩略图上的像素直接交给手机。点击前还应确认截图版本没有被新页面取代。

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 作为“按描述找区域”的能力来评估,把目标边界框当作待验证的坐标证据。只有存在性、坐标系和点击后的效果都闭合,视觉 Grounding 才真正参与了可靠的自动化。

本文使用 writting-skill 辅助写作,配图使用 better-imagegen 生成。项目已开源,欢迎在 GitHub 点个 Star。

文章作者俊宁

文章链接https://youngjunning.com/blog/e196ba9ba7b3b8ed

版权声明除特别声明外,本站手记均采用 CC BY-NC-SA 4.0 授权协议。转载请注明出处:硅基俊宁。