
数据加载、画框、统计人数、处理数据集…… 计算机视觉里那些又碎又烦的“脏活累活”, Supervision 全帮你干了。
如果你写过计算机视觉(让计算机看懂图像/视频)的代码,你一定遇到过这些场景:
模型输出了一堆坐标,你要自己写代码画框、标标签、统计数量
训练数据要从一种格式转成另一种(COCO转YOLO、Pascal VOC转COCO……)
要把数据集按7:2:1拆成训练集、测试集、验证集
要统计一个人在一个区域里待了多长时间
这些事每个CV项目都会遇到,但每次都要重新写一遍,又碎又烦。
Supervision 就是来解决这个问题的。
Supervision = 计算机视觉的“瑞士军刀”不关心你用哪个模型(YOLO、Transformer、RF-DETR都行),只帮你搞定模型之后和之前的所有脏活累活。
pip install supervision只需要 Python 3.9 以上,一行命令搞定。
Supervision 不挑模型。你用一个模型检测出物体(比如人、车、猫、狗),得到一堆坐标和置信度,Supervision 帮你**统一格式化成 sv.Detections对象**。
import supervision as svfrom PIL import Imagefrom rfdetr import RFDETRSmall # 某个检测模型image = Image.open("图片路径")model = RFDETRSmall()detections = model.predict(image, threshold=0.5)print(len(detections)) # 检测到了几个物体?输出:5
💡 一句解释:
sv.Detections是 Supervision 定义的一种标准格式,里面包含了检测框的坐标、置信度、类别ID等信息。不管你用什么模型,最后都转成这个格式,后面的所有工具就能通用了。
支持的主流模型对接方式:
Ultralytics YOLO(最常用的目标检测模型)
Hugging Face Transformers(各种Transformer模型)
MMDetection(商汤开源的检测工具箱)
Inference(Roboflow)
RF-DETR(直接返回 sv.Detections)
模型检测出物体之后,你通常要把结果画在图片上看看效果。Supervision 提供了十几种标注器,最常用的是画框:
import cv2import supervision as svimage = cv2.imread("图片路径")detections = sv.Detections(...) # 从模型得到的检测结果box_annotator = sv.BoxAnnotator() # 画框的标注器annotated_frame = box_annotator.annotate(scene=image.copy(),detections=detections)
效果就是这样:

除了画框,还有:
画圆点(CircleAnnotator)
画椭圆(EllipseAnnotator)
画多边形遮罩(MaskAnnotator,用于图像分割结果)
画热力图(HeatmapAnnotator)
画标签带背景框(LabelAnnotator)
你可以把这些标注器组合起来,比如:先画框,再在框上面画标签,再在图片角落画一个统计数字——全部支持。
这是 Supervision 最实用的功能之一。你从网上下载的数据集可能是COCO格式,但你的训练代码要YOLO格式。以前你要写脚本转格式,现在一行代码搞定。
加载各种格式的数据集:
# 从YOLO格式加载dataset = sv.DetectionDataset.from_yolo(images_directory_path="图片文件夹路径",annotations_directory_path="标签文件夹路径",data_yaml_path="data.yaml路径")# 从COCO格式加载dataset = sv.DetectionDataset.from_coco(images_directory_path="图片文件夹路径",annotations_path="annotations.json路径")# 从Pascal VOC格式加载dataset = sv.DetectionDataset.from_pascal_voc(images_directory_path="图片文件夹路径",annotations_directory_path="标签文件夹路径")
💡 一句解释:COCO、YOLO、Pascal VOC 是三种常见的数据集标注格式,区别在于标注文件的结构和存储方式不同。COCO用一个大JSON文件存所有标注,YOLO每个图片对应一个txt文件,Pascal VOC用XML文件。
拆分数据集(训练/测试/验证):
# 先拆成70%训练 + 30%测试train_dataset, test_dataset = dataset.split(split_ratio=0.7)# 再把测试集拆成50%测试 + 50%验证(即原来的15%测试 + 15%验证)test_dataset, valid_dataset = test_dataset.split(split_ratio=0.5)print(len(train_dataset)) # 700print(len(test_dataset)) # 150print(len(valid_dataset)) # 150合并多个数据集:ds_1 = sv.DetectionDataset(...) # 有狗和人ds_2 = sv.DetectionDataset(...) # 有猫ds_merged = sv.DetectionDataset.merge([ds_1, ds_2])print(ds_merged.classes) # ['cat', 'dog', 'person'] —— 自动合并类别保存为任意格式:# 保存为YOLO格式dataset.as_yolo(images_directory_path="输出图片文件夹",annotations_directory_path="输出标签文件夹",data_yaml_path="输出data.yaml路径")# 保存为Pascal VOCdataset.as_pascal_voc(images_directory_path="输出图片文件夹",annotations_directory_path="输出标签文件夹")# 保存为COCO格式dataset.as_coco(images_directory_path="输出图片文件夹",annotations_path="输出annotations.json路径")
格式转换一条龙:
# YOLO → Pascal VOC,一步到位sv.DetectionDataset.from_yolo(...).as_pascal_voc(...)
你想知道顾客在某个货架前站了多久,Supervision 配合目标追踪可以实现:
检测每个人
追踪他们的移动轨迹
计算每个人进入某个“兴趣区域”到离开的时间差
教程视频:Dwell Time Analysis with Computer Vision
你想知道视频里每辆车的速度,Supervision 提供:
车辆检测 + 追踪
透视变换(把倾斜的摄像头画面变成俯视平面)
根据像素移动距离和实际距离换算速度
教程视频:Speed Estimation & Vehicle Tracking
你想统计进出了多少人,Supervision 提供:
在画面中画一条“线”
当检测框穿过这条线时,计数+1
区分进入和离开方向
你想知道谁没戴安全帽:
检测“人”和“安全帽”
用 sv.BoxAnnotator把没戴安全帽的人用红色框标出来
发出告警
传送带上的产品,你要找出有瑕疵的那些:
检测产品 + 检测瑕疵区域
用 sv.MaskAnnotator画出瑕疵的精确形状
统计不良品数量
资源 | 说明 |
|---|---|
官方文档 | 完整API参考和教程 |
How-to 指南 | 手把手教你用每个功能 |
速查表 | 常用代码片段一页纸 |
示例代码 | 真实项目的完整代码 |
视频教程 | 停留时长分析、车辆测速等 |
Colab Demo | 在浏览器里直接试 |
层次 | 核心内容 |
|---|---|
小白理解 | Supervision 是计算机视觉的“工具箱”,帮你搞定模型前后的各种繁琐工作 |
三大核心 | ①统一模型输出格式 ②丰富标注器 ③数据集加载/拆分/合并/转换 |
典型应用 | 停留时长分析、车辆测速、人流统计、安全帽检测、工业质检 |
pip install supervisionimport supervision as sv# 你的模型检测结果 → sv.Detections# sv.Detections → 画框、统计、转换数据集、分析区域print("Supervision 版本:", sv.__version__)
🔗 GitHub:
github.com/roboflow/supervision🔗 文档:
roboflow.github.io/supervisionSupervision—— 让你专注于模型和应用,而不是重复造轮子。
全文完。既然已经看到这里,请随手点个“赞”和“在看”吧。
◆ 发愿:四十如年少◆

公众号:为郎
更多项目实战部署、问题答疑尽在知识星球:
