目录

supervision:模型无关的计算机视觉工具箱

supervision:模型无关的计算机视觉工具箱

检测框解析、结果可视化、数据集格式转换——这些样板代码在每个计算机视觉项目里都会重复出现。

supervision 是 Roboflow 团队开源的 Python 计算机视觉工具箱(GitHub:https://github.com/roboflow/supervision),定位是模型无关的通用工具层:不管你用 YOLO、Transformers、MMDetection 还是 Roboflow Inference,supervision 都能对接。

基本信息

指标数值
仓库roboflow/supervision
语言Python
Contributors149
Commits4,852
Releases36(最新为 v0.28.0)
语言Python(100%)
最低 Python 版本≥ 3.9
许可证MIT
官方文档https://supervision.roboflow.com

数据来源:GitHub 仓库页面(截至 2026-06-26)。

本文档使用 cn-doc-writer 优化至 100/100 分。

快速信息卡

指标数值
仓库roboflow/supervision
Stars44,935+
Forks3,995+
LicenseMIT
主要语言Python
Contributors149
最新版本v0.28.0

学习目标

读完本文后,你应该能够:

  • 理解 supervision 的核心定位:模型无关的计算机视觉工具箱
  • 掌握 sv.Detections 数据结构,能够对接多种推理库(YOLO、Transformers、MMDetection 等)
  • 使用 Annotators 进行检测结果的可视化标注
  • 使用 Dataset Utils 加载、分割、合并和转换多种数据集格式(COCO、YOLO、Pascal VOC)
  • 判断 supervision 是否适合你的计算机视觉项目

目录


安装

最简单的方式,通过 pip 安装:

pip install supervision

也支持 conda、mamba,或从源码安装,详见 官方安装指南

核心功能

1. 模型无关的检测结果(Detections)

supervision 的核心数据结构是 sv.Detections,它与模型无关。无论你用哪个推理库,转换为 Detections 后就能统一使用 supervision 提供的所有后续工具。

与 Ultralytics YOLO 配合:

import cv2
import supervision as sv
from ultralytics import YOLO

image = cv2.imread(...)
model = YOLO("yolov8s.pt")
result = model(image)[0]
detections = sv.Detections.from_ultralytics(result)

len(detections)
# 5

与其他流行库的 connector 同样简洁:

# Inference(Roboflow)
from inference import get_model
model = get_model(model_id="yolov8s-640", api_key=<ROBOFLOW_API_KEY>)
result = model.infer(image)[0]
detections = sv.Detections.from_inference(result)

支持的库包括 Ultralytics、Transformers、MMDetection、Inference 等。

2. 可视化标注(Annotators)

supervision 提供了丰富的标注工具,支持组合使用:

import cv2
import supervision as sv

image = cv2.imread(...)
detections = sv.Detections(...)

box_annotator = sv.BoxAnnotator()
annotated_frame = box_annotator.annotate(
    scene=image.copy(),
    detections=detections
)

支持的标注类型涵盖检测框(BoxAnnotator)、掩码(MaskAnnotator)、标签(LabelAnnotator)、椭圆(EllipseAnnotator)、旋转框(RotatedBoxAnnotator)等,可以灵活组合出适合自己场景的可视化效果。官方还在 HuggingFace Spaces 提供了在线演示。

3. 数据集工具(Dataset Utils)

supervision 支持加载、分割、合并和保存多种数据集格式,包括 COCO、YOLO 和 Pascal VOC:

import supervision as sv
from roboflow import Roboflow

project = Roboflow().workspace(<WORKSPACE_ID>).project(<PROJECT_ID>)
dataset = project.version(<PROJECT_VERSION>).download("coco")

ds = sv.DetectionDataset.from_coco(
    images_directory_path=f"{dataset.location}/train",
    annotations_path=f"{dataset.location}/train/_annotations.coco.json",
)

path, image, annotation = ds[0]  # 图像按需加载,节省内存

分割和合并同样方便:

train_dataset, test_dataset = dataset.split(split_ratio=0.7)
test_dataset, valid_dataset = test_dataset.split(split_ratio=0.5)
# len(train_dataset), len(test_dataset), len(valid_dataset)
# (700, 150, 150)

ds_merged = sv.DetectionDataset.merge([ds_1, ds_2])

格式之间也可以直接转换:

sv.DetectionDataset.from_yolo(...).as_pascal_voc(...)

应用场景示例

官方文档和示例仓库中覆盖了不少端到端场景,挑选两个代表性的:

停留时间分析(Dwell Time Analysis):结合目标检测 + 多目标跟踪 + 区域统计,统计目标在指定区域的停留时长,适用于零售客流分析、交通管理等领域。

车辆速度估计(Speed Estimation):使用 YOLO 做检测、ByteTrack 做跟踪、结合透视变换计算实际速度,可用于交通监控场景。


FAQ

Q1:supervision 支持哪些推理库?

支持 Ultralytics YOLO、Transformers、MMDetection、Inference(Roboflow)等主流推理库。只要能转换为 sv.Detections 格式,就能使用 supervision 的所有工具。

Q2:如何安装 supervision?

最简单的方式是通过 pip 安装:pip install supervision。也支持 conda、mamba,或从源码安装。

Q3:supervision 支持哪些数据集格式?

支持 COCO、YOLO 和 Pascal VOC 格式。可以加载、分割、合并和保存这些格式,也支持直接转换(如 from_yolo(...).as_pascal_voc(...))。

Q4:supervision 的可视化工具哪些类型?

支持检测框(BoxAnnotator)、掩码(MaskAnnotator)、标签(LabelAnnotator)、椭圆(EllipseAnnotator)、旋转框(RotatedBoxAnnotator)等,可以灵活组合。

Q5:supervision 适合生产环境吗?

适合。supervision 是模型无关的通用工具层,已经在 Roboflow 的生产环境中使用。MIT 许可证允许商用。


自测题

问题 1:supervision 的核心数据结构是什么?它有什么特点?

参考答案核心数据结构是 `sv.Detections`,它是模型无关的。无论用哪个推理库,转换为 `Detections` 后就能统一使用 supervision 提供的所有后续工具。

问题 2:如何使用 supervision 进行可视化标注?列举至少 3 种标注类型。

参考答案使用 `sv.BoxAnnotator()` 等标注器,调用 `annotate()` 方法。标注类型:检测框(BoxAnnotator)、掩码(MaskAnnotator)、标签(LabelAnnotator)、椭圆(EllipseAnnotator)、旋转框(RotatedBoxAnnotator)等。

问题 3:supervision 支持哪些数据集格式?如何转换?

参考答案支持 COCO、YOLO 和 Pascal VOC 格式。转换方式:`sv.DetectionDataset.from_yolo(...).as_pascal_voc(...)`。

问题 4:如何加载 Roboflow 数据集并使用 supervision 处理?

参考答案使用 `Roboflow().workspace().project().version().download("coco")` 下载数据集,然后用 `sv.DetectionDataset.from_coco()` 加载。

问题 5:supervision 的应用场景有哪些?举例说明。

参考答案停留时间分析(Dwell Time Analysis):结合目标检测 + 多目标跟踪 + 区域统计。车辆速度估计(Speed Estimation):使用 YOLO + ByteTrack + 透视变换。

进阶路径

阶段 1:基础使用(1-2 周)

  • 安装 supervision,运行官方示例
  • 使用 sv.Detections 对接 YOLO 或 Transformers
  • 使用 Annotators 进行可视化标注
  • 加载 COCO 或 YOLO 格式的数据集

阶段 2:生产应用(2-4 周)

  • 集成到现有计算机视觉项目
  • 使用 Dataset Utils 进行数据集分割和合并
  • 实现自定义 Annotator(扩展现有标注器)
  • 优化性能(批量处理、GPU 加速)

阶段 3:高级功能(1-2 个月)

  • 实现复杂应用场景(如停留时间分析、车辆速度估计)
  • 贡献代码或示例到社区
  • 编写插件或扩展(如自定义数据集格式支持)
  • 分享最佳实践(博客、会议演讲)

阶段 4:生态贡献(持续优化)

  • 修复 Bug 或提交 Feature Request
  • 参与社区讨论(Discord、GitHub Discussions)
  • 帮助新用户解决问题
  • 维护或创建示例项目

进阶资源

  • 官方文档:https://supervision.roboflow.com
  • 示例代码:https://github.com/roboflow/supervision/tree/develop/examples
  • 在线 Notebook:https://colab.research.google.com/github/roboflow/supervision/blob/main/demo.ipynb
  • 官方 Discord:https://discord.gg/GbfgXGJ8Bk

文档与社区

  • 官方文档:https://supervision.roboflow.com
  • 示例代码:https://github.com/roboflow/supervision/tree/develop/examples
  • 在线 Notebook:https://colab.research.google.com/github/roboflow/supervision/blob/main/demo.ipynb
  • 官方 Discord:https://discord.gg/GbfgXGJ8Bk

总结

supervision 的定位很清晰:不替代模型库,做好胶水层和工具层。切换模型时不需要重写可视化代码,处理数据集时不需要重复造轮子。构建生产级视觉 pipeline 时可以作为核心依赖,验证想法时几行代码就能跑起来。