微软最近开源了一个名为OmniParser的项目,简直是把AI的“手”和“眼”都补齐了。简单说,它能让大语言模型直接看懂电脑屏幕上的每一个按钮、输入框、图标,然后像人一样去操作它们。目前这个项目在GitHub上的星标已经超过16.3K,热度相当高。
先看几个核心判断:OmniParser的核心能力是把UI截图转化成机器能读懂的结构化数据,让AI不再只是“聊天”,而是能“动手”。V2版本在A100显卡上处理一帧只需要0.6秒,RTX 4090上也不过0.8秒,在ScreenSpot Pro基准测试上平均准确率达到39.6%。它能兼容GPT-4V、DeepSeek R1、Claude 3.5 Sonnet、Qwen 2.5VL以及Anthropic Computer Use这些主流大模型,配合全新的OmniTool,甚至可以直接操控Windows 11虚拟机。
我们通过一段视频来直观感受一下——它演示了如何用OmniParser驱动AI自动在X平台发帖:
OmniParser核心能力
给AI装上“慧眼”这个说法不算夸张。OmniParser能把任意一张屏幕截图解析成结构化的格式,告诉AI屏幕上都有哪些元素,分别是什么,在什么位置。这意味着AI不再需要依赖繁琐的API或后台数据,直接“看”就能理解界面。V2版本在这一点上做得更扎实,处理速度很快,准确率也上了新台阶。
支持的大模型列表已经覆盖了业界主流,这为后续的自动化应用打开了很大的空间。后续的应用场景想象空间确实很大。
环境准备
想自己动手试试,流程并不复杂。第一步,先把项目代码克隆下来:
git clone https://github.com/microsoft/OmniParser.git cd OmniParser
然后创建一个干净的Python环境,推荐用3.12版本:
conda create -n "omni" python==3.12 conda activate omni
接下来安装核心依赖,有几个包版本有明确要求,需要注意一下:
pip install --upgrade huggingface_hub pip install gradio==4.14.0 pip install httpx==0.26.0 pip install httpcore==1.0.2 pip install anyio==4.2.0 pip install -r requirements.txt
下载模型文件
模型文件需要从Hugging Face下载。为了便于管理,可以创建这样一个download_models.py脚本,把文件按指定路径下载到本地“weights”目录下:
import os
from huggingface_hub import hf_hub_download
from pathlib import Path
def download_omniparser_models():
"""下载OmniParser V2的模型文件"""
try:
base_path = Path("weights")
base_path.mkdir(exist_ok=True)
files = [
"icon_detect/train_args.yaml",
"icon_detect/model.pt",
"icon_detect/model.yaml",
"icon_caption/config.json",
"icon_caption/generation_config.json",
"icon_caption/model.safetensors"
]
print("开始下载模型文件...")
for file in files:
print(f"正在下载: {file}")
hf_hub_download(repo_id="microsoft/OmniParser-v2.0",
filename=file,
local_dir=base_path)
icon_caption_path = base_path / "icon_caption"
icon_caption_florence_path = base_path / "icon_caption_florence"
if icon_caption_path.exists():
if icon_caption_florence_path.exists():
import shutil
shutil.rmtree(icon_caption_florence_path)
icon_caption_path.rename(icon_caption_florence_path)
print("n所有文件下载完成!")
except Exception as e:
print(f"n下载过程中间出现错误: {str(e)}")
print("请检查网络连接并重试")
if __name__ == "__main__":
download_omniparser_models()
运行脚本后,就可以启动本地的演示界面了:
python gradio_demo.py
服务启动后,打开浏览器访问http://127.0.0.1:7860。上传任意一张屏幕截图,等待几乎不需要时间(通常不超过1秒),就能看到解析结果——每个可交互区域的边框、功能描述,清晰明了。效果是这样的:
输入一张图片:
输出图标标记的结果:
结构化的JSON数据,包含每个元素的内容识别结果和精确坐标:

有了这些结构化识别结果,想象空间确实可以无限延伸。
跨平台自动化实战案例
这里有一个实际的跨平台自动化方案:在服务器上部署OmniParser服务,然后通过macOS客户端脚本实现远程自动化操作。
服务端(基于FastAPI)负责接收客户端传来的屏幕截图,调用OmniParser进行解析,返回结构化元素信息:
from fastapi import FastAPI, UploadFile
from PIL import Image
import io
import uvicorn
app = FastAPI()
@app.post("/analyze")
async def analyze_screen(image: UploadFile):
image_data = await image.read()
image = Image.open(io.BytesIO(image_data))
# 这里添加OmniParser的处理逻辑
return {"elements": [...]}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
客户端(以macOS为例)负责截图、发送请求并执行鼠标操作:
import pyautogui
import requests
from PIL import ImageGrab
def capture_screen():
screenshot = ImageGrab.grab()
return screenshot
def convert_coordinates(omni_coords):
# 根据需要调整坐标映射
return omni_coords
def click_element(coords):
pyautogui.click(coords[0], coords[1])
def main():
screenshot = capture_screen()
files = {'image': ('screenshot.png', screenshot)}
response = requests.post('http://ubuntu-server:8000/analyze', files=files)
elements = response.json()['elements']
for element in elements:
coords = convert_coordinates(element['coords'])
click_element(coords)
if __name__ == "__main__":
main()
这里的核心思路是:
- 服务端只管“看”和“理解”:专门负责图像解析,减轻客户端负担。
- 客户端只负责“动”:截图、发送请求、接收解析结果、执行鼠标操作。
- 跨平台协作:通过HTTP API实现统一调度。
在这个基础框架上,可以做很多扩展:接入GPT-4V或类似的大模型,实现自然语言指令控制(比如“帮我打开微信”);添加键盘输入、拖拽等更多操作类型;甚至实现操作的录制与回放,以及相应的容错机制。
