langvio
用自然语言查询图片/视频中的物体——LLM+ YOLO-World 驱动的多模态视觉分析管道
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用自然语言查询图片/视频中的物体——LLM+ YOLO-World 驱动的多模态视觉分析管道
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:城市交通管理部门想在 10 万小时的监控视频中,找出所有"闯红灯时驾驶室里没系安全带"的司机。如果用传统方法,需要工程师逐帧编写规则、写检测脚本、调参、优化——这往往是一个团队数月的工程量。而 Langvio 试图让这一切变得像对话一样简单:只需要告诉它"找出所有没系安全带的司机",剩下的交给 AI。
Langvio 是由独立开发者 Mughees Mehdi 创建的开源项目(2024年),它将大语言模型(LLM)与目标检测模型(如 YOLO-World v2)桥接起来,让用户可以用自然语言查询图片或视频中的内容。项目当前 377 Stars,MIT 许可证,Python 3.8+ 环境。
Langvio 的核心设计理念是解耦与协作:LLM 负责理解自然语言查询并拆解为检测指令,视觉模型负责执行实际的图像分析,两者通过结构化的中间表示(JSON)传递结果。
项目代码组织清晰,分为以下核心模块:
langvio/core/ — 核心管道层,包含 Pipeline(主管道)、ProcessorManager(处理器管理器)、VisualizationManager(可视化管理器)和 Registry(模型注册表)。Pipeline 是整个系统的入口,process(query, media_path) 方法串联起 LLM 理解 → 视觉检测 → 结果解释 → 可视化标注的完整流程。
langvio/vision/ — 视觉处理层,基于 BaseVisionProcessor 抽象类构建。主力处理器是 YOLOWorldProcessor,它封装了 Ultralytics 的 YOLO-World v2 模型(yolov8s-worldv2、yolov8m-worldv2、yolov8l-worldv2 等多个规格)。YOLO-World v2 是 Ultralytics 推出的"开放词汇"目标检测模型,无需预定义类别即可检测任意文本描述的物体,这是 Langvio 实现自然语言驱动的技术基础。
langvio/llm/ — LLM 集成层,通过 LangChain 的 BaseLLMProcessor 接口接入多种大模型。目前官方支持 OpenAI GPT 系列(gpt-3.5-turbo、gpt-4o-mini、gpt-4.1-mini 等)和 Google Gemini 系列(gemini-2.0-flash)。配置在 langvio/default_config.yaml 中以 YAML 格式声明,支持通过环境变量覆盖默认模型。
langvio/utils/ — 工具层,包含日志、文件类型判断、可视化等辅助功能。
以一条查询"Count how many people are wearing red shirts"为例,Langvio 的处理链路如下:
第一步:LLM 解析查询。Pipeline 将自然语言查询发送给 LLM,LLM 根据提示词(由 langvio/prompts/ 下的模板生成)将查询解析为结构化的 query_params,包含目标类别(person)、属性(red shirt)、操作类型(count)等字段。这一步利用了 LLM 的推理能力来理解意图。
第二步:YOLO-World 执行检测。将 query_params 中的描述("red shirts")作为 YOLO-World 的文本提示(text prompt),模型在图像或视频帧中搜索匹配的物体。YOLO-World v2 支持零样本检测,无需提前训练。
第三步:LLM 生成解释。将检测结果(bounding box 坐标、置信度、类别)返回给 LLM,LLM 结合原始查询生成自然语言解释("I found 3 people wearing red shirts in the image. Two are located in the center-left area...")。
第四步:可视化标注。VisualizationManager 在原始图像或视频上叠加检测框和标注,输出带注释的媒体文件。
Langvio 的视频分析能力依托 ByteTracker(字节跳动开源的多目标跟踪算法)实现。在处理视频时,Pipeline 以 DEFAULT_VIDEO_SAMPLE_RATE(默认每秒采样一次)对视频帧进行采样,每帧独立执行 YOLO-World 检测,然后 ByteTracker 负责将相邻帧中属于同一物体的检测结果关联起来,生成跨帧的物体轨迹(track ID)。这使得 Langvio 能够回答"这辆车在这段视频里从哪个路口开始出现在画面中的"这类时序问题。
此外,项目还内置了颜色检测模块 ColorDetector,可以基于 HSV 色彩空间直接识别图像中的特定颜色区域(如"red cars"中的"red"),提供颜色维度的辅助检测能力。
Langvio 的核心依赖非常明确:
| 依赖 | 版本 | 作用 |
|---|---|---|
torch | ≥2.9.1 | 深度学习框架 |
ultralytics | ≥8.3.240 | YOLO 模型封装 |
opencv-python | ≥4.12.0 | 图像/视频处理 |
langchain-core | ≥1.2.2 | LLM 接口抽象 |
langchain-community | ≥0.4.1 | 第三方 LLM 集成 |
pillow | ≥12.0.0 | 图像 I/O |
其中 torch 和 ultralytics 都是重量级依赖——前者需要 CUDA 11.8+ 环境,后者包含完整的 YOLO 模型权重下载。部署时 GPU 是强烈建议的(虽然 CPU 可以运行,但速度会极慢)。
Flask Web 应用作为可选依赖(webapp 额外包),提供了基于浏览器的前端界面,支持上传图片/视频并通过表单提交查询请求。
部署难度:中等。Langvio 没有提供 Dockerfile 或 docker-compose.yml,但通过 PyPI 分发(pip install langvio),有完善的 pyproject.toml 配置。对于有 Python 基础的开发者来说,安装流程清晰。
GPU 是关键门槛:没有 NVIDIA GPU(及 CUDA)的情况下,PyTorch 的 YOLO 推理会退化为 CPU 模式,速度可能慢 10-50 倍。如果你只是想体验 CLI 演示,低配 GPU 或纯 CPU 可以接受;但用于生产视频分析,强烈建议配备至少 4GB 显存的 NVIDIA 显卡。
Web 界面加分项:Flask Web 应用作为可选依赖,提供了开箱即用的可视化操作界面,降低了非技术用户的使用门槛。只需 pip install langvio[webapp] 即可启动本地 Web 服务。
环境隔离建议:推荐使用 conda 或 venv 创建独立 Python 环境后安装,避免与系统其他项目产生依赖冲突。
亮点方面:Langvio 巧妙地将 LLM 的语义理解能力与 YOLO-World 的开放词汇检测能力结合,实现了真正意义上的"自然语言驱动的视觉分析"。代码架构设计优良,模块边界清晰,通过注册表模式支持多模型热切换。完整测试套件(40+ 测试文件)和多级文档(README + MkDocs)体现了较高的工程成熟度。MIT 许可证对商业使用友好。
局限方面:当前版本为 0.0.5(Alpha 阶段),API 尚未稳定,Breaking Change 可能随时出现。性能方面,视频全帧处理在无 GPU 环境下不现实(YOLO-World 推理本身就是计算密集型)。LLM 调用依赖外部 API(OpenAI/Gemini),存在网络延迟和成本问题。缺乏批量处理脚本,大规模部署需要自行封装。
Langvio 代表了"大模型赋能垂直领域"的一种轻量化思路:用 LLM 做自然语言理解层,用专用模型(YOLO)做视觉感知层,两者通过结构化中间表示解耦。这种模式的好处是:LLM 的语言理解能力可以被复用,而视觉模型可以根据精度/速度需求灵活切换(从 YOLO11n 到 YOLOE 11m/l)。
随着 YOLO-World、Grounding DINO 等开放词汇检测模型的持续迭代,以及 GPT-4V、Gemini 等多模态大模型的普及,"用自然语言控制视觉 AI"的技术可行性正在快速提高。Langvio 作为这一趋势下的实验性项目,为开发者提供了一个可参考的架构范本。

图1:项目作者 Mughees Mehdi 的 GitHub 头像