深入解析 supervision 库:功能、用法与应用案例

news/2025/3/4 9:58:18/

1. 引言

在计算机视觉任务中,数据的后处理和可视化是至关重要的环节,尤其是在目标检测、分割、跟踪等任务中。supervision 是一个专门为这些任务提供高效数据处理和可视化支持的 Python 库。本文将深入介绍 supervision 的功能、使用方法,并结合实际案例进行演示。

supervision__6">2. supervision 库简介

supervision 主要用于计算机视觉中的后处理任务,特别是结合深度学习模型进行目标检测、语义分割和实例分割的可视化、数据转换等。

2.1 核心功能

  • 目标检测后处理:NMS(非极大值抑制)、边界框转换等。
  • 可视化:绘制检测框、分割掩码等。
  • 数据转换:不同格式(COCO、YOLO、Pascal VOC)之间的转换。
  • 多模型集成:支持多种深度学习框架,如 YOLO、Detectron2 等。

3. 安装与环境配置

要使用 supervision,可以直接通过 pip 安装:

pip install supervision

如果你在 Jetson Nano 或嵌入式设备上使用,建议使用 Python 虚拟环境管理依赖。

python3 -m venv env
source env/bin/activate
pip install supervision numpy opencv-python

4. 核心功能解析

4.1 目标检测结果的后处理

supervision 提供了一系列后处理工具,例如 NMS 处理目标检测框。

python">import supervision as sv
import numpy as np# 假设有一组边界框 [x_min, y_min, x_max, y_max] 和置信度
detections = np.array([[100, 50, 200, 150, 0.9],[110, 60, 210, 160, 0.8],[400, 300, 500, 400, 0.95]
])# 使用 NMS 过滤重复框
nms_boxes = sv.nms(detections, iou_threshold=0.5)
print(nms_boxes)

4.2 目标检测结果可视化

python">import cv2
from supervision.detection.core import Detections
from supervision.draw.color import ColorPalette
from supervision.annotators import BoxAnnotator# 读取图像
image = cv2.imread('image.jpg')# 目标检测结果
detections = Detections(xyxy=np.array([[100, 50, 200, 150], [400, 300, 500, 400]]),confidence=np.array([0.9, 0.95]),class_id=np.array([0, 1])
)# 可视化
annotator = BoxAnnotator(color=ColorPalette.default())
image_annotated = annotator.annotate(image, detections)cv2.imshow('Detection', image_annotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.3 结合 YOLO 进行目标检测

python">from ultralytics import YOLO
import supervision as sv
import cv2# 加载 YOLO 模型
yolo_model = YOLO("yolov8n.pt")# 读取图像
image = cv2.imread("test.jpg")# 进行推理
results = yolo_model(image)# 解析检测结果
detections = sv.Detections.from_ultralytics(results[0])# 绘制检测框
annotator = sv.BoxAnnotator()
image_annotated = annotator.annotate(image, detections)cv2.imshow("YOLO Detection", image_annotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.4 使用 segmentation 掩码进行可视化

python">from supervision.annotators import MaskAnnotator# 生成假设的掩码数据
masks = np.zeros((2, 224, 224), dtype=np.uint8)
masks[0, 50:150, 50:150] = 1
masks[1, 100:200, 100:200] = 1# 目标检测结果增加掩码
detections.mask = masks# 绘制分割掩码
mask_annotator = MaskAnnotator()
image_annotated = mask_annotator.annotate(image, detections)cv2.imshow("Segmentation Mask", image_annotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.5 结合 OpenCV 进行多目标跟踪

python">import cv2
from supervision.tracking.byte_tracker import BYTETracker# 初始化 BYTETracker
tracker = BYTETracker()# 假设我们有检测结果
detections = Detections(xyxy=np.array([[100, 50, 200, 150], [400, 300, 500, 400]]),confidence=np.array([0.9, 0.95]),class_id=np.array([0, 1])
)# 进行目标跟踪
tracked_detections = tracker.update(detections)
print(tracked_detections)

supervision__Jetson_Nano__152">5. supervision 在 Jetson Nano 上的应用

在 Jetson Nano 上,supervision 可用于实时目标检测并进行后处理。以下是一个使用 Jetson Nano 和 USB 摄像头进行目标检测的代码示例:

python">import cv2
from ultralytics import YOLO
import supervision as sv# 加载 YOLO 模型
yolo_model = YOLO("yolov8n.pt")# 打开摄像头
cap = cv2.VideoCapture(0)while cap.isOpened():ret, frame = cap.read()if not ret:break# 进行目标检测results = yolo_model(frame)detections = sv.Detections.from_ultralytics(results[0])# 绘制检测框annotator = sv.BoxAnnotator()frame_annotated = annotator.annotate(frame, detections)cv2.imshow("Detection", frame_annotated)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

6. 性能优化与最佳实践

6.1 提高处理速度

  • 使用 cv2.VideoCapture 设定更小的 frame_widthframe_height,减少计算量。
  • 在 Jetson Nano 上启用 TensorRT 加速。
  • 使用多线程或 asyncio 处理视频流。

6.2 提高检测准确率

  • 结合 NMSThreshold 过滤低置信度目标。
  • 训练 YOLO 时使用更多标注数据提升检测效果。
  • 针对目标大小调整 image_size 以匹配应用场景。

7. 结论

supervision 是一个强大的计算机视觉辅助库,能够简化目标检测、数据处理、可视化等任务,特别适用于 YOLO、Detectron2 等深度学习框架。在 Jetson Nano 等边缘计算设备上,supervision 结合 YOLO 可实现高效的实时目标检测。希望本文的示例和优化策略对你的项目有所帮助!


http://www.ppmy.cn/news/1576509.html

相关文章

DeepSeek为什么超越了OpenAI?

一句话,定鼎大模型格局:DeepSeek已凭硬核实力,性能、性价比、本土化全面超越OpenAI,新王当立! OpenAI的ChatGPT无疑是曾经的AI巨星,但科技的浪潮奔涌向前,长江后浪推前浪,DeepSeek的崛起,预示着大模型领域的改朝换代。DeepSeek的出现,不是简单的“追赶”,而是实实在…

(AAAI2024)CutFreq: 用于低级视觉增强的剪切和交换频率分量

论文题目 CutFreq: Cut-and-Swap Frequency Components for Low-Level Vision Augmentation 1. 引言 低级视觉在广泛的图像质量和图像识别应用中发挥着至关重要的作用。然而,数据集规模、质量和多样性有限,往往给低级任务带来重大挑战。数据增强是样本…

如何配置虚拟机IP?

以下是在虚拟机中配置IP地址的一般步骤,以常见的Linux虚拟机为例: 查看当前网络配置 使用命令 ifconfig 或 ip addr show 查看当前虚拟机的网络接口及相关配置信息,确定要配置IP的网络接口名称,如 eth0 或 ens33 等。 编辑网…

网络安全法与等级保护 PPT 精华汇总

资源描述 本资源文件为《网络安全法与等级保护》的PPT精华汇总,内容涵盖了网络安全法与等级保护的总体框架及相关标准规范。该PPT详细介绍了网络安全法与等级保护的各个章节和条款,并提供了基础类和应用类的相关标准文件,帮助读者全面了解和…

【PCIe 总线及设备入门学习专栏 10.1 -- Linux PCIe 驱动框架 之 RK3399 Region1 访问】

文章目录 CPU 读写 region 0 的地址MEM/IO 读写示例配置 Region1 用于内存读写配置 Region 1 地址转换Region 1 地址访问desc registersCPU 读写 region 0 的地址 本篇文章紧接【PCIe 总线及设备入门学习专栏 10 – Linux PCIe 驱动框架】 由【PCIe 总线及设备入门学习专栏 1…

DeepSeek 各版本的区别

DeepSeek 各版本的区别主要体现在参数规模、架构设计、性能表现、硬件需求以及适用场景等方面,具体对比如下: ​一、参数规模与模型架构 ​基础版(DeepSeek-V3)​​ ​参数规模:6710亿参数(671B&#xff09…

RK3568平台(USB篇)recovery下U盘升级

一.recovery下U盘升级调试 1.检查recovery下能否识别到U盘。 reboot recovery 进入recovery模式下。 2.检查U盘格式 文件系统:确保U盘格式化为FAT32文件系统。Rockchip设备通常只支持FAT32格式的U盘。也可以在recovery下添加NTFS或者exFAT格式的U盘。 3.检查U盘连接 USB…

【Prometheus】prometheus如何监控k8s集群

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…