OmniParser 屏幕解析工具快速教程:三步把任意截图变成结构化 GUI 元素
2026/9/5 18:54:59 网站建设 项目流程

OmniParser 屏幕解析工具快速教程:三步把任意截图变成结构化 GUI 元素

【免费下载链接】OmniParserA simple screen parsing tool towards pure vision based GUI agent项目地址: https://gitcode.com/GitHub_Trending/omn/OmniParser

OmniParser 是一个面向纯视觉 GUI Agent 的屏幕解析工具:输入一张截图,它会把屏幕上的按钮、文本、图标逐个框出来编号,并附一行简短描述,让视觉大模型能"看懂"界面并生成点击动作。本文用大白话讲清楚怎么跑通 demo、解析管线里有什么、以及它适合用在哪些场景。

大模型为什么点不准屏幕:GUI Agent 的元素定位痛点

给一个视觉大模型一张截图,让它"点击右上角的提交按钮",它给出的坐标经常会偏出几十像素,点到旁边的元素上。这不是模型"不听话",而是 VLM 在像素级定位上本来就吃力。

OmniParser 的做法是不让模型直接猜坐标:先把屏幕解析一遍,给每个可点击元素编号,再交给大模型"元素编号 + 一行描述"。定位方式从"看像素"变成"查列表",点错的情况会明显减少。

另一个特点是它只看像素、不依赖应用内部代码:目标软件换版本、换实现都没关系,只要界面长得一样,解析结果就稳定。游戏界面、办公软件、网页,对它就是同一类东西——截图。

三步跑通 OmniParser 演示 🚀

第一步,拿到代码:

git clone https://gitcode.com/GitHub_Trending/omn/OmniParser cd OmniParser

第二步,建环境装依赖。官方建议 Python 3.12 的 conda 环境:

conda create -n omni python==3.12 conda activate omni pip install -r requirements.txt

第三步,下载模型权重并启动。你需要两组权重放到weights/目录:检测模型icon_detect_v3/model.pt,以及图标描述模型icon_caption目录下的三个文件(config.json、generation_config.json、model.safetensors,放好后把目录改名为icon_caption_florence)。用 huggingface-cli 从 microsoft/OmniParser-v2.0 仓库拉取即可,README 里写好了对应命令。然后:

python gradio_demo.py

服务起在 7861 端口,浏览器打开后上传截图、点 Submit,左侧得到带编号方框的图,右侧得到结构化元素列表。页面上有三个滑块值得注意:box_threshold(检测置信度阈值,默认 0.05)、iou_threshold(重叠框去重阈值,默认 0.1)、imgsz(检测输入分辨率,默认 640)。imgsz 调大能召回更多小图标,代价是速度变慢。

纯视觉解析机制:一张截图到元素列表的三个阶段

看 util/ 下的源码,管线分三步,逻辑不复杂。

第一步,找元素。基于 YOLOv9 的检测模型先在整张截图上圈出所有"可能可点击的区域"(按钮、图标、菜单、复选框等),同时 OCR 引擎(默认 PaddleOCR,可切 EasyOCR)把所有文本框找出来。这两类框是解析的原材料。

第二步,去重合并。检测框和文本框经常互相叠在一起,代码用 IoU 过滤:大框包住小框时去掉大框;文本框落在图标框内部时,文字直接并进那个图标的描述里,不再单独输出。这就是为什么 demo 里一个"Search"按钮只作为一个元素出现,而不是"图标 + 文字"两条。

第三步,给图标起名字。每个没有文字内容的图标框被裁剪、缩放到 64×64,送进 Florence-2 描述模型,生成一句短描述,比如"a trash icon"。有文字的框直接用 OCR 结果,省掉这一步。

最终产出两样东西:一张画了编号的图,加一段icon 5: Text Box ID 0: today's price of microsoft这样的结构化文本。喂给大模型后,"坐标问题"就变成了"编号指代问题"。

OmniTool:接上 Windows 虚拟机,让 AI 真的去点

解析只是半条链路。仓库里配套的 OmniTool 把解析接进了一个可操作的系统:omniparserserver 是用 FastAPI 包装的 OmniParser 服务;OmniBox 是跑在 Docker 里的 Windows 11 虚拟机(基于 KVM,磁盘要留约 30GB,首次创建 20 到 90 分钟);Gradio 界面用来输入任务指令。

接上之后的流程是:agent 截取虚拟机屏幕 → OmniParser 编号元素 → 视觉模型(OpenAI 4o / o1 / o3-mini、DeepSeek R1、Qwen 2.5VL、Claude Computer Use 都开箱支持)决定点哪个编号 → 虚拟机执行鼠标键盘。部署细节和常见报错(比如 VM 没装完导致 "Windows Host is not responding")在 omnitool/readme.md 里写得比较细。

还有两个进阶点:官方口径 V2 比 V1 快 60%;2025 年 3 月起支持本地记录操作轨迹,可以用 OmniParser + OmniTool 批量产出带标注的屏幕操作数据,拿去训练自己领域的 agent。

OmniParser 能力边界与避坑提示

上手之前,有几点体验上的判断可以帮你少踩坑:

  • 元素密度直接决定速度。单屏小图标多时(工具栏密集、游戏 HUD),检测框数量上来后,描述模型要逐个框跑,耗时明显高于简单页面。imgsz 保持 640 能提速,但小图标会漏检,两者要自己权衡。
  • OCR 默认是英文。代码里 PaddleOCR 和 EasyOCR 的 lang 都写的 en,中文界面要自己改语言参数,否则文本框内容会是乱码。
  • 它只做解析,不执行点击。OmniParser 只回答"屏幕上有什么、在哪";点下去这一步靠 OmniTool 或你自己的集成代码完成。如果只是想提取截图文字,直接上 PaddleOCR 比走这一整套轻快得多。
  • 官方建议人留在回路里。自主操作场景下,readme 明确建议 human in the loop,别指望它无人值守长时间跑。

多窗口、多任务的截图同样能解析,只是元素密集时重叠框的噪声更多,建议把 iou_threshold 调高一些再观察。

OmniParser 适合什么人和项目

最后给一个直接判断:

  • 在做 GUI Agent 或 UI 自动化测试,需要解决"点击定位不准"的,编号 + 描述的输出格式是现成方案;基准表现可以参考 docs/Evaluation.md,V2 在 ScreenSpot Pro 上得分 39.5%。
  • 需要 UI 操作训练数据的,可以用轨迹记录功能产出标注数据,再自己微调模型。
  • 只需要 OCR 或一次性截图解析的,这套工具偏重,单拿 OCR 或检测模型其中一个组件用就够了。
  • 商用分发前注意授权:主仓库和描述模型是 MIT,但早期基于 Ultralytics 的检测模型带 AGPL 条款,实际用了哪套权重就按哪套的条款核对。

一句话总结:如果你要解决的是"机器看屏幕之后怎么点得准",OmniParser 是目前把这条路铺得比较平的一个开源选择;如果你只是要读屏上的字,绕开它会更省事。

【免费下载链接】OmniParserA simple screen parsing tool towards pure vision based GUI agent项目地址: https://gitcode.com/GitHub_Trending/omn/OmniParser

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询