深入解析 supervision 库:功能、用法与应用案例
1. 引言
在计算机视觉任务中,数据的后处理和可视化是至关重要的环节,尤其是在目标检测、分割、跟踪等任务中。supervision 是一个专门为这些任务提供高效数据处理和可视化支持的 Python 库。本文将深入介绍 supervision 的功能、使用方法,并结合实际案例进行演示。
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 处理目标检测框。
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 目标检测结果可视化
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 进行目标检测
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 掩码进行可视化
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 进行多目标跟踪
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)
5. supervision 在 Jetson Nano 上的应用
在 Jetson Nano 上,supervision 可用于实时目标检测并进行后处理。以下是一个使用 Jetson Nano 和 USB 摄像头进行目标检测的代码示例:
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_width和frame_height,减少计算量。 - 在 Jetson Nano 上启用
TensorRT加速。 - 使用多线程或
asyncio处理视频流。
6.2 提高检测准确率
- 结合
NMS和Threshold过滤低置信度目标。 - 训练 YOLO 时使用更多标注数据提升检测效果。
- 针对目标大小调整
image_size以匹配应用场景。
7. 结论
supervision 是一个强大的计算机视觉辅助库,能够简化目标检测、数据处理、可视化等任务,特别适用于 YOLO、Detectron2 等深度学习框架。在 Jetson Nano 等边缘计算设备上,supervision 结合 YOLO 可实现高效的实时目标检测。希望本文的示例和优化策略对你的项目有所帮助!
相关文章:
深入解析 supervision 库:功能、用法与应用案例
1. 引言 在计算机视觉任务中,数据的后处理和可视化是至关重要的环节,尤其是在目标检测、分割、跟踪等任务中。supervision 是一个专门为这些任务提供高效数据处理和可视化支持的 Python 库。本文将深入介绍 supervision 的功能、使用方法,并…...
【DeepSeek问答】访问QStandardItemModel::index(r,c)获取的空索引导致程序崩溃
好的,我现在来仔细思考一下用户的问题。用户在使用QStandardItemModel的setItem方法时,调用了setItem(4,6,item),也就是在第4行第6列的位置设置了一个item。然后他们尝试通过index(3,6)来获取这个位置的项目,想知道会有什么后果。…...
从开源大模型工具Ollama存在安全隐患思考企业级大模型应用如何严守安全红线
近日,国家网络安全通报中心通报大模型工具Ollama默认配置存在未授权访问与模型窃取等安全隐患,引发了广泛关注。Ollama作为一款开源的大模型管理工具,在为用户提供便捷的同时,却因缺乏有效的安全管控机制,存在数据泄露…...
Aws batch task 无法拉取ECR 镜像unable to pull secrets or registry auth 问题排查
AWS batch task使用了自定义镜像,在提作业后出现错误 具体错误是ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. C…...
通用信息抽取大模型PP-UIE开源发布,强化零样本学习与长文本抽取能力,全面适配多场景任务
背景与简介 信息抽取(information extraction)是指,从非结构化或半结构化数据(如自然语言文本)中自动识别、提取并组织出结构化信息。通常包含多个子任务,例如:命名实体识别(NER&am…...
基于uniapp的蓝牙打印功能(佳博打印机已测试)
相关步骤 1.蓝牙打印与低功耗打印的区别2.蓝牙打印流程2.1 搜索蓝牙2.2 连接蓝牙 3.连接蓝牙设备4.获取服务5.写入命令源码gbk.jsglobalindex.ts 1.蓝牙打印与低功耗打印的区别 低功耗蓝牙是一种无线、低功耗个人局域网,运行在 2.4 GHz ISM 频段 1、低功耗蓝牙能够…...
【Azure 架构师学习笔记】- Azure Databricks (15) --Delta Lake 和Data Lake
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (14) – 搭建Medallion Architecture part 2 前言 ADB 除了UC 这个概念之外,前面【Azure 架构师学习笔记】- Azure Databricks (1…...
WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中
WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中 一、前言二、部署与发布基础概念2.1 部署的定义与目的2.2 发布的方式与渠道2.3 部署与发布的关键要素 三、WPF 应用程序打包3.1 使用 Visual Studio 自带的打包工具3.2 使用第三方打包工具 四、发布到不同…...
在 IntelliJ IDEA(2024) 中创建 JAR 包步骤
下是在 IntelliJ IDEA 中创建 JAR 包的详细的步骤: 1. 选择File -> Project Structure->Artifacts, (1)点击➕新建,如下图所示: (2)选择JAR->Empty (3)输入jar包名称,确定输出路径 (4&#…...
【C++】5.4.3 范围for语句
范围for语句基本形式: for(声明变量:序列容器) {循环执行语句; } 其中,“序列容器”是指花括号括起来的初始值列表、数组、vector或者string等类型的对象,主要特点是拥有能返回迭代器的 begin() 和 end() 成员; “声明变量”是一个类似声明…...
达梦数据库备份
达梦数据库联机在线备份操作指南 一、基础条件与准备 开启归档模式: 联机备份必须处于归档模式下,否则无法执行。需通过disql工具执行以下操作: alter database mount; alter database ARCHIVELOG; 例子: [dmdbaserver ~]$ cd /op…...
Linux系统基于ARM平台的LVGL移植
软硬件介绍:Ubuntu 20.04 ARM 和(Cortex-A53架构)开发板 基本原理 LVGL图形库是支持使用Linux系统的Framebuffer帧缓冲设备实现的,如果想要实现在ARM开发板上运行LVGL图形库,那么就需要把LVGL图形库提供的关于帧缓冲设…...
C++ 二叉搜索树代码
C 二叉搜索树代码 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL){}TreeNode(T x):val(x), left(NULL), right(NULL){} };template<typena…...
DeepSeek+知识库+鸿蒙,助力鸿蒙高效开发
不知道你们发现没有,就是鸿蒙开发官网,文档也太多太多了,对于新手来说确实头疼,开发者大多是极客,程序的目的是让世界更高效!看文档,挺头疼的,毕竟都是理科生。 遇到问题不要慌&…...
蓝桥杯牛客1-10重点(自用)
1 import mathdef lcm(a,b):return a * b // math.gcd(a, b) # math.gcd(a, b)最小公倍数 a,b map(int,input().split()) # a int(input()) # 只读取一个整数 # print(a) print(lcm(a,b)) 2 import os import sysdef fly(lists,n):count 0flag Falsefor i in range(1,n…...
Kafka - 高吞吐量的七项核心设计解析
文章目录 概述一、顺序磁盘I/O (分区顺序追加)1.1 存储架构设计1.2 性能对比实验1.3 存储优化策略 二、零拷贝技术:颠覆传统的数据传输革命2.1 传统模式痛点2.2 Kafka优化方案 三、页缓存机制:操作系统的隐藏加速器3.1 实现原理3.2 优势对比 四、日志索引…...
Towards Precise and Explainable Hardware Trojan Localization at LUT Level
文章 《Towards Precise and Explainable Hardware Trojan Localization at LUT Level》 TCAD’2025 《LUT层次的精细可解释木马定位》 期刊介绍 《IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems》(TCAD)是集成电路…...
Python实现鼠标点击获取窗口进程信息
最近遇到挺无解的一个问题:电脑上莫名其妙出现一个白色小方块,点击没有反应,关也关不掉,想知道它和哪个软件有关还是显卡出了问题,也找不到思路,就想着要不获取一下它的进程号看看。 于是写了一个Python脚本…...
Mac安装jdk教程
在Mac上安装JDK(Java Development Kit)的步骤如下: 一、下载JDK安装包 访问Oracle官网: 打开浏览器,访问Oracle JDK下载页面。 选择JDK版本: 根据你的开发需求选择合适的JDK版本。例如,JDK 11…...
【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式
与设计模式相处:真实世界中的设计模式 设计模式是软件开发中的经典解决方案,它们帮助我们解决常见的设计问题,并提高代码的可维护性和可扩展性。在《Head First设计模式》一书中,作者通过生动的案例和通俗的语言,深入…...
复盘与导出工具V9.0新功能实测:竞价选股与Excel导出最强风口全攻略
复盘与导出工具V9.0深度实战:解锁竞价选股与Excel导出的高阶玩法 对于股票分析爱好者来说,工具的每一次重大更新都意味着效率的跃升。V9.0版本带来的竞价选股条件设置和最强风口Excel导出两大功能,正在重新定义短线交易的数据处理方式。本文将…...
避坑指南:RK3588 SD卡刷机时FAT32转EXT4的完整流程(含工具包)
RK3588大容量镜像烧写实战:突破FAT32限制的EXT4全流程解决方案 当你在RK3588开发板上尝试烧写超过4GB的Ubuntu或Debian镜像时,是否遇到过SD卡工具报错?这不是你的操作问题,而是FAT32文件系统的天然限制。本文将带你深入理解这一技…...
DanKoe 视频笔记:阅读:改变你生活的简单习惯:概述与引言
https://github.com/OpenDocCN/wealth-notes-zh/raw/master/docs/dankoe/img22971bb5176092c90f7464d7a7aa6e45.png 在本节课中,我们将学习如何通过培养阅读习惯来深刻地改变你的生活。我们将探讨阅读的重要性、如何选择书籍、如何有效阅读,以及如何将阅…...
不止于画图:用IPC-7351标准和Mentor LP工具高效生成标准PCB焊盘(Cadence实战)
从标准到实践:基于IPC-7351的PCB焊盘设计全流程解析 在高速数字电路和精密模拟电路设计中,焊盘作为元器件与PCB之间的物理连接点,其设计质量直接影响产品可靠性。一个常见的误区是仅关注软件操作技巧,而忽视行业标准对设计质量的…...
Typora风格技术文档创作:集成SenseVoice-Small实现语音速记
Typora风格技术文档创作:集成SenseVoice-Small实现语音速记 每次在Typora里敲代码、写文档,是不是都有过这样的瞬间?脑子里灵光一闪,一段绝妙的思路或者一个关键的描述,手速却跟不上。等你好不容易敲完几个字…...
Blender3mfFormat插件全攻略:从基础到进阶的3MF文件处理指南
Blender3mfFormat插件全攻略:从基础到进阶的3MF文件处理指南 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 一、基础认知:3MF格式与插件价值解析…...
DeerFlow免运维部署:自动日志监控与服务启动检测
DeerFlow免运维部署:自动日志监控与服务启动检测 1. 认识你的深度研究助理:DeerFlow 想象一下,你有一个不知疲倦的研究助手。它能帮你搜索全网信息、分析复杂数据、撰写专业报告,甚至还能把枯燥的研究结果变成一段生动的播客。听…...
小龙虾使用手册(蓝皮书)实战案例版
扫描下载文档详情页: https://www.didaidea.com/wenku/16656.html...
3MF格式终极指南:如何在Blender中轻松导入导出3D打印文件
3MF格式终极指南:如何在Blender中轻松导入导出3D打印文件 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中处理3D打印文件却苦于格式转换&…...
小白友好!MedGemma X-Ray完整使用流程:上传、提问、获取报告
小白友好!MedGemma X-Ray完整使用流程:上传、提问、获取报告 你是不是也遇到过这样的情况?拿到一张胸部X光片,看着上面复杂的骨骼、肺纹理和阴影,感觉无从下手,不知道哪些是正常的,哪些是需要关…...
