视觉算法开发新利器:低代码工具箱全解析,简化开发流程,新增高级视频分析功能!

计算机视觉算法开发过程中,你是否需要从硬盘加载数据集、在图像或视频上绘制分类检测结果、选择视频中的特定区域进行分析,或者统计一个区域内目标的流量分析。如果有上述需求,那么文中这款计算机视觉工具箱绝对可以帮你事半功倍!

视频指定区域车流量计数

动图封面

视频指定区域分析

动图封面

# 一、 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))

img

工具同时也支持分割结果的渲染,如下图

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))

img

除此之外还可以非常方便的做一些后处理,可以按照概率,按照类别,按照一些组合逻辑进行筛选,让我们在渲染显示结果的代码开发上省了大量的工作。

import supervision as sv
detections = sv.Detections(...)
detections = detections[detections.class_id == 0]

img

# 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. 区域工具

** 可以让你选择视频中的特定区域进行分析。** 举例说明: 如果你想统计路口的车流量,可以直接使用区域工具划定区域从而专注于指定区域的分析。

img

# 03. 注释器

** 可以让你在视频上添加文字、标签或其他信息。** 举例说明: 想象你正在制作一个烹饪教程视频。注释器可以让你在视频上添加食材名称、烹饪时间等信息,让观众更容易跟随。

动图

# 三、 Supervision 项目源码

  1. 项目源码

  2. 项目主页

推荐

  1. 顶配版 SAM:由分割一切 - 升级至识别一切 - 再进化为感知一切
  2. 多模态大模型与深度学习高阶面试题:新颖、高频且有深度,数百道题覆盖六大专题
  3. 顶配版 OCR 工具!支持任何语言、任意表格、图表与文档的文本检测和识别工具