在计算机视觉算法开发过程中,你是否需要从硬盘加载数据集、在图像或视频上绘制分类检测结果、选择视频中的特定区域进行分析,或者统计一个区域内目标的流量分析。如果有上述需求,那么文中这款计算机视觉工具箱绝对可以帮你事半功倍!
视频指定区域车流量计数
视频指定区域分析
# 一、 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 工具!支持任何语言、任意表格、图表与文档的文本检测和识别工具