在计算机视觉算法开发过程中,你是否需要从硬盘加载数据集、在图像或视频上绘制分类检测结果、选择视频中的特定区域进行分析,或者统计一个区域内目标的流量分析。如果有上述需求,那么文中这款计算机视觉工具箱绝对可以帮你事半功倍!
视频指定区域车流量计数
视频指定区域分析
一、 Supervision计算机视觉工具箱
Supervision工具简化了目标检测、分类、标注、跟踪等计算机视觉的开发流程。开发者仅需加载数据集和模型,就能轻松实现对图像和视频进行检测、统计某区域的被检测数量等操作。
除此之外,Supervision被设计的与模型和框架完全解耦,可以支持Ultralytics、Transformers 或 MMDetection 等优异开源库模型的直接导入。具体支持以下框架:
from_deepsparse (Deepsparse)
from_deepsparse (Deepsparse)
from_detectron2 (Detectron2)
from_mmdetection (MMDetection)
from_inference (Roboflow Inference)
from_sam (Segment Anything Model)
from_transformers (HuggingFace Transformers)
from_yolo_nas (YOLO-NAS)
安装方式也很简单,Python版本大于3.8,可直接安装
pip install supervision
01. 在图像或视频上绘制分类检测结果
Supervision提供了一种简化的解决方案,可以轻松地渲染一系列目标检测和分割模型的预测结果。接下来用少量的几行代码演示如何使用 YOLOv8 模型与 Ultralytics 包执行推理。
import cv2
import supervision as sv
from ultralytics import YOLO
model = YOLO("yolov8s.pt")
image = cv2.imread(<PATH TO IMAGE>)
results = model(image)[0]
detections = sv.Detections.from_ultralytics(results)
>> ('detections', 4)
box_annotator = sv.BoxAnnotator()
annotated_image = box_annotator.annotate(image.copy(), detections=detections)
sv.plot_image(image=annotated_image, size=(8, 8))
mask_annotator = sv.MaskAnnotator(color_lookup=sv.ColorLookup.INDEX)
annotated_image = mask_annotator.annotate(image.copy(), detections=detections)
sv.plot_image(image=annotated_image, size=(8, 8))
工具同时也支持分割结果的渲染,如下图
mask_annotator = sv.MaskAnnotator(color_lookup=sv.ColorLookup.INDEX)
annotated_image = mask_annotator.annotate(image.copy(), detections=detections)
sv.plot_image(image=annotated_image, size=(8, 8))
除此之外还可以非常方便的做一些后处理,可以按照概率,按照类别,按照一些组合逻辑进行筛选,让我们在渲染显示结果的代码开发上省了大量的工作。
import supervision as sv
detections = sv.Detections(...)
detections = detections[detections.class_id == 0]
02. 数据集API:从硬盘加载数据集及数据集转换
Supervision 提供了一组实用程序,允许以受支持的格式加载、拆分、合并和保存数据集。直接上代码:
>>> import supervision as sv
# 导入不同格式的数据集,如cooc或者voc
>>> dataset = sv.DetectionDataset.from_pascal_voc(
... images_directory_path=...,
... annotations_directory_path=...
... )
>>> dataset = sv.DetectionDataset.from_coco(
... images_directory_path=...,
... annotations_path=...
... )
>>> dataset.classes
['dog', 'person']
>>> len(dataset)
1000
# 两行代码搞定数据集的划分
>>> train_dataset, test_dataset = dataset.split(split_ratio=0.7)
>>> test_dataset, valid_dataset = test_dataset.split(split_ratio=0.5)
>>> len(train_dataset), len(test_dataset), len(valid_dataset)
(700, 150, 150)
# 数据集的合并
>>> ds_1 = sv.DetectionDataset(...)
>>> ds_1.classes
['dog', 'person']
>>> ds_2 = sv.DetectionDataset(...)
>>> ds_2.classes
['cat']
>>> ds_merged = sv.DetectionDataset.merge([ds_1, ds_2])
>>> ds_merged.classes
['cat', 'dog', 'person']
# 数据集格式的转换
>>> sv.DetectionDataset.from_yolo(
... images_directory_path=...,
... annotations_directory_path=...,
... data_yaml_path=...
... ).as_pascal_voc(
... images_directory_path=...,
... annotations_directory_path=...
... )
二、Supervision更新的<高级视频分析>功能
01. 视频跟踪器
可以在视频中追踪物体的移动。Supervision运行推理并获得预测后,下一步是跟踪整个视频中检测到的对象。利用监督 sv.ByteTrack 功能,每个检测到的对象都被分配一个唯一的跟踪器 ID,从而能够在不同帧上连续跟踪对象的运动路径。
举例说明:想象一下,你正在观看一场足球比赛的录像。视频跟踪器可以帮助你追踪球员的移动,甚至分析他们的表现。
02. 区域工具
可以让你选择视频中的特定区域进行分析。举例说明: 如果你想统计路口的车流量,可以直接使用区域工具划定区域从而专注于指定区域的分析。
03. 注释器
可以让你在视频上添加文字、标签或其他信息。举例说明: 想象你正在制作一个烹饪教程视频。注释器可以让你在视频上添加食材名称、烹饪时间等信息,让观众更容易跟随。
三、 Supervision项目源码
项目源码
项目主页
推荐
- 顶配版SAM:由分割一切-升级至识别一切-再进化为感知一切
- 多模态大模型与深度学习高阶面试题:新颖、高频且有深度,数百道题覆盖六大专题
- 顶配版OCR工具!支持任何语言、任意表格、图表与文档的文本检测和识别工具