LocateAnything Visual Grounding
基于 VLM 的「开放词表」视觉定位——一句自然语言找到 / 数出画面里的任意物体,无需预训练类别。需要 GPU 服务器。
1. 方案概述
locate-anything 是一个 HTTP 桥接扩展:扩展是轻量客户端,LocateAnything-3B 模型跑在独立的 Python 推理服务上(推荐 NVIDIA GPU)。扩展负责结果后处理(NMS、面积过滤)。
「开放词表」是它的核心:不像 YOLO 只认预训练的 80 类,你可以用任意自然语言描述要找的东西,模型零样本定位。
五类命令:
| 能力 | 命令 | 关键参数 | 说明 |
|---|---|---|---|
| 类别检 测 | detect | categories(如 person,car) | 按类别检测 |
| 短语定位 | ground | phrase(自然语言) | 按描述零样本定位,可 single/multi |
| 文字定位 | detect_text | — | 定位画面中所有文字 |
| GUI 定位 | ground_gui | phrase,output_type(box/point) | 截图里定位 UI 元素 |
| 指点 | point | phrase | 指向某个物体 |
数据流向:
2. 物料清单(BOM)
| 物料 | 规格 | 用途 | 必需 |
|---|---|---|---|
| NeoMind 平台 | v0.9.0+ | 扩展宿主 | ✅ |
| locate-anything 扩展 | v2.7.7+ | HTTP 桥接 + 后处理 | ✅ |
| GPU 推理服务器 | NVIDIA GPU | 运行 LocateAnything Python 服务 | ✅ |
| 本地 LLM | Ollama 等 | AI Chat 后端 | 可选 |
3. 前置准备:部署推理服务
LocateAnything 扩展本身只是 HTTP 客户端,真正的 nvidia/LocateAnything-3B(约 6 GB)模型跑在一个独立的 Python 推理服务里。该服务基于 FastAPI,暴露以下端点:
| 端点 | 方法 | 作用 |
|---|---|---|
/health | GET | 健康检查,返回模型与设备状态 |
/detect | POST | 按类别检测 |
/ground | POST | 自然语言短语定位 |
/detect_text | POST | 全画面文字定位 |
/ground_gui | POST | UI 元素定位 |
/point | POST | 指向物体 |
默认监听 http://127.0.0.1:9380;服务源码在扩展 service/ 目录(server.py、locateanything_worker.py、Dockerfile、docker-compose.yml、start.sh)。提供 Docker(推荐) 与 本地运行 两种方式。
3.1 方式一:Docker 部署(推荐,GPU 机器)
镜像基于 pytorch/pytorch:2.6.0-cuda12.4-cudnn9-devel,自带 CUDA 运行时。
前置:NVIDIA GPU + 已安装 NVIDIA Container Toolkit。
cd service/
# 构建镜像(首次较慢,安装依赖)
docker build -t locate-anything-service .
# 可选:构建时预下载模型(~6 GB),省去首次启动等待
docker build --build-arg DOWNLOAD_MODEL=1 -t locate-anything-service .
# 运行:映射端口、挂载模型缓存卷、分配 GPU
docker run -d --gpus all \
-p 9380:9380 \
-v locate-models:/models \
locate-anything-service
或用附带的 Compose 文件(等价,含自动重启与健康检查):
cd service/
docker compose up -d # 启动
docker compose logs -f # 查看日志(首次会下载模型)
模型约 6 GB,缓存在卷
locate-models(容器内/models/huggingface);首次启动需下载,故健康检查的start_period设为 300 s。