当前位置: 首页 > news >正文

深入解析 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_widthframe_height,减少计算量。
  • 在 Jetson Nano 上启用 TensorRT 加速。
  • 使用多线程或 asyncio 处理视频流。

6.2 提高检测准确率

  • 结合 NMSThreshold 过滤低置信度目标。
  • 训练 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+知识库+鸿蒙,助力鸿蒙高效开发

不知道你们发现没有&#xff0c;就是鸿蒙开发官网&#xff0c;文档也太多太多了&#xff0c;对于新手来说确实头疼&#xff0c;开发者大多是极客&#xff0c;程序的目的是让世界更高效&#xff01;看文档&#xff0c;挺头疼的&#xff0c;毕竟都是理科生。 遇到问题不要慌&…...

蓝桥杯牛客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 存储优化策略 二、零拷贝技术&#xff1a;颠覆传统的数据传输革命2.1 传统模式痛点2.2 Kafka优化方案 三、页缓存机制&#xff1a;操作系统的隐藏加速器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》&#xff08;TCAD&#xff09;是集成电路…...

Python实现鼠标点击获取窗口进程信息

最近遇到挺无解的一个问题&#xff1a;电脑上莫名其妙出现一个白色小方块&#xff0c;点击没有反应&#xff0c;关也关不掉&#xff0c;想知道它和哪个软件有关还是显卡出了问题&#xff0c;也找不到思路&#xff0c;就想着要不获取一下它的进程号看看。 于是写了一个Python脚本…...

Mac安装jdk教程

在Mac上安装JDK&#xff08;Java Development Kit&#xff09;的步骤如下&#xff1a; 一、下载JDK安装包 访问Oracle官网&#xff1a; 打开浏览器&#xff0c;访问Oracle JDK下载页面。 选择JDK版本&#xff1a; 根据你的开发需求选择合适的JDK版本。例如&#xff0c;JDK 11…...

【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式

与设计模式相处&#xff1a;真实世界中的设计模式 设计模式是软件开发中的经典解决方案&#xff0c;它们帮助我们解决常见的设计问题&#xff0c;并提高代码的可维护性和可扩展性。在《Head First设计模式》一书中&#xff0c;作者通过生动的案例和通俗的语言&#xff0c;深入…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...