Supervision 计算机视觉工具

news2024/9/24 11:27:13

简介

  Supervision库是Python计算机视觉低代码工具,旨在为用户提供便捷高效的接口,以便处理数据集并直观地展示检测结果。绘制检测结果,统计指定区域内检测目标数量Supervision都提供了相应的接口

安装库

要求Python版本>=3.8

1.安装无图像版本,轻量级,更适合服务器端应用程序:
命令:pip install supervision
2.安装有图像版本,此版本包括OpenCV的GUI组件,允许您在屏幕上显示图像和视频:
命令:pip install "supervision[desktop]"

  Supervision提供了Inferen‍ce、Ultralytics、Transformers 推理案例,本文以为Ultralytics为主。

1.目标检测

import cv2
import supervision as sv
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
image = cv2.imread('1.jpeg')
results = model(image)[0]
detections = sv.Detections.from_ultralytics(results)

box_annotator = sv.BoxAnnotator()
label_annotator = sv.LabelAnnotator()

labels = [
    f"{class_name} {confidence:.2f}"
    for class_name, confidence
    in zip(detections['class_name'], detections.confidence)
]

# 标注识别框
annotated_image = box_annotator.annotate(scene=image, detections=detections)
# 标注识别标签和置信度
annotated_image = label_annotator.annotate(scene=annotated_image, detections=detections, labels=labels)
cv2.imwrite('2.jpeg',annotated_image)
(效果图)

在这里插入图片描述
supervision提供了多种函数来对识别结果进行可视化,以下举例部分案例


(角点边界框绘制)
corner_length-每个角线的长度
corner_annotator = sv.BoxCornerAnnotator(corner_length=15,thickness=2, color=sv.Color(r=0, g=255, b=255))
annotated_frame = corner_annotator.annotate(scene=image.copy(),detections=detections)
cv2.imwrite('2.jpeg',annotated_frame)

在这里插入图片描述


(三角形边界框绘制)
base/height-三角形的宽高,position-位置
triangle_annotator = sv.TriangleAnnotator(base = 30, height = 30, position = sv.Position['TOP_CENTER'])
annotated_frame = triangle_annotator.annotate(scene=image.copy(),detections=detections)
cv2.imwrite('2.jpeg',annotated_frame)

在这里插入图片描述

2.语义分割

  ‌语义分割是一种计算机视觉技术,旨在将图像中的每个像素分配到对应的语义类别,例如,在一张包含汽车、‌行人和道路的图像中,语义分割的目标是将图像中的每个像素标记为汽车、行人或道路。这种分割不区分不同的实例,即所有被标记为同一类别的对象都被视为一个整体。

  ‌语义分割的应用广泛,包括但不限于‌自动驾驶汽车、‌地理信息系统、‌医疗影像分析等。例如,在自动驾驶中,语义分割可以帮助车载系统识别道路、车辆和行人,从而做出相应的驾驶决策。在地理信息系统中,语义分割可以用于自动识别和标注卫星遥感影像中的道路、河流和建筑物等。

import cv2
import supervision as sv
from ultralytics import YOLO

model = YOLO("yolov8n-seg.pt")
image = cv2.imread('1.jpeg')
results = model(image)[0]
detections = sv.Detections.from_ultralytics(results)

mask_annotator = sv.MaskAnnotator()
label_annotator = sv.LabelAnnotator(text_position=sv.Position.CENTER_OF_MASS)

annotated_image = mask_annotator.annotate(scene=image, detections=detections)
annotated_image = label_annotator.annotate(scene=annotated_image, detections=detections)

cv2.imwrite('2.jpeg', annotated_image)
(效果图)

在这里插入图片描述

3.目标追踪

目标追踪是一种通过分析图像序列,连续地跟踪目标在场景中运动和变化的技术。广泛应用在视频监控、无人驾驶等。

import cv2
import supervision as sv
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
tracker = sv.ByteTrack()
box_annotator = sv.BoxAnnotator()
label_annotator = sv.LabelAnnotator()
trace_annotator = sv.TraceAnnotator()

cap = cv2.VideoCapture('people-walking.mp4')
while True:
    success,frame = cap.read()
    if success:
        results = model(frame)[0]
        detections = sv.Detections.from_ultralytics(results)
        detections = tracker.update_with_detections(detections)

        labels = [f"{tracker_id} {results.names[class_id]}" for class_id, tracker_id in zip(detections.class_id, detections.tracker_id)]

        annotated_frame = box_annotator.annotate(frame.copy(), detections=detections)
        annotated_frame = label_annotator.annotate(annotated_frame, detections=detections, labels=labels)
        trace_annotator.annotate(annotated_frame, detections=detections)

        cv2.imshow('1', annotated_frame)
        cv2.waitKey(1)
    else:
        break
(视频效果)

4.越线数量统计

通过分析车辆轨迹和状态(是否跨过检测线)来统计车流量等,其他目标同样适用。

import cv2
import supervision as sv
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
tracker = sv.ByteTrack()

cap = cv2.VideoCapture("vehicles.mp4")
success, frame = cap.read()
h, w = frame.shape[:2]
# 设置预设线(从左至右)
start, end = sv.Point(x=0, y=int(h / 2)), sv.Point(x=w, y=int(h / 2))
# 初始预线检测器
line_zone = sv.LineZone(start=start, end=end)
# 初始化可视化对象
trace_annotator = sv.TraceAnnotator()
label_annotator = sv.LabelAnnotator(text_scale=1)
line_zone_annotator = sv.LineZoneAnnotator(thickness=1, text_thickness=1, text_scale=1)


while True:
    ret, frame = cap.read()
    if ret:
        result = model(frame)[0]
        detections = sv.Detections.from_ultralytics(result)
        # 更新目标跟踪器
        detections = tracker.update_with_detections(detections)
        # 更新预线检测器,crossed_in是否进入结果,crossed_out是否出去结果
        crossed_in, crossed_out = line_zone.trigger(detections)

        # 获得各边界框的标签
        labels = [
            f"{tracker_id} {result.names[class_id]}"
            for class_id, tracker_id
            in zip(detections.class_id, detections.tracker_id)
        ]

        # 绘制轨迹
        annotated_frame = trace_annotator.annotate(scene=frame.copy(), detections=detections)
        # 绘制标签
        annotated_frame = label_annotator.annotate(scene=annotated_frame, detections=detections, labels=labels)
        # 绘制预制线
        annotated_frame = line_zone_annotator.annotate(annotated_frame, line_counter=line_zone)
        annotated_frame = cv2.resize(annotated_frame,(1280,720))
        cv2.imshow('1', annotated_frame)
        cv2.waitKey(1)
        print(f'in:{line_zone.in_count}', f'out:{line_zone.out_count}')
    else:
        break
(视频效果)

以上是对Supervision部分功能的介绍,更多内容通过链接查看官方文档

官方地址:https://supervision.roboflow.com/latest

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】反向传播算法的直观解释、微积分原理以及反向传播中的链式法则

引言 正如有句话说的好,neurons-that-fire-together-wire-together(一同激活的神经元关联在一起) 文章目录 引言一、反向传播算法的直观解释1.1 前向传播1.2 计算误差1.3 反向传播误差1.4 更新权重 二、微积分原理2.1 损失函数 L L L2.2 链式…

javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级

文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理:添加以下http响应头2.3. 四种跨域实现方式及优先级(从高到低) 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3…

数字孪生模型制作教程虚拟现实城市模型制作3dmax数字城市glb/gltf

需要做数字孪生可以QQ可以联系这里,谢谢 下面开始教程 1打开3dmax软件,和需要做的建筑图片 2 在3dmax安图片先建一个长方体框架 3先给长方体贴一个墙体贴图 4在ps做贴图 5 做好贴图贴到3dmax中 6 然后ps再做下一张贴图 7 做好贴图贴到3dma…

[Redis] Redisson分布式锁原理及源码分析

目录 基于 Redis 的分布式锁 Redisson实现分布 Redisson分布式锁原理图 RedissonLock实现分布式锁源码分析 RedissonLock构造方法 lock()加锁 获取锁 锁续命逻辑 tryLockInnerAsync加锁lua脚本分析 unlock()解锁 基于 Redis 的分布式锁 实现方式: 使用 Redis 的 SE…

Idea2023.3版本创建spring Initializr没有JDK8

解决方法: https://start.aliyun.com

SOMEIP_ETS_037:echoUINT8RELIABLE_client_closes_TCP_connection_automatically

测试目的: 验证当所有服务停止时,DUT不会关闭TCP连接。 描述 本测试用例旨在检验DUT在停止所有服务时,是否能够保持TCP连接的活跃状态,而不发送FIN,ACK以关闭连接。 测试拓扑: 具体步骤: TESTER&#…

STM32学习笔记3 ---中断,定时器

目录 EXTI外部中断 NVIC嵌套中断向量控制器 EXTI外部中断 AFIO 旋转编码器 定时器TIM TIM定时中断 ​编辑​编辑 ​编辑 TIM输出比较(OC) 引脚重映射 舵机 直流电机 TIM输入捕获(IC) ​编辑 TIM编码器接口 附&#…

漏洞挖掘 | 某系统webpack接口泄露引发的一系列漏洞

信息搜集 这里找到从小穿一条裤子长大的兄弟,要挟他交出来他的统一账号,否则把小时候的照片挂网上,开始某大学的资产搜集,直接hunter搜索此大学域名 看有价值的站点,ok找到下面的站点 未授权敏感信息泄露越权任意用…

力扣高频SQL 50题(基础版)第四十二题之1517.查找拥有有效邮箱的用户

文章目录 力扣高频SQL 50题(基础版)第四十二题1517.查找拥有有效邮箱的用户题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题(基础版)第四十二题 1517.查找拥有有效邮箱的用户 题目说明 表: Users -----------…

Dify on WeChat

Dify on WeChat 本项目为 chatgpt-on-wechat下游分支 额外对接了LLMOps平台 Dify,支持Dify智能助手模型,调用工具和知识库,支持Dify工作流。 Dify接入微信生态的详细教程请查看文章 手摸手教你把 Dify 接入微信生态 如果我的项目对您有帮助…

gin获得get和post请求参数,获得请求头信息

获得头信息 router.GET("/", func(c *gin.Context) {name : c.Query("id")fmt.Println(name)Token : c.GetHeader("Token")c.JSON(http.StatusOK, Token)})获得get和post信息 package mainimport ("fmt""github.com/SimonWang00…

Leetcode面试经典150题-236.二叉树的最低公共祖先

解法都在代码里,不懂就留言或者私信 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class Solution {/**题目分析:本题是经典的二…

仓颉语言运行时轻量化实践

杨勇勇 华为语言虚拟机实验室架构师,目前负责仓颉语言静态后端的开发工作 仓颉语言运行时轻量化实践 仓颉Native后端(CJNative)是仓颉语言的高性能、轻量化实现。这里的“轻量化”意指仓颉程序运行过程中占用系统资源(内存、CPU等…

数据分析:品牌营销如何借势小红书搜索流量

导语 近期,小红书推出《10大搜索趋势洞察》,在找答案这件事上,你永远可以相信小红书。 据悉,70%的小红狐月活用户使用搜索功能,用户平均每天搜索6次,三分之一的用户打开小红书的第一件事就是搜索&#xf…

haproxy知识点整理

haproxy知识点整理 haproxy七层代理负载均衡什么是负载均衡为什么使用负载均衡 负载均衡类型四层负载均衡七层负载均衡四层和七层的区别 环境搭建:客户端(client)haproxy服务器两台服务器hapserver1hapserver2 简单的haproxy负载均衡 haproxy的基本配置信息global配置proxies配…

2024高端网站设计公司推荐TOP3

随着互联网的飞速发展,现在的企业官网已经成为企业不可或缺的一部分,因为企业官网它不仅是企业品牌形象的延伸,也是连接客户、提升市场竞争力的重要工具。 以下简单阐述一下为何现代企业应当投资于高质量网站建设,搭建企业官网有…

html+css 实现图层水波纹效果

html+css 实现图层水波纹效果,废话不多说,直接上代码 <span class="quote-top"><i>水波纹</i><span class="ripple ripple-1"></span><span class="ripple ripple-2"></span><span class="…

打卡第四十一天:买卖股票的最佳时机

一、 买卖股票的最佳时机 题目 文章 视频 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][0] 表示第i天持有股票所得最多现金 。其实一开始现金是0&#xff0c;那么加入第i天买入股票现金就是 -prices[i]&#xff0c; 这是一个负数。dp[i][1] 表示第i天…

【MySQL】数据库约束和多表查询

目录 1.前言 2.数据库约束 2.1约束类型 2.2 NULL约束 2.3 NUIQUE&#xff1a;唯一约束 2.4 DEFAULT&#xff1a;默认值约束 2.5 PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 1.7 CHECK约束 3.表的设计 3.1一对一 3.2一对多 3.3多对多 …

基于火山引擎云搜索服务和豆包模型搭建 RAG 推理任务

大语言模型&#xff08;LLM&#xff0c;Large language model&#xff09;作为新一轮科技产业革命的战略性技术&#xff0c;其核心能力在于深层语境解析与知识融合。在生成式人工智能方向主要用于图像生成&#xff0c;书写文稿&#xff0c;信息搜索等。当下的 LLM 模型是基于大…