OmniParser
microsoft/OmniParser加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图:OmniParser 项目标识
你有没有见过这样的场景:让 GPT-4o 看着一张网页截图,说「点击右上角的登录按钮」,模型答得很自信,坐标却报在了页面空白处?或者更糟——它盯着一个 16×16 像素的齿轮图标,反复描述「这是一个设置图标」,但当你要它给出可执行的点击坐标时,它选中了图标旁边三像素宽的空白。
这不是大模型「看不懂」,而是它压根没被训练成输出坐标。多模态模型擅长的是描述图像:这里有一个头像,那是一行标题。但 GUI 智能体(computer-use agent)需要的恰恰相反,它需要定位:把「第 37 号元素,点它」。描述与定位之间那道鸿沟,就是 OmniParser 要填的坑。
OmniParser 的思路可以粗暴理解为:在图像和语言模型之间加一层翻译官。
它不直接让 LLM 看原图,而是先把截图「拆」成一组结构化元素——每个元素带着三个信息:位置(边界框坐标)、类别(文本 / 图标 / 可交互区域)、语义描述(这个图标大概是干什么的)。LLM 拿到的是这样一份清单:
icon 12: bbox [1841, 402, 1893, 454] description: gear icon, settings
icon 13: bbox [1902, 402, 1954, 454] description: bell icon, notifications
于是 LLM 的任务从「看图猜坐标」退化成「在清单里检索第几个元素」,这正是大模型最擅长的检索式任务。准确率提升也就顺理成章。
更值得注意的是这套解析流程里没有 LLM 参与。整个链路是两个小模型串联:
| 环节 | 模型 | 职责 |
|---|---|---|
| 交互区域检测 | 微调 YOLOv8 / YOLOv9-E | 框出可点击的小图标 |
| 图标功能描述 | 微调 Florence-2 base | 说出这个图标是干什么的 |
| 文本抽取 | EasyOCR / PaddleOCR | 提取界面文字及其位置 |

图:OmniParser 对界面截图做「可交互区域」标注后的效果
如果把 GUI Agent 想成一个视力不太好、但逻辑很强的同事,OmniParser 就是坐在他旁边的助手。助手不替同事做决定(谁去点那个按钮,还是同事自己判断),但会拿着荧光笔在截图上圈出每一个能点的地方,然后在便签上写「这个齿轮是设置」「这个铃铛是通知」。
同事(LLM)拿到的是整理过的便签,识别速度自然快了一个量级。这套设计有个好处:换模型不用重训。OmniParser 官方明确支持 OpenAI(4o / o1 / o3-mini)、DeepSeek R1、Qwen 2.5-VL、Anthropic Computer Use 等任意视觉模型,解析层和决策层彻底解耦。
V1 在 2024 年 9 月发布,2024 年 10 月登上 HuggingFace 模型榜第一。V2 于 2025 年 2 月发布,主要改动有三处:
2026 年 7 月,项目又加入了 YOLOv9-E 交互区域检测器,并且只发布推理权重(MIT 许可,基于 MultimediaTechLab 的 YOLO 实现),开发者不需要重训就能直接接入现有流水线。这是个务实的选择——对绝大多数团队来说,「拿来用」远比「自己再训一遍」有价值。

图:OmniTool 图标,OmniParser 的配套 Windows 沙箱工具链
环境准备(README 给出的路径):
conda create -n omni python=3.12 && conda activate omni
pip install -r requirements.txt
huggingface-cli download microsoft/OmniParser-v2.0 icon_detect_v3/model.pt --revision refs/pr/37 --local-dir weights
三种上手方式:
python gradio_demo.py 启动,上传截图得到标注图 + 元素清单。注意代码里 DEVICE = torch.device('cuda') 是硬编码的,CPU 环境会直接报错omnitool/omnibox 下带 Dockerfile 和 compose.yml,一键拉起 Windows 11 虚拟机,通过 8006(Web 界面)和 3389(RDP)接入,再由 Agent 驱动鼠标键盘完成真实操作。这是目前最接近生产可用的一条路硬件门槛是硬约束:YOLOv8 + Florence-2 推理必须在 CUDA GPU 上跑,建议 8GB 显存起步、16GB 更稳。内存 16GB+,如果还要跑 OmniTool 的 Windows 虚拟机,磁盘建议留 50GB 以上。
许可证是混合的,不是纯 MIT。 README 顶部挂着 MIT 徽章,但仓库 LICENSE 文件实际是 CC-BY-4.0(GitHub API 的 spdx_id 也如实返回 CC-BY-4.0)。README 里说「Caption models are under the MIT license」,YOLOv9-E 检测器用 MIT 授权,但早期基于 Ultralytics 的检测器权重仍保留 AGPL 协议。这是最需要注意的一点:如果你的产品是闭源商用,要逐个确认权重文件的协议,而不是看仓库顶部的徽章。
ScreenSpot Pro 39.6 分在 2025 年初是 SOTA,但现在已不是。 2026 年的 UI Grounding 榜单上,OmniParser V2 + ScreenParse 组合的 Recall 约 53.6,ScreenVLM、RT-DETRv2 + ScreenParse 等新方案已经超过它。它从「标杆」变成了「基线」——这既说明它足够扎实被广泛复用,也说明纯视觉 GUI 解析这条路线还在快速演进。
只做感知,不做决策和执行。 OmniParser 输出的元素清单不等于「该点哪个」。真正的动作生成、循环控制、失败重试,都在 OmniTool 的 agent 层,由外部 LLM 驱动。把它当作智能体的眼睛,而不是手脚。
成本和延迟。 每帧 0.6 秒的解析延迟,对单步交互可以接受,对需要高频响应的场景就是瓶颈。加上 LLM 的 API 调用费用,一次完整任务的成本远不止模型推理那点钱。
合规与风险提示。 微软在官方博客中明确说明:OmniParser 训练时引入了 Responsible AI 数据以减少对图像中人物敏感属性的推断,但工具本身不检测有害内容,官方建议保持人在回路(human-in-the-loop)。截图里可能包含密码、聊天记录、内部系统信息,投喂给第三方 LLM 前的脱敏责任在开发者。
仓库不只有解析模型,还包含一整套配套件:
omnitool/:完整的工具链,含 gradio 版 / streamlit 版 Agent 界面、Windows 11 沙箱(omnibox)、独立的解析服务(omniparserserver)eval/:ScreenSpot Pro 评测脚本与日志,便于复现论文指标docs/Evaluation.md:各版本在 Windows Agent Arena、ScreenSpot 等基准上的完整成绩demo.ipynb:交互式示例这套东西的价值在于,它把「模型效果」和「工程可用性」两件事分开交付。你想只用解析能力,单独跑 gradio_demo.py 就够了;想要端到端的桌面智能体,OmniTool 给你现成的骨架。

图:OmniParser 对 Windows 桌面界面的解析效果
适合的场景:桌面 / Web 自动化、测试机器人、需要跨应用操作的通用 Agent 感知层、需要训练自己 GUI 智能体的团队(可导出结构化标注数据)。
不适合的场景:移动端原生 App(可以试,但不是主打方向)、对延迟极端敏感的高频交互、需要开箱即用零 GPU 部署的环境。
建议的推进路径:先在 HuggingFace Space 上跑几张自己的真实截图,看看解析质量是否够用;再决定是否值得投入一张显卡做本地部署。如果目标是端到端 Agent,OmniTool 的 Windows 沙箱值得单独评估——它把「让 Agent 安全地乱点」这件事用容器隔离解决了。
一句话总结:OmniParser 是纯视觉 GUI 智能体路线上最扎实的感知层实现之一,它把「看图描述」翻译成「按编号检索」,用一次模型替换解决了大模型最不擅长的坐标定位问题;但它是基线而非天花板,混合许可证和高 GPU 门槛是落地前必须算清的账。