Merge branch 'develop' into feature/pip-package-configuration

This commit is contained in:
Onuralp SEZER committed 2024-09-19 17:47:28 +03:00
commit c9fa3d613f
15 files changed
+958 -967

No files matched your search

+8 -1
View File
@@ -6,7 +6,7 @@ We are actively improving this library to reduce the amount of work you need to
## Code of Conduct
Please read and adhere to our [Code of Conduct](CODE_OF_CONDUCT.md). This document outlines the expected behavior for all participants in our project.
Please read and adhere to our [Code of Conduct](https://supervision.roboflow.com/latest/code_of_conduct/). This document outlines the expected behavior for all participants in our project.
## Table of Contents
@@ -86,6 +86,7 @@ Use conventional commit messages to clearly describe your changes. The format is
<type>[optional scope]: <description>
Common types include:
- feat: A new feature
- fix: A bug fix
- docs: Documentation only changes
@@ -128,13 +129,16 @@ PRs must pass all tests and linting requirements before they can be merged.
Before starting your work on the project, set up your development environment:
1. Clone your fork of the project:
```bash
git clone https://github.com/YOUR_USERNAME/supervision.git
cd supervision
```
Replace `YOUR_USERNAME` with your GitHub username.
2. Create and activate a virtual environment:
```bash
python3 -m venv .venv
source .venv/bin/activate
@@ -143,17 +147,20 @@ Before starting your work on the project, set up your development environment:
3. Install Poetry:
Using pip:
```bash
pip install -U pip setuptools
pip install poetry
```
Or using pipx (recommended for global installation):
```bash
pipx install poetry
```
4. Install project dependencies:
```bash
poetry install
```
+37 -37
View File
@@ -1,6 +1,6 @@
### 0.23.0 <small>Aug 28, 2024</small>
- Added [#930](https://github.com/roboflow/supervision/pull/930): `IconAnnotator`, a [new annotator](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.IconAnnotator) that allows drawing icons on each detection. Useful if you want to draw a specific icon for each class.
- Added [#930](https://github.com/roboflow/supervision/pull/930): `IconAnnotator`, a [new annotator](https://supervision.roboflow.com/0.23.0/detection/annotators/#supervision.annotators.core.IconAnnotator) that allows drawing icons on each detection. Useful if you want to draw a specific icon for each class.
```python
import supervision as sv
@@ -31,7 +31,7 @@ annotated_frame = icon_annotator.annotate(
)
```
- Added [#1385](https://github.com/roboflow/supervision/pull/1385): [`BackgroundColorAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BackgroundColorAnnotator), that draws an overlay on the background images of the detections.
- Added [#1385](https://github.com/roboflow/supervision/pull/1385): [`BackgroundColorAnnotator`](https://supervision.roboflow.com/0.23.0/detection/annotators/#supervision.annotators.core.BackgroundColorAnnotator), that draws an overlay on the background images of the detections.
```python
import supervision as sv
@@ -50,7 +50,7 @@ annotated_frame = background_overlay_annotator.annotate(
)
```
- Added [#1386](https://github.com/roboflow/supervision/pull/1386): Support for Transformers v5 functions in [`sv.Detections.from_transformers`](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.from_transformers). This includes the `DetrImageProcessor` methods `post_process_object_detection`, `post_process_panoptic_segmentation`, `post_process_semantic_segmentation`, and `post_process_instance_segmentation`.
- Added [#1386](https://github.com/roboflow/supervision/pull/1386): Support for Transformers v5 functions in [`sv.Detections.from_transformers`](https://supervision.roboflow.com/0.23.0/detection/core/#supervision.detection.core.Detections.from_transformers). This includes the `DetrImageProcessor` methods `post_process_object_detection`, `post_process_panoptic_segmentation`, `post_process_semantic_segmentation`, and `post_process_instance_segmentation`.
```python
import torch
@@ -76,7 +76,7 @@ detections = sv.Detections.from_transformers(
id2label=model.config.id2label)
```
- Added [#1354](https://github.com/roboflow/supervision/pull/1354): Ultralytics SAM (Segment Anything Model) support in [`sv.Detections.from_ultralytics`](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.from_ultralytics). [SAM2](https://sam2.metademolab.com/) was released during this update, and is already supported via [`sv.Detections.from_sam`](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.from_sam).
- Added [#1354](https://github.com/roboflow/supervision/pull/1354): Ultralytics SAM (Segment Anything Model) support in [`sv.Detections.from_ultralytics`](https://supervision.roboflow.com/0.23.0/detection/core/#supervision.detection.core.Detections.from_ultralytics). [SAM2](https://sam2.metademolab.com/) was released during this update, and is already supported via [`sv.Detections.from_sam`](https://supervision.roboflow.com/0.23.0/detection/core/#supervision.detection.core.Detections.from_sam).
```python
import supervision as sv
@@ -92,15 +92,15 @@ sam_result = mask_generator.generate(IMAGE)
detections = sv.Detections.from_sam(sam_result=sam_result)
```
- Added [#1458](https://github.com/roboflow/supervision/pull/1458): `outline_color` options for [`TriangleAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.TriangleAnnotator) and [`DotAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.DotAnnotator).
- Added [#1458](https://github.com/roboflow/supervision/pull/1458): `outline_color` options for [`TriangleAnnotator`](https://supervision.roboflow.com/0.23.0/detection/annotators/#supervision.annotators.core.TriangleAnnotator) and [`DotAnnotator`](https://supervision.roboflow.com/0.23.0/detection/annotators/#supervision.annotators.core.DotAnnotator).
- Added [#1409](https://github.com/roboflow/supervision/pull/1409): `text_color` option for [`VertexLabelAnnotator`](https://supervision.roboflow.com/latest/keypoint/annotators/#supervision.keypoint.annotators.VertexLabelAnnotator) keypoint annotator.
- Added [#1409](https://github.com/roboflow/supervision/pull/1409): `text_color` option for [`VertexLabelAnnotator`](https://supervision.roboflow.com/0.23.0/keypoint/annotators/#supervision.keypoint.annotators.VertexLabelAnnotator) keypoint annotator.
- Changed [#1434](https://github.com/roboflow/supervision/pull/1434): [`InferenceSlicer`](https://supervision.roboflow.com/latest/detection/tools/inference_slicer/) now features an `overlap_ratio_wh` parameter, making it easier to compute slice sizes when handling overlapping slices.
- Changed [#1434](https://github.com/roboflow/supervision/pull/1434): [`InferenceSlicer`](https://supervision.roboflow.com/0.23.0/detection/tools/inference_slicer/) now features an `overlap_ratio_wh` parameter, making it easier to compute slice sizes when handling overlapping slices.
- Fix [#1448](https://github.com/roboflow/supervision/pull/1448): Various annotator type issues have been resolved, supporting expanded error handling.
- Fix [#1348](https://github.com/roboflow/supervision/pull/1348): Introduced a new method for [seeking to a specific video frame](https://supervision.roboflow.com/latest/utils/video/#supervision.utils.video.get_video_frames_generator), addressing cases where traditional seek methods were failing. It can be enabled with `iterative_seek=True`.
- Fix [#1348](https://github.com/roboflow/supervision/pull/1348): Introduced a new method for [seeking to a specific video frame](https://supervision.roboflow.com/0.23.0/utils/video/#supervision.utils.video.get_video_frames_generator), addressing cases where traditional seek methods were failing. It can be enabled with `iterative_seek=True`.
```python
import supervision as sv
@@ -133,7 +133,7 @@ for frame in sv.get_video_frames_generator(
### 0.22.0 <small>Jul 12, 2024</small>
- Added [#1326](https://github.com/roboflow/supervision/pull/1326): [`sv.DetectionsDataset`](https://supervision.roboflow.com/latest/datasets/core/#supervision.dataset.core.DetectionDataset) and [`sv.ClassificationDataset`](https://supervision.roboflow.com/latest/datasets/core/#supervision.dataset.core.ClassificationDataset) allowing to load the images into memory only when necessary (lazy loading).
- Added [#1326](https://github.com/roboflow/supervision/pull/1326): [`sv.DetectionsDataset`](https://supervision.roboflow.com/0.22.0/datasets/core/#supervision.dataset.core.DetectionDataset) and [`sv.ClassificationDataset`](https://supervision.roboflow.com/0.22.0/datasets/core/#supervision.dataset.core.ClassificationDataset) allowing to load the images into memory only when necessary (lazy loading).
!!! failure "Deprecated"
@@ -166,15 +166,15 @@ for path, image, annotation in ds_train:
# loads image on demand
```
- Added [#1296](https://github.com/roboflow/supervision/pull/1296): [`sv.Detections.from_lmm`](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.from_lmm) now supports parsing results from the [Florence 2](https://huggingface.co/microsoft/Florence-2-large) model, extending the capability to handle outputs from this Large Multimodal Model (LMM). This includes detailed object detection, OCR with region proposals, segmentation, and more. Find out more in our [Colab notebook](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-florence-2-on-detection-dataset.ipynb).
- Added [#1296](https://github.com/roboflow/supervision/pull/1296): [`sv.Detections.from_lmm`](https://supervision.roboflow.com/0.22.0/detection/core/#supervision.detection.core.Detections.from_lmm) now supports parsing results from the [Florence 2](https://huggingface.co/microsoft/Florence-2-large) model, extending the capability to handle outputs from this Large Multimodal Model (LMM). This includes detailed object detection, OCR with region proposals, segmentation, and more. Find out more in our [Colab notebook](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-florence-2-on-detection-dataset.ipynb).
- Added [#1232](https://github.com/roboflow/supervision/pull/1232) to support keypoint detection with Mediapipe. Both [legacy](https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/pose_landmarker/python/%5BMediaPipe_Python_Tasks%5D_Pose_Landmarker.ipynb) and [modern](https://ai.google.dev/edge/mediapipe/solutions/vision/pose_landmarker/python) pipelines are supported. See [`sv.KeyPoints.from_mediapipe`](https://supervision.roboflow.com/latest/keypoint/core/#supervision.keypoint.core.KeyPoints.from_mediapipe) for more.
- Added [#1232](https://github.com/roboflow/supervision/pull/1232) to support keypoint detection with Mediapipe. Both [legacy](https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/pose_landmarker/python/%5BMediaPipe_Python_Tasks%5D_Pose_Landmarker.ipynb) and [modern](https://ai.google.dev/edge/mediapipe/solutions/vision/pose_landmarker/python) pipelines are supported. See [`sv.KeyPoints.from_mediapipe`](https://supervision.roboflow.com/0.22.0/keypoint/core/#supervision.keypoint.core.KeyPoints.from_mediapipe) for more.
- Added [#1316](https://github.com/roboflow/supervision/pull/1316): [`sv.KeyPoints.from_mediapipe`](https://supervision.roboflow.com/latest/keypoint/core/#supervision.keypoint.core.KeyPoints.from_mediapipe) extended to support FaceMesh from Mediapipe. This enhancement allows for processing both face landmarks from `FaceLandmarker`, and legacy results from `FaceMesh`.
- Added [#1316](https://github.com/roboflow/supervision/pull/1316): [`sv.KeyPoints.from_mediapipe`](https://supervision.roboflow.com/0.22.0/keypoint/core/#supervision.keypoint.core.KeyPoints.from_mediapipe) extended to support FaceMesh from Mediapipe. This enhancement allows for processing both face landmarks from `FaceLandmarker`, and legacy results from `FaceMesh`.
- Added [#1310](https://github.com/roboflow/supervision/pull/1310): [`sv.KeyPoints.from_detectron2`](https://supervision.roboflow.com/latest/keypoint/core/#supervision.keypoint.core.KeyPoints.from_detectron2) is a new `KeyPoints` method, adding support for extracting keypoints from the popular [Detectron 2](https://github.com/facebookresearch/detectron2) platform.
- Added [#1310](https://github.com/roboflow/supervision/pull/1310): [`sv.KeyPoints.from_detectron2`](https://supervision.roboflow.com/0.22.0/keypoint/core/#supervision.keypoint.core.KeyPoints.from_detectron2) is a new `KeyPoints` method, adding support for extracting keypoints from the popular [Detectron 2](https://github.com/facebookresearch/detectron2) platform.
- Added [#1300](https://github.com/roboflow/supervision/pull/1300): [`sv.Detections.from_detectron2`](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.from_detectron2) now supports segmentation models detectron2. The resulting masks can be used with [`sv.MaskAnnotator`](https://supervision.roboflow.com/latest/annotators/#supervision.annotators.core.MaskAnnotator) for displaying annotations.
- Added [#1300](https://github.com/roboflow/supervision/pull/1300): [`sv.Detections.from_detectron2`](https://supervision.roboflow.com/0.22.0/detection/core/#supervision.detection.core.Detections.from_detectron2) now supports segmentation models detectron2. The resulting masks can be used with [`sv.MaskAnnotator`](https://supervision.roboflow.com/0.22.0/detection/annotators/#supervision.annotators.core.MaskAnnotator) for displaying annotations.
```python
import supervision as sv
@@ -196,7 +196,7 @@ mask_annotator = sv.MaskAnnotator()
annotated_frame = mask_annotator.annotate(scene=image.copy(), detections=detections)
```
- Added [#1277](https://github.com/roboflow/supervision/pull/1277): if you provide a font that supports symbols of a language, [`sv.RichLabelAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator.annotate) will draw them on your images.
- Added [#1277](https://github.com/roboflow/supervision/pull/1277): if you provide a font that supports symbols of a language, [`sv.RichLabelAnnotator`](https://supervision.roboflow.com/0.22.0/detection/annotators/#supervision.annotators.core.LabelAnnotator.annotate) will draw them on your images.
- Various other annotators have been revised to ensure proper in-place functionality when used with `numpy` arrays. Additionally, we fixed a bug where `sv.ColorAnnotator` was filling boxes with solid color when used in-place.
```python
@@ -232,25 +232,25 @@ obb_annotator = OrientedBoxAnnotator()
annotated_image = obb_annotator.annotate(scene=image.copy(), detections=detections)
```
- Fixed [#1312](https://github.com/roboflow/supervision/pull/1312): Fixed [`CropAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.TraceAnnotator.annotate).
- Fixed [#1312](https://github.com/roboflow/supervision/pull/1312): Fixed [`CropAnnotator`](https://supervision.roboflow.com/0.22.0/detection/annotators/#supervision.annotators.core.TraceAnnotator.annotate).
!!! failure "Removed"
`BoxAnnotator` was removed, however `BoundingBoxAnnotator` has been renamed to `BoxAnnotator`. Use a combination of [`BoxAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoxAnnotator) and [`LabelAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator) to simulate old `BoundingBox` behavior.
`BoxAnnotator` was removed, however `BoundingBoxAnnotator` has been renamed to `BoxAnnotator`. Use a combination of [`BoxAnnotator`](https://supervision.roboflow.com/0.22.0/detection/annotators/#supervision.annotators.core.BoxAnnotator) and [`LabelAnnotator`](https://supervision.roboflow.com/0.22.0/detection/annotators/#supervision.annotators.core.LabelAnnotator) to simulate old `BoundingBox` behavior.
!!! failure "Deprecated"
The name `BoundingBoxAnnotator` has been deprecated and will be removed in `supervision-0.26.0`. It has been renamed to [`BoxAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoxAnnotator).
The name `BoundingBoxAnnotator` has been deprecated and will be removed in `supervision-0.26.0`. It has been renamed to [`BoxAnnotator`](https://supervision.roboflow.com/0.22.0/detection/annotators/#supervision.annotators.core.BoxAnnotator).
- Added [#975](https://github.com/roboflow/supervision/pull/975) 📝 New Cookbooks: serialize detections into [json](https://github.com/roboflow/supervision/blob/de896189b83a1f9434c0a37dd9192ee00d2a1283/docs/notebooks/serialise-detections-to-json.ipynb) and [csv](https://github.com/roboflow/supervision/blob/de896189b83a1f9434c0a37dd9192ee00d2a1283/docs/notebooks/serialise-detections-to-csv.ipynb).
- Added [#1290](https://github.com/roboflow/supervision/pull/1290): Mostly an internal change, our file utility function now support both `str` and `pathlib` paths.
- Added [#1340](https://github.com/roboflow/supervision/pull/1340): Two new methods for converting between bounding box formats - [`xywh_to_xyxy`](https://supervision.roboflow.com/latest/detection/utils/#supervision.detection.utils.xywh_to_xyxy) and [`xcycwh_to_xyxy`](https://supervision.roboflow.com/latest/detection/utils/#supervision.detection.utils.xcycwh_to_xyxy)
- Added [#1340](https://github.com/roboflow/supervision/pull/1340): Two new methods for converting between bounding box formats - [`xywh_to_xyxy`](https://supervision.roboflow.com/0.22.0/detection/utils/#supervision.detection.utils.xywh_to_xyxy) and [`xcycwh_to_xyxy`](https://supervision.roboflow.com/0.22.0/detection/utils/#supervision.detection.utils.xcycwh_to_xyxy)
!!! failure "Removed"
`from_roboflow` method has been removed due to deprecation. Use [from_inference](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.from_inference) instead.
`from_roboflow` method has been removed due to deprecation. Use [from_inference](https://supervision.roboflow.com/0.22.0/detection/core/#supervision.detection.core.Detections.from_inference) instead.
!!! failure "Removed"
@@ -274,17 +274,17 @@ annotated_image = obb_annotator.annotate(scene=image.copy(), detections=detectio
!!! failure "Removed"
`ColorPalette.default()` has been removed due to deprecation. Use [ColorPalette.DEFAULT](https://supervision.roboflow.com/latest/utils/draw/#supervision.draw.color.ColorPalette.DEFAULT) instead.
`ColorPalette.default()` has been removed due to deprecation. Use [ColorPalette.DEFAULT](https://supervision.roboflow.com/0.22.0/utils/draw/#supervision.draw.color.ColorPalette.DEFAULT) instead.
!!! failure "Removed"
`FPSMonitor.__call__` has been removed due to deprecation. Use the attribute [FPSMonitor.fps](https://supervision.roboflow.com/latest/utils/video/#supervision.utils.video.FPSMonitor.fps) instead.
`FPSMonitor.__call__` has been removed due to deprecation. Use the attribute [FPSMonitor.fps](https://supervision.roboflow.com/0.22.0/utils/video/#supervision.utils.video.FPSMonitor.fps) instead.
### 0.21.0 <small>Jun 5, 2024</small>
- Added [#500](https://github.com/roboflow/supervision/pull/500): [`sv.Detections.with_nmm`](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.with_nmm) to perform non-maximum merging on the current set of object detections.
- Added [#500](https://github.com/roboflow/supervision/pull/500): [`sv.Detections.with_nmm`](https://supervision.roboflow.com/0.21.0/detection/core/#supervision.detection.core.Detections.with_nmm) to perform non-maximum merging on the current set of object detections.
- Added [#1221](https://github.com/roboflow/supervision/pull/1221): [`sv.Detections.from_lmm`](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections.from_lmm) allowing to parse Large Multimodal Model (LMM) text result into [`sv.Detections`](https://supervision.roboflow.com/latest/detection/core/) object. For now `from_lmm` supports only [PaliGemma](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-paligemma-on-detection-dataset.ipynb) result parsing.
- Added [#1221](https://github.com/roboflow/supervision/pull/1221): [`sv.Detections.from_lmm`](https://supervision.roboflow.com/0.21.0/detection/core/#supervision.detection.core.Detections.from_lmm) allowing to parse Large Multimodal Model (LMM) text result into [`sv.Detections`](https://supervision.roboflow.com/0.21.0/detection/core/) object. For now `from_lmm` supports only [PaliGemma](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-paligemma-on-detection-dataset.ipynb) result parsing.
```python
import supervision as sv
@@ -303,7 +303,7 @@ detections.class_id
# array([0])
```
- Added [#1236](https://github.com/roboflow/supervision/pull/1236): [`sv.VertexLabelAnnotator`](https://supervision.roboflow.com/latest/keypoint/annotators/#supervision.keypoint.annotators.EdgeAnnotator.annotate) allowing to annotate every vertex of a keypoint skeleton with custom text and color.
- Added [#1236](https://github.com/roboflow/supervision/pull/1236): [`sv.VertexLabelAnnotator`](https://supervision.roboflow.com/0.21.0/keypoint/annotators/#supervision.keypoint.annotators.EdgeAnnotator.annotate) allowing to annotate every vertex of a keypoint skeleton with custom text and color.
```python
import supervision as sv
@@ -321,15 +321,15 @@ annotated_frame = edge_annotator.annotate(
)
```
- Added [#1147](https://github.com/roboflow/supervision/pull/1147): [`sv.KeyPoints.from_inference`](https://supervision.roboflow.com/develop/keypoint/core/#supervision.keypoint.core.KeyPoints.from_inference) allowing to create [`sv.KeyPoints`](https://supervision.roboflow.com/develop/keypoint/core/#supervision.keypoint.core.KeyPoints) from [Inference](https://github.com/roboflow/inference) result.
- Added [#1147](https://github.com/roboflow/supervision/pull/1147): [`sv.KeyPoints.from_inference`](https://supervision.roboflow.com/0.21.0/keypoint/core/#supervision.keypoint.core.KeyPoints.from_inference) allowing to create [`sv.KeyPoints`](https://supervision.roboflow.com/0.21.0/keypoint/core/#supervision.keypoint.core.KeyPoints) from [Inference](https://github.com/roboflow/inference) result.
- Added [#1138](https://github.com/roboflow/supervision/pull/1138): [`sv.KeyPoints.from_yolo_nas`](https://supervision.roboflow.com/develop/keypoint/core/#supervision.keypoint.core.KeyPoints.from_yolo_nas) allowing to create [`sv.KeyPoints`](https://supervision.roboflow.com/develop/keypoint/core/#supervision.keypoint.core.KeyPoints) from [YOLO-NAS](https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md) result.
- Added [#1138](https://github.com/roboflow/supervision/pull/1138): [`sv.KeyPoints.from_yolo_nas`](https://supervision.roboflow.com/0.21.0/keypoint/core/#supervision.keypoint.core.KeyPoints.from_yolo_nas) allowing to create [`sv.KeyPoints`](https://supervision.roboflow.com/0.21.0/keypoint/core/#supervision.keypoint.core.KeyPoints) from [YOLO-NAS](https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md) result.
- Added [#1163](https://github.com/roboflow/supervision/pull/1163): [`sv.mask_to_rle`](https://supervision.roboflow.com/develop/datasets/utils/#supervision.dataset.utils.rle_to_mask) and [`sv.rle_to_mask`](https://supervision.roboflow.com/develop/datasets/utils/#supervision.dataset.utils.rle_to_mask) allowing for easy conversion between mask and rle formats.
- Added [#1163](https://github.com/roboflow/supervision/pull/1163): [`sv.mask_to_rle`](https://supervision.roboflow.com/0.21.0/datasets/utils/#supervision.dataset.utils.rle_to_mask) and [`sv.rle_to_mask`](https://supervision.roboflow.com/0.21.0/datasets/utils/#supervision.dataset.utils.rle_to_mask) allowing for easy conversion between mask and rle formats.
- Changed [#1236](https://github.com/roboflow/supervision/pull/1236): [`sv.InferenceSlicer`](https://supervision.roboflow.com/develop/detection/tools/inference_slicer/) allowing to select overlap filtering strategy (`NONE`, `NON_MAX_SUPPRESSION` and `NON_MAX_MERGE`).
- Changed [#1236](https://github.com/roboflow/supervision/pull/1236): [`sv.InferenceSlicer`](https://supervision.roboflow.com/0.21.0/detection/tools/inference_slicer/) allowing to select overlap filtering strategy (`NONE`, `NON_MAX_SUPPRESSION` and `NON_MAX_MERGE`).
- Changed [#1178](https://github.com/roboflow/supervision/pull/1178): [`sv.InferenceSlicer`](https://supervision.roboflow.com/develop/detection/tools/inference_slicer/) adding instance segmentation model support.
- Changed [#1178](https://github.com/roboflow/supervision/pull/1178): [`sv.InferenceSlicer`](https://supervision.roboflow.com/0.21.0/detection/tools/inference_slicer/) adding instance segmentation model support.
```python
import cv2
@@ -356,9 +356,9 @@ annotated_image = label_annotator.annotate(
scene=annotated_image, detections=detections)
```
- Changed [#1228](https://github.com/roboflow/supervision/pull/1228): [`sv.LineZone`](https://supervision.roboflow.com/develop/detection/tools/line_zone/) making it 10-20 times faster, depending on the use case.
- Changed [#1228](https://github.com/roboflow/supervision/pull/1228): [`sv.LineZone`](https://supervision.roboflow.com/0.21.0/detection/tools/line_zone/) making it 10-20 times faster, depending on the use case.
- Changed [#1163](https://github.com/roboflow/supervision/pull/1163): [`sv.DetectionDataset.from_coco`](https://supervision.roboflow.com/develop/datasets/core/#supervision.dataset.core.DetectionDataset.from_coco) and [`sv.DetectionDataset.as_coco`](https://supervision.roboflow.com/develop/datasets/core/#supervision.dataset.core.DetectionDataset.as_coco) adding support for run-length encoding (RLE) mask format.
- Changed [#1163](https://github.com/roboflow/supervision/pull/1163): [`sv.DetectionDataset.from_coco`](https://supervision.roboflow.com/0.21.0/datasets/core/#supervision.dataset.core.DetectionDataset.from_coco) and [`sv.DetectionDataset.as_coco`](https://supervision.roboflow.com/0.21.0/datasets/core/#supervision.dataset.core.DetectionDataset.as_coco) adding support for run-length encoding (RLE) mask format.
### 0.20.0 <small>April 24, 2024</small>
@@ -485,11 +485,11 @@ annotated_frame = crop_annotator.annotate(
)
```
- Changed [#827](https://github.com/roboflow/supervision/pull/827): [`sv.ByteTrack.reset`](/0.19.0/tracking/#supervision.tracking.ByteTrack.reset) allowing users to clear trackers state, enabling the processing of multiple video files in sequence.
- Changed [#827](https://github.com/roboflow/supervision/pull/827): [`sv.ByteTrack.reset`](/0.19.0/trackers/#supervision.tracker.ByteTrack.reset) allowing users to clear trackers state, enabling the processing of multiple video files in sequence.
- Changed [#802](https://github.com/roboflow/supervision/pull/802): [`sv.LineZoneAnnotator`](/0.19.0/detection/tools/line_zone/#supervision.detection.line_zone.LineZone) allowing to hide in/out count using `display_in_count` and `display_out_count` properties.
- Changed [#787](https://github.com/roboflow/supervision/pull/787): [`sv.ByteTrack`](/0.19.0/tracking/#supervision.tracking.ByteTrack) input arguments and docstrings updated to improve readability and ease of use.
- Changed [#787](https://github.com/roboflow/supervision/pull/787): [`sv.ByteTrack`](/0.19.0/trackers/#supervision.tracker.ByteTrack) input arguments and docstrings updated to improve readability and ease of use.
!!! failure "Deprecated"
@@ -916,7 +916,7 @@ array([
- Added [#101](https://github.com/roboflow/supervision/pull/101): ability to extract masks from YOLOv8 result using [`sv.Detections.from_yolov8`](/0.8.0/detection/core/#supervision.detection.core.Detections.from_yolov8). Here is an example illustrating how to extract boolean masks from the result of the YOLOv8 model inference.
- Added [#122](https://github.com/roboflow/supervision/pull/122): ability to crop image using [`sv.crop`](/latest/utils/image/#crop). Here is an example showing how to get a separate crop for each detection in `sv.Detections`.
- Added [#122](https://github.com/roboflow/supervision/pull/122): ability to crop image using [`sv.crop`](/0.9.0/utils/image/#crop). Here is an example showing how to get a separate crop for each detection in `sv.Detections`.
- Added [#120](https://github.com/roboflow/supervision/pull/120): ability to conveniently save multiple images into directory using [`sv.ImageSink`](/0.9.0/utils/image/#imagesink). Here is an example showing how to save every tenth video frame as a separate image.
@@ -928,11 +928,11 @@ array([
... sink.save_image(image=image)
```
- Fixed [#106](https://github.com/roboflow/supervision/issues/106): inconvenient handling of [`sv.PolygonZone`](/0.8.0/supervision/detection/tools/polygon_zone/#polygonzone) coordinates. Now `sv.PolygonZone` accepts coordinates in the form of `[[x1, y1], [x2, y2], ...]` that can be both integers and floats.
- Fixed [#106](https://github.com/roboflow/supervision/issues/106): inconvenient handling of [`sv.PolygonZone`](/0.8.0/detection/tools/polygon_zone/#polygonzone) coordinates. Now `sv.PolygonZone` accepts coordinates in the form of `[[x1, y1], [x2, y2], ...]` that can be both integers and floats.
### 0.8.0 <small>May 17, 2023</small>
- Added [#100](https://github.com/roboflow/supervision/pull/100): support for dataset inheritance. The current `Dataset` got renamed to `DetectionDataset`. Now [`DetectionDataset`](/0.8.0/supervision/dataset/core/#detectiondataset) inherits from `BaseDataset`. This change was made to enforce the future consistency of APIs of different types of computer vision datasets.
- Added [#100](https://github.com/roboflow/supervision/pull/100): support for dataset inheritance. The current `Dataset` got renamed to `DetectionDataset`. Now [`DetectionDataset`](/0.8.0/dataset/core/#detectiondataset) inherits from `BaseDataset`. This change was made to enforce the future consistency of APIs of different types of computer vision datasets.
- Added [#100](https://github.com/roboflow/supervision/pull/100): ability to save datasets in YOLO format using [`DetectionDataset.as_yolo`](/0.8.0/dataset/core/#supervision.dataset.core.DetectionDataset.as_yolo).
```python
+2 -2
View File
@@ -25,12 +25,12 @@ These features are phased out due to better alternatives or potential issues in
### 0.22.0
- [`Detections.from_froboflow`](detection/core.md/#supervision.detection.core.Detections.from_roboflow) is removed as of `supervision-0.22.0`. Use [`Detections.from_inference`](detection/core.md/#supervision.detection.core.Detections.from_inference) instead.
- [`Detections.from_roboflow`](detection/core.md/#supervision.detection.core.Detections.from_roboflow) is removed as of `supervision-0.22.0`. Use [`Detections.from_inference`](detection/core.md/#supervision.detection.core.Detections.from_inference) instead.
- The method `Color.white()` was removed as of `supervision-0.22.0`. Use the constant `Color.WHITE` instead.
- The method `Color.black()` was removed as of `supervision-0.22.0`. Use the constant `Color.BLACK` instead.
- The method `Color.red()` was removed as of `supervision-0.22.0`. Use the constant `Color.RED` instead.
- The method `Color.green()` was removed as of `supervision-0.22.0`. Use the constant `Color.GREEN` instead.
- The method `Color.blue()` was removed as of `supervision-0.22.0`. Use the constant `Color.BLUE` instead.
- The method [`ColorPalette.default()`](draw/color.md/#supervision.draw.color.ColorPalette.default) was removed as of `supervision-0.22.0`. Use the constant [`ColorPalette.DEFAULT`](draw/color.md/#supervision.draw.color.ColorPalette.DEFAULT) instead.
- The method `ColorPalette.default()` was removed as of `supervision-0.22.0`. Use the constant [`ColorPalette.DEFAULT`](draw/color/#supervision.draw.color.ColorPalette.DEFAULT) instead.
- `BoxAnnotator` was removed as of `supervision-0.22.0`, however `BoundingBoxAnnotator` was immediately renamed to `BoxAnnotator`. Use [`BoxAnnotator`](detection/annotators.md/#supervision.annotators.core.BoxAnnotator) and [`LabelAnnotator`](detection/annotators.md/#supervision.annotators.core.LabelAnnotator) instead of the old `BoxAnnotator`.
- The method [`FPSMonitor.__call__`](utils/video.md/#supervision.utils.video.FPSMonitor.__call__) was removed as of `supervision-0.22.0`. Use the attribute [`FPSMonitor.fps`](utils/video.md/#supervision.utils.video.FPSMonitor.fps) instead.
+8 -8
View File
@@ -6,7 +6,7 @@ comments: true
Supervision provides a seamless process for annotating predictions generated by various
object detection and segmentation models. This guide shows how to perform inference
with the [Inference](https://github.com/roboflow/inference),
with the [Inference](https://github.com/roboflow/inference),
[Ultralytics](https://github.com/ultralytics/ultralytics) or
[Transformers](https://github.com/huggingface/transformers) packages. Following this,
you'll learn how to import these predictions into Supervision and use them to annotate
@@ -69,7 +69,7 @@ Now that we have predictions from a model, we can load them into Supervision.
=== "Inference"
We can do so using the [`sv.Detections.from_inference`](detection/core/#supervision.detection.core.Detections.from_inference) method, which accepts model results from both detection and segmentation models.
We can do so using the [`sv.Detections.from_inference`](/latest/detection/core/#supervision.detection.core.Detections.from_inference) method, which accepts model results from both detection and segmentation models.
```{ .py hl_lines="2 8" }
import cv2
@@ -84,7 +84,7 @@ Now that we have predictions from a model, we can load them into Supervision.
=== "Ultralytics"
We can do so using the [`sv.Detections.from_ultralytics`](detection/core/#supervision.detection.core.Detections.from_ultralytics) method, which accepts model results from both detection and segmentation models.
We can do so using the [`sv.Detections.from_ultralytics`](/latest/detection/core/#supervision.detection.core.Detections.from_ultralytics) method, which accepts model results from both detection and segmentation models.
```{ .py hl_lines="2 8" }
import cv2
@@ -99,7 +99,7 @@ Now that we have predictions from a model, we can load them into Supervision.
=== "Transformers"
We can do so using the [`sv.Detections.from_transformers`](detection/core/#supervision.detection.core.Detections.from_transformers) method, which accepts model results from both detection and segmentation models.
We can do so using the [`sv.Detections.from_transformers`](/latest/detection/core/#supervision.detection.core.Detections.from_transformers) method, which accepts model results from both detection and segmentation models.
```{ .py hl_lines="2 19-21" }
import torch
@@ -135,7 +135,7 @@ You can load predictions from other computer vision frameworks and libraries usi
## Annotate Image with Detections
Finally, we can annotate the image with the predictions. Since we are working with an object detection model, we will use the [`sv.BoxAnnotator`](/latest/annotators/#supervision.annotators.core.BoxAnnotator) and [`sv.LabelAnnotator`](/latest/annotators/#supervision.annotators.core.LabelAnnotator) classes.
Finally, we can annotate the image with the predictions. Since we are working with an object detection model, we will use the [`sv.BoxAnnotator`](/latest/detection/annotators/#supervision.annotators.core.BoxAnnotator) and [`sv.LabelAnnotator`](/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator) classes.
=== "Inference"
@@ -217,7 +217,7 @@ Finally, we can annotate the image with the predictions. Since we are working wi
## Display Custom Labels
By default, [`sv.LabelAnnotator`](/latest/annotators/#supervision.annotators.core.LabelAnnotator)
By default, [`sv.LabelAnnotator`](/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator)
will label each detection with its `class_name` (if possible) or `class_id`. You can
override this behavior by passing a list of custom `labels` to the `annotate` method.
@@ -320,9 +320,9 @@ override this behavior by passing a list of custom `labels` to the `annotate` me
## Annotate Image with Segmentations
If you are running the segmentation model
[`sv.MaskAnnotator`](/latest/annotators/#supervision.annotators.core.MaskAnnotator)
[`sv.MaskAnnotator`](/latest/detection/annotators/#supervision.annotators.core.MaskAnnotator)
is a drop-in replacement for
[`sv.BoxAnnotator`](/latest/annotators/#supervision.annotators.core.BoxAnnotator)
[`sv.BoxAnnotator`](/latest/detection/annotators/#supervision.annotators.core.BoxAnnotator)
that will allow you to draw masks instead of boxes.
=== "Inference"
+2 -2
View File
@@ -148,7 +148,7 @@ enabling the continuous following of the object's motion path across different f
Annotating the video with tracking IDs helps in distinguishing and following each object
distinctly. With the
[`sv.LabelAnnotator`](/latest/annotators.md/#supervision.annotators.core.LabelAnnotator)
[`sv.LabelAnnotator`](/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator)
in Supervision, we can overlay the tracker IDs and class labels on the detected objects,
offering a clear visual representation of each object's class and unique identifier.
@@ -230,7 +230,7 @@ offering a clear visual representation of each object's class and unique identif
Adding traces to the video involves overlaying the historical paths of the detected
objects. This feature, powered by the
[`sv.TraceAnnotator`](/latest/annotators/#supervision.annotators.core.TraceAnnotator),
[`sv.TraceAnnotator`](/latest/detection/annotators/#supervision.annotators.core.TraceAnnotator),
allows for visualizing the trajectories of objects, helping in understanding the
movement patterns and interactions between objects in the video.
+4 -2
View File
@@ -125,13 +125,15 @@ You can install `supervision` in a
[:octicons-arrow-right-24: Tutorial](how_to/detect_small_objects.md)
- > **Count Objects Crossing Line**
- **Count Objects Crossing Line**
---
Explore methods to accurately count and analyze objects crossing a predefined line
- > **Filter Objects in Zone**
[:octicons-arrow-right-24: Notebook](https://supervision.roboflow.com/latest/notebooks/count-objects-crossing-the-line/)
- **Filter Objects in Zone**
---
+4 -4
View File
@@ -287,10 +287,10 @@
],
"source": [
"# Create a bounding box annotator object.\n",
"bounding_box = sv.BoundingBoxAnnotator()\n",
"box_annotator = sv.BoxAnnotator()\n",
"\n",
"# Annotate our frame with detections.\n",
"annotated_frame = bounding_box.annotate(scene=frame.copy(), detections=detections)\n",
"annotated_frame = box_annotator.annotate(scene=frame.copy(), detections=detections)\n",
"\n",
"# Display the frame.\n",
"sv.plot_image(annotated_frame)"
@@ -302,7 +302,7 @@
"id": "o8SsyCid6YV3"
},
"source": [
"Notice that we create a `box_annoator` variable by initalizing a [BoundingBoxAnnotator](https://supervision.roboflow.com/latest/annotators/#boundingboxannotator). We can change the color and thickness, but for simplicity we keep the defaults. There are a ton of easy to use [annotators](https://supervision.roboflow.com/latest/annotators/) available in the Supervision package other than a bounding box that are fun to play with."
"Notice that we create a `box_annotator` variable by initalizing a [BoxAnnotator](https://supervision.roboflow.com/latest/detection/annotators/#boxannotator). We can change the color and thickness, but for simplicity we keep the defaults. There are a ton of easy to use [annotators](https://supervision.roboflow.com/latest/detection/annotators/) available in the Supervision package other than a bounding box that are fun to play with."
]
},
{
@@ -342,7 +342,7 @@
" detections = sv.Detections.from_inference(result)\n",
"\n",
" # Apply bounding box to detections on a copy of the frame.\n",
" annotated_frame = bounding_box.annotate(\n",
" annotated_frame = box_annotator.annotate(\n",
" scene=frame.copy(),\n",
" detections=detections\n",
" )\n",
+223 -223
View File
@@ -17,12 +17,12 @@
},
{
"cell_type": "markdown",
"source": [
"Click the `Open in Colab` button to run the cookbook on Google Colab."
],
"metadata": {
"id": "IyC-iI62u9y7"
}
},
"source": [
"Click the `Open in Colab` button to run the cookbook on Google Colab."
]
},
{
"cell_type": "markdown",
@@ -47,8 +47,8 @@
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Mon Feb 12 13:03:38 2024 \n",
"+---------------------------------------------------------------------------------------+\n",
@@ -79,12 +79,12 @@
},
{
"cell_type": "markdown",
"source": [
"**NOTE:** To make it easier for us to manage datasets, images and models we create a `HOME` constant."
],
"metadata": {
"id": "S_coxWaEwNpB"
}
},
"source": [
"**NOTE:** To make it easier for us to manage datasets, images and models we create a `HOME` constant."
]
},
{
"cell_type": "code",
@@ -98,8 +98,8 @@
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"/content\n"
]
@@ -113,49 +113,49 @@
},
{
"cell_type": "markdown",
"metadata": {
"id": "PE1dQcgiLuvV"
},
"source": [
"## Install required packages\n",
"\n",
"In this cookbook, we'll leverage two Python packages - `ultralytics` for running object detection, and `supervision` for tracking, visualizing detections, and crucially, counting objects that cross a line."
],
"metadata": {
"id": "PE1dQcgiLuvV"
}
]
},
{
"cell_type": "code",
"source": [
"!pip install -q ultralytics supervision==0.18.0"
],
"execution_count": null,
"metadata": {
"id": "Yy86T0CJLz1Y"
},
"execution_count": null,
"outputs": []
"outputs": [],
"source": [
"!pip install -q ultralytics supervision==0.18.0"
]
},
{
"cell_type": "markdown",
"source": [
"## Imports"
],
"metadata": {
"id": "FC-EZ6-fMEfA"
}
},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "Q8rPpDW4MEGU"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import supervision as sv\n",
"\n",
"from ultralytics import YOLO\n",
"from supervision.assets import download_assets, VideoAssets"
],
"metadata": {
"id": "Q8rPpDW4MEGU"
},
"execution_count": 4,
"outputs": []
]
},
{
"cell_type": "markdown",
@@ -168,33 +168,33 @@
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ax3dupz7z0vn"
},
"source": [
"\n",
"As an example input video, we will use one of the videos available in [`supervision.assets`](https://supervision.roboflow.com/develop/assets/). Supervision offers an assets download utility that allows you to download video files that you can use in your demos."
],
"metadata": {
"id": "Ax3dupz7z0vn"
}
]
},
{
"cell_type": "code",
"source": [
"download_assets(VideoAssets.VEHICLES)"
],
"execution_count": null,
"metadata": {
"id": "tmfK_kmjMtHp"
},
"execution_count": null,
"outputs": []
"outputs": [],
"source": [
"download_assets(VideoAssets.VEHICLES)"
]
},
{
"cell_type": "markdown",
"source": [
"**NOTE:** If you want to run the cookbook using your own file as input, simply upload video to Google Colab and replace `SOURCE_VIDEO_PATH` with the path to your file."
],
"metadata": {
"id": "-G9vhVBl2i-P"
}
},
"source": [
"**NOTE:** If you want to run the cookbook using your own file as input, simply upload video to Google Colab and replace `SOURCE_VIDEO_PATH` with the path to your file."
]
},
{
"cell_type": "code",
@@ -209,6 +209,9 @@
},
{
"cell_type": "markdown",
"metadata": {
"id": "cZaQUyUrZAek"
},
"source": [
"As a result of executing the above commands, you will download a video file and save it at the `SOURCE_VIDEO_PATH`. Keep in mind that the video preview below works only in the web version of the cookbooks and not in Google Colab.\n",
"\n",
@@ -218,37 +221,29 @@
" type=\"video/mp4\"\n",
" >\n",
"</video>"
],
"metadata": {
"id": "cZaQUyUrZAek"
}
]
},
{
"cell_type": "markdown",
"source": [
"## Read single frame from video"
],
"metadata": {
"id": "iiS871HqNnll"
}
},
"source": [
"## Read single frame from video"
]
},
{
"cell_type": "markdown",
"source": [
"The [`get_video_frames_generator`](https://supervision.roboflow.com/latest/utils/video/#supervision.utils.video.get_video_frames_generator) enables us to easily iterate over video frames. Let's create a video generator for our sample input file and display its first frame on the screen."
],
"metadata": {
"id": "MPMlQs-22HX9"
}
},
"source": [
"The [`get_video_frames_generator`](https://supervision.roboflow.com/latest/utils/video/#supervision.utils.video.get_video_frames_generator) enables us to easily iterate over video frames. Let's create a video generator for our sample input file and display its first frame on the screen."
]
},
{
"cell_type": "code",
"source": [
"generator = sv.get_video_frames_generator(SOURCE_VIDEO_PATH)\n",
"frame = next(generator)\n",
"\n",
"sv.plot_image(frame, (12, 12))"
],
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -257,35 +252,38 @@
"id": "6jm4yX-3Ou_B",
"outputId": "b5799261-2ac9-40a3-ae4a-cb0548a2c034"
},
"execution_count": 7,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"generator = sv.get_video_frames_generator(SOURCE_VIDEO_PATH)\n",
"frame = next(generator)\n",
"\n",
"sv.plot_image(frame, (12, 12))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "L4pt1XDO3D7q"
},
"source": [
"\n",
"We can also use [`VideoInfo.from_video_path`](https://supervision.roboflow.com/develop/utils/video/#supervision.utils.video.VideoInfo) to learn basic information about our video, such as duration, resolution, or FPS."
],
"metadata": {
"id": "L4pt1XDO3D7q"
}
]
},
{
"cell_type": "code",
"source": [
"sv.VideoInfo.from_video_path(SOURCE_VIDEO_PATH)"
],
"execution_count": 8,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -293,48 +291,45 @@
"id": "eVLsW_I72eXa",
"outputId": "9182624b-2de5-47d1-a5ed-73dc60ed5e8a"
},
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"VideoInfo(width=3840, height=2160, fps=25, total_frames=538)"
]
},
"execution_count": 8,
"metadata": {},
"execution_count": 8
"output_type": "execute_result"
}
],
"source": [
"sv.VideoInfo.from_video_path(SOURCE_VIDEO_PATH)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "N0-qK6vDPsr-"
},
"source": [
"## Run Object Detection\n",
"\n",
"Let's start by running the detection model on the first frame and annotating the results. In this cookbook, we use [Ultralytics](https://github.com/ultralytics/ultralytics) YOLOv8, but it can be successfully replaced with [other models](https://supervision.roboflow.com/latest/detection/core)."
],
"metadata": {
"id": "N0-qK6vDPsr-"
}
]
},
{
"cell_type": "markdown",
"source": [
"We initiate the model and perform detection on the first frame of the video. Then, we convert the result into a [`sv.Detections`](https://supervision.roboflow.com/latest/detection/core/) object, which will be useful in the later parts of the cookbook."
],
"metadata": {
"id": "uGJKBHXnc1w3"
}
},
"source": [
"We initiate the model and perform detection on the first frame of the video. Then, we convert the result into a [`sv.Detections`](https://supervision.roboflow.com/latest/detection/core/) object, which will be useful in the later parts of the cookbook."
]
},
{
"cell_type": "code",
"source": [
"model = YOLO(\"yolov8x.pt\")\n",
"\n",
"results = model(frame, verbose=False)[0]\n",
"detections = sv.Detections.from_ultralytics(results)"
],
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -342,41 +337,42 @@
"id": "NW0G6ZKX1e1E",
"outputId": "91687b08-667e-46c2-a421-e26fefc3388b"
},
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov8x.pt to 'yolov8x.pt'...\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"output_type": "stream",
"text": [
"100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 131M/131M [00:00<00:00, 241MB/s]\n"
]
}
],
"source": [
"model = YOLO(\"yolov8x.pt\")\n",
"\n",
"results = model(frame, verbose=False)[0]\n",
"detections = sv.Detections.from_ultralytics(results)"
]
},
{
"cell_type": "markdown",
"source": [
"\n",
"The results we've obtained can be easily visualized with [`sv.BoundingBoxAnnotator`](https://supervision.roboflow.com/latest/annotators/#supervision.annotators.core.BoundingBoxAnnotator). By default, this annotator uses the same color to highlight objects of the same category. However, with the integration of a [tracker](https://supervision.roboflow.com/latest/trackers/), it becomes possible to assign unique colors to each tracked object. We can easily define our [own color palettes](https://supervision.roboflow.com/latest/draw/color/#supervision.draw.color.ColorPalette) and adjust parameters such as line thickness, allowing for a highly tailored visualization experience."
],
"metadata": {
"id": "zL56OvvfdYpB"
}
},
"source": [
"\n",
"The results we've obtained can be easily visualized with [`sv.BoundingBoxAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoundingBoxAnnotator). By default, this annotator uses the same color to highlight objects of the same category. However, with the integration of a [tracker](https://supervision.roboflow.com/latest/trackers/), it becomes possible to assign unique colors to each tracked object. We can easily define our [own color palettes](https://supervision.roboflow.com/latest/utils/draw/#supervision.draw.color.ColorPalette) and adjust parameters such as line thickness, allowing for a highly tailored visualization experience."
]
},
{
"cell_type": "code",
"source": [
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=4)\n",
"annotated_frame = bounding_box_annotator.annotate(frame.copy(), detections)\n",
"sv.plot_image(annotated_frame, (12, 12))"
],
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -385,40 +381,65 @@
"id": "qpjNci4iRGkJ",
"outputId": "b0ddb63b-9640-40b9-d8f4-e555195f0134"
},
"execution_count": 10,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=4)\n",
"annotated_frame = bounding_box_annotator.annotate(frame.copy(), detections)\n",
"sv.plot_image(annotated_frame, (12, 12))"
]
},
{
"cell_type": "markdown",
"source": [
"## Improve Visualizations"
],
"metadata": {
"id": "HsPNfuM_3ENR"
}
},
"source": [
"## Improve Visualizations"
]
},
{
"cell_type": "markdown",
"source": [
"Supervision annotators can be easily combined with one another. Let's enhance our visualization by adding [`sv.LabelAnnotator`](https://supervision.roboflow.com/latest/annotators/#supervision.annotators.core.PolygonAnnotator.annotate), which we will use to mark detections with a label indicating their category and confidence level."
],
"metadata": {
"id": "H4lp2Ao_fHit"
}
},
"source": [
"Supervision annotators can be easily combined with one another. Let's enhance our visualization by adding [`sv.LabelAnnotator`](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.PolygonAnnotator.annotate), which we will use to mark detections with a label indicating their category and confidence level."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 560
},
"id": "lIYQULBI3Tf3",
"outputId": "8cd8d367-9003-4ac8-d62e-d81d38d2faeb"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIfCAYAAABEnkAKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9zY5sSbYuCn3DpnvEWplZu3ade/44FyEkpItEBxo8Bo/BW9DgJXgNXgEhIejQ4rYR4gquBPfsvasyK3OtCPc5bdAY4xvjs+m+slZBA20prCpXRLjPaT/j/8/MzN0dH+2jfbSP9tE+2kf7aB/to320j/bRPtq/0jb+/z2Bj/bRPtpH+2gf7aN9tI/20T7aR/toH+3/l/bh2H60j/bRPtpH+2gf7aN9tI/20T7aR/tX3T4c24/20T7aR/toH+2jfbSP9tE+2kf7aP+q24dj+9E+2kf7aB/to320j/bRPtpH+2gf7V91+3BsP9pH+2gf7aN9tI/20T7aR/toH+2j/atuH47tR/toH+2jfbSP9tE+2kf7aB/to320f9Xtw7H9aB/to320j/bRPtpH+2gf7aN9tI/2r7p9OLYf7aN9tI/20T7aR/toH+2jfbSP9tH+VbcPx/ajfbSP9tE+2kf7aB/to320j/bRPtq/6nb53gf/1/+b/y0MgNv6uY0NBmDA4O4wMwwzmAHu+dAwTABm8bKZ1++AwczqWTODYcZn/Dt/5/c6ieoTgDmyr3h6GmIeHM8d5iP7qh7jZQBj24CZz47sZxswGEZ+zr57/j1HwDGnYwyDm3N1AqwVdgMb3B0Og40B90OAhpjvk/dy0MAHHNMdliOZDbhPwCbgI1/2WK2x2+zXgTEGQPjaxDiijwkvfPJdQ8DQp2NYxEQmHDYMDn4esJhzxjtjxJoIPzgmgl4MwBwGzJxX/mK2CYwnbAYeMWId7oBhg7vBMTEgMMNI3Opnsm4bK22enjvjywN82BxwM0yT9xLurrSU0DYzWCwU7v3ZMla+xjF6dE+Ab/nkkYRcmCx6XtbHOZgHFFzo1D3erVdG9kNu8IbdQicWvL2sM3E9rNaG5Pm1WT2/gNnG+sQUll6AoqQfOHWnPJjZT8xhnFZhDswhcFlR1L0aMCZSPgXNYo5ljvI0LIgvMRT4OuDJey0DDah5ecKSw9tCRzGHgLWHDEPi3QhzEohL/9ZwVVIwgyCwFm2cw0gK8yMffxQulA01dvbJNQWOYuUI6YVmFuMiQw4J4q3IIN6f2e+YQtMpr2c+ORzYJur72eKi+Njcnuqmxlqvy4oXB19OePiCvymwI5f3urnmwkr2PZYRTX7nc4UbI73oDAVGZjBdkKV8dFlokkDAzWsewfeN/tYA3V9LScHZMhXVjw732bpWaCNRXc/OiYKpuRdfTpk2f1lYUvooWkpac5FJ9SvtA4HbyOdnjTgKU5Sx3yARoNYRPObuIQMW/qBsSv2J1W5pWojBRn43cWrCg0VzEJ5Ga7BWN6sdFLwn07J+l8/3ulofetHOIjTgKbNKVIu+r344L5s97KKCKC/kDT9gpAK359OUuZD3RG3V5/WO8Gooj6RGM7EBuU7C004Alfm6/G5Bt4HJYCQ/ZtkOAG3bWfNoOI9FJQ8HbKSd4xMHjhh+GHyuOsNLzvbUVpZcFGj+K/r4wTDXd6lfVhDYeQQBesm3k73rviB8aSqW2C1lDHVitFkgJz30OCtpuokN61jlsHvTX/HazBFHipHUXTPhhKPXorprIYzWt88kxkJa1jBeSFvwdzJp6tlho+zkZzhWv4j2H5x0fxAEBeiwrfmC2C+0LQqHqIm7yIZaA3FxQrWbJR9ZygCRbJ4dJ0641uFIjPQKp443Y+5b9jZLr+Q6iVeLN/9X/8v/Bb6nfbdjSxUIV4PYignGouG8AD7ys+lhiFoSGhmRf1sp+lRJou3cSX5UUvHcGDkX9+qDbykTx1SIfIBqveVIOlQ+00mb2d/AmKi/Q7kLPFSAZjNLYego5w+gkiCCA5Yj4TBtwnwCPkup8FmKsBq1BDcSTiaCmE6bh1Fk0sdZ7pUzDkIoDMSSbV4/xxj5t2ODYZrDx8Qw4OLAkZRMg3EI+XJsH17G0BDCHcQngOFU8o1HYMDS0JgIRREoawHVuimEnrWnKArQhfZaOSINEE8nwha6BI6kDWVGAWILaAFw4boM4cB12UVEMV8pw757cO3PN/k96Msc6TigBXhrgwg40PAqBwlNB8m3c4rBWka+PGe59oQhCdRE4ZSjpRKeCz33B7RzAVuf/5st+X86fLRrocZSqST5bFgEmuLP1cxMGy3UgBsYDDLH4nxWY8ALTUNE80xtZrLgaShji439tlJOnJ7gaNNhNldaWGirhmkYiJHwEGkoxy17eiITnEZiBpwWdZ/oH9NhODAN5X+cx1MTnEpecQJLnoCjPIDsw9ywKb9QJpVhr4rYg245hnhzrSKxOMqJmeipZDLKoTFEIAsWAdlm2FFOiAPtoCTsShmjA42c12Exl0EW8gzqqVCg5lLLQGBvGEk7bYx46hs6n/E+WhfwSXeU3it8NIBFc4MQahX/GJSDn+QV5UPNz+AGTDecC8PoGMnqWj7JAMb5WAdiSW+D8suatmjSmq3y0+UftcvPa2re8OpjNeyb2UruSxejgQ2gA2tEgpnQ8slBKAPQe6wig8TvQvfEIVAOCfVezphTFRtF6CblZtEyx8aCwpzvFCPXcBI9Mc+BgnkFZ9Lm6/GbPpc2HTaQwaRcg/KDtgySazd8q8jZG8+G1pf1sMIhbS7aAjF3BjgXkCd9JG1T9pvqgxyTNi9o5yXcyAfs12iLnJbpT35ddCvnwM7qixOsWiby23HmY6jMXAb59nOndnbcCotklzlDGlo/UCMIzFrOCPCdUGwEWvFyJqocYDB4pP1HHoi3KZMBtyG827S2gqXx+UTs9e9JCxLvFLPJSj45GUvedgCHz6QPw1zdPXGlUrYz2cf+3ERuH+S8gJwBZ1RpYKJlzOkZ+b3sfPmGvgsgpALKqEddC2dAs3W5KUy9dec9bVmKzBUahNhzunzW/i7HVoVlD8g1xETGGK2j0ZnaYeNhqsu7xuhvGM0mwOCg5uu7NDJKaYiB6NPbCapn4307TUGFE79XMFqte+AsSJYsLv+egI0LKgtjWIQCM5JnhmUfKiD1CWYwYW3MOakKDhtTCLqFLp3TWVH3gLHP2XAXhcKoWZGUN6E2qXdkmtbGSJz1M/3+kglVuM98PocYD1FyNSocPlN4qbOWzm8ZHN/R2ilupu3sJvpnTYVrxcP8tKkh1NG0FIA0QKrHXFM6pRq0KPKn1hO8PudxoaaaY2t/y7UWLuhECR2f2ygDTiBduLAHPPdUlGpXcMVy/PkanqxJDT3ycDlmMoeFX0uIUy5QyTalo946jejprzzRagaDz1l92vIdEiacNysZWrHVyESpGEfkw1qHW0Ypn4vzBddP15+OTq1BTdj+XXTMIqN8zqcjW1lL8pkEjOo7eczWDqJ/MRLRUCsZT3olDXBsdSAXHJxJ8DTw1kK05le8IQ7zSsue6xi1HkMYS9r9QGcE+s10bo008w2ZIfLEil+fyL9JgK4wK93kSCOoPhGj2PtJoZfFwFxWtK6DMqAzHdSFKHGkzyhX+eLw14pkPD+LiwRB9NpykNCPGfmZAfkIMxonNJqu+3eaOlTdhehhCZwsfxJvZg0zbef5IAK5rAxQ8oxfporvfEbnNPotWa9iju9w8h0K9BUQZ9JsIdQPrCgTarHGUX6xVBXVooIjKP5raON81kBQzTPH+FYWKWfw+FnJDglxMPjSA3f1wRl+3s/U48lHT/27WpjIcQPcJw4T+AlsFp5Yfm1Mn+m27LNv0vOJMB8eeFS8z7Kxi246j2Ds/rReGWEhLxOi+VtNF5rLUYmi+FqCxajHhUa/NSAdx2/r16dzkr6l/KieEW45D/dkBrrUVV5R/1dVzEmmdBCAnWRShmuLh6pvReE5maW8/jB/R/hQbvLtClNf+sjPaM+KvVtyKHn9QVeebe+aL+f0LPj57fb9jq0dcL/ASrIwWxqzmWKYzXROlcqqhM9lsgR+AdbacPaV+Uveg0KjVpyM5BkJjsiYb/2wpVKsrEzOyyr7QkKnM2gPWRaYZWIhS3CVuZPJKtpgALO8D2AUopwIw/OxrKXXP9MAbFhkiZ8lsn2A5cceXuIqqFzedQ/7yCLL61QqYNY3IiWMB/g0mKVy2MI4nHNmlhjZn9dcjA5mwtmGYfrE8AHDwIHIji54N8COWUKUQlEdxGkBn1FKZaAi+SITtHwwDC9fAhb5VOGisy8NrzJICZkqiU2lbUnLSxbiUVEsChWrgihcF2464BACIFlYs9LVd85T6mG8liUqXoyQUkBuvX5vgVKld8uKWig9WjOJpaShft6wwmKZRM2/19HrDris62QmOwpVcsxFAFKIq8HBQNKpzwkZK/oZ5pguVRWFg+iTCoZjM+OmOkHldXTrNQcaaz5sBR8kc6TeNwhWCwp3FG8rTzPoN8yyEoagXmmMOBINmHN9NHpK3Vl/0rTklfGOZWUZuDtqu4MaL8VylZqQERRH6vAljCyi2ORzSW+EXBbDTVV0ZUVy7MkMkEVeeJLfEmGdJO6Sw7Pe9ElHmvUPOdNS0DHm+JYz4xLjTn0eMtdkrgqXSXVy7gYVqCoWkHRgpwELHmvYxxSx9Qyo61qDFkQMltlg9sByUi3fi44OCyNmcPLFUyZjybj800PeTaNO4tgTaxiGb6Y+EznAaqVA6LYOwvcT35IDft5EViLnow7GxCxbpSRjsq6DIO7ZPpTy5T8twpIOCHPqWmuYaYkmnOXH1mWBoB0wZWUiZPl3MhVH7Gxi2ASefY6EZ4lea55rzVlSLPtS2AXNMKvELBNlgKfOkJmV6BjyqTqb8B4ZGKthX9Ns+QiZbSQAZlajSXaa8JVpt4G9VR+2ILH17Line truncated
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"labels = [\n",
" f\"{results.names[class_id]} {confidence:0.2f}\"\n",
@@ -433,54 +454,31 @@
"annotated_frame = bounding_box_annotator.annotate(annotated_frame, detections)\n",
"annotated_frame = label_annotator.annotate(annotated_frame, detections, labels)\n",
"sv.plot_image(annotated_frame, (12, 12))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 560
},
"id": "lIYQULBI3Tf3",
"outputId": "8cd8d367-9003-4ac8-d62e-d81d38d2faeb"
},
"execution_count": 12,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
],
"image/png": "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 truncated
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"## Define Line Position"
],
"metadata": {
"id": "WZHe1xq_633e"
}
},
"source": [
"## Define Line Position"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iniUELOr5hZ_"
},
"source": [
"To set the position of `sv.LineZone`, we need to define the `start` and `end` points. The position of each point is defined as a pair of coordinates `(x, y)`. The origin of the coordinate system is located in the top-left corner of the frame. The `x` axis runs from left to right, and the `y` axis runs from top to bottom.\n",
"\n",
"I decided to place my line horizontally, at the midpoint of the frame's height. I obtained the full dimensions of the frame using [`sv.VideoInfo`](https://supervision.roboflow.com/develop/utils/video/#supervision.utils.video.VideoInfo).\n"
],
"metadata": {
"id": "iniUELOr5hZ_"
}
]
},
{
"cell_type": "code",
"source": [
"sv.VideoInfo.from_video_path(SOURCE_VIDEO_PATH)"
],
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -488,31 +486,54 @@
"id": "pqwq-1OYihyB",
"outputId": "3c74086d-7c1c-42f9-b8dc-25dc74b2e35a"
},
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"VideoInfo(width=3840, height=2160, fps=25, total_frames=538)"
]
},
"execution_count": 14,
"metadata": {},
"execution_count": 14
"output_type": "execute_result"
}
],
"source": [
"sv.VideoInfo.from_video_path(SOURCE_VIDEO_PATH)"
]
},
{
"cell_type": "markdown",
"source": [
"The line we've created, together with the `in_count` and `out_count`, can be elegantly visualized using [`sv.LineZoneAnnotator`](https://supervision.roboflow.com/latest/detection/tools/line_zone/#supervision.detection.line_zone.LineZoneAnnotator). This tool also allows for extensive customization options; we can alter the color of both the line and the text, opt to hide the in/out counts, and adjust the labels. By default, the labels are set to `in` and `out`, but they can be tailored to fit the context of our project, providing a clear and intuitive display of object movement across the designated line."
],
"metadata": {
"id": "WBavHZsdijjR"
}
},
"source": [
"The line we've created, together with the `in_count` and `out_count`, can be elegantly visualized using [`sv.LineZoneAnnotator`](https://supervision.roboflow.com/latest/detection/tools/line_zone/#supervision.detection.line_zone.LineZoneAnnotator). This tool also allows for extensive customization options; we can alter the color of both the line and the text, opt to hide the in/out counts, and adjust the labels. By default, the labels are set to `in` and `out`, but they can be tailored to fit the context of our project, providing a clear and intuitive display of object movement across the designated line."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 560
},
"id": "gqdGQABx7BzA",
"outputId": "42bb2e1c-ab6c-4e3d-b286-d78f0a959d7c"
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"START = sv.Point(0, 1500)\n",
"END = sv.Point(3840, 1500)\n",
@@ -527,82 +548,66 @@
"annotated_frame = frame.copy()\n",
"annotated_frame = line_zone_annotator.annotate(annotated_frame, line_counter=line_zone)\n",
"sv.plot_image(annotated_frame, (12, 12))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 560
},
"id": "gqdGQABx7BzA",
"outputId": "42bb2e1c-ab6c-4e3d-b286-d78f0a959d7c"
},
"execution_count": 22,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
],
"image/png": "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 truncated
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"## Process Video"
],
"metadata": {
"id": "2Mq56vXt8H9b"
}
},
"source": [
"## Process Video"
]
},
{
"cell_type": "code",
"source": [
"byte_tracker = sv.ByteTrack()"
],
"execution_count": 18,
"metadata": {
"id": "ayaocyX28ykm"
},
"execution_count": 18,
"outputs": []
"outputs": [],
"source": [
"byte_tracker = sv.ByteTrack()"
]
},
{
"cell_type": "markdown",
"source": [
"For an even better visualization, we will add another annotator - `sv.TraceAnnotator`, which allows for drawing the path traversed by each object over the last few frames. We will use it in combination with `sv.BoundingBoxAnnotator` and `sv.LabelAnnotator`, which we became familiar with earlier."
],
"metadata": {
"id": "UJwZ8KVSln-_"
}
},
"source": [
"For an even better visualization, we will add another annotator - `sv.TraceAnnotator`, which allows for drawing the path traversed by each object over the last few frames. We will use it in combination with `sv.BoundingBoxAnnotator` and `sv.LabelAnnotator`, which we became familiar with earlier."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"id": "WpKDAJny9n3D"
},
"outputs": [],
"source": [
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=4)\n",
"label_annotator = sv.LabelAnnotator(text_thickness=4, text_scale=2)\n",
"trace_annotator = sv.TraceAnnotator(thickness=4)"
],
"metadata": {
"id": "WpKDAJny9n3D"
},
"execution_count": 17,
"outputs": []
]
},
{
"cell_type": "markdown",
"source": [
"All the operations we plan to perform for each frame of our video - detection, tracking, annotation, and counting - are encapsulated in a function named `callback`."
],
"metadata": {
"id": "8_slr3hrlX20"
}
},
"source": [
"All the operations we plan to perform for each frame of our video - detection, tracking, annotation, and counting - are encapsulated in a function named `callback`."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"id": "-Qs07-Ml-ETD"
},
"outputs": [],
"source": [
"def callback(frame: np.ndarray, index:int) -> np.ndarray:\n",
" results = model(frame, verbose=False)[0]\n",
@@ -630,50 +635,48 @@
" line_zone.trigger(detections)\n",
"\n",
" return line_zone_annotator.annotate(annotated_frame, line_counter=line_zone)"
],
"metadata": {
"id": "-Qs07-Ml-ETD"
},
"execution_count": 19,
"outputs": []
]
},
{
"cell_type": "markdown",
"source": [
"Finally, we are ready to process our entire video. We will use [`sv.process_video`](https://supervision.roboflow.com/develop/utils/video/#supervision.utils.video.process_video) and pass to it the previously defined `SOURCE_VIDEO_PATH`, `TARGET_VIDEO_PATH`, and `callback`."
],
"metadata": {
"id": "h8ip4Nmm5Gcm"
}
},
"source": [
"Finally, we are ready to process our entire video. We will use [`sv.process_video`](https://supervision.roboflow.com/develop/utils/video/#supervision.utils.video.process_video) and pass to it the previously defined `SOURCE_VIDEO_PATH`, `TARGET_VIDEO_PATH`, and `callback`."
]
},
{
"cell_type": "code",
"source": [
"TARGET_VIDEO_PATH = f\"{HOME}/count-objects-crossing-the-line-result.mp4\""
],
"execution_count": 21,
"metadata": {
"id": "2RHSS5hAmlnd"
},
"execution_count": 21,
"outputs": []
"outputs": [],
"source": [
"TARGET_VIDEO_PATH = f\"{HOME}/count-objects-crossing-the-line-result.mp4\""
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"id": "a7F5Ij-Q-TWx"
},
"outputs": [],
"source": [
"sv.process_video(\n",
" source_path = SOURCE_VIDEO_PATH,\n",
" target_path = TARGET_VIDEO_PATH,\n",
" callback=callback\n",
")"
],
"metadata": {
"id": "a7F5Ij-Q-TWx"
},
"execution_count": 20,
"outputs": []
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Oxc4X5S7ffEw"
},
"source": [
" Keep in mind that the video preview below works only in the web version of the cookbooks and not in Google Colab.\n",
"\n",
@@ -683,10 +686,7 @@
" type=\"video/mp4\"\n",
" >\n",
"</video>"
],
"metadata": {
"id": "Oxc4X5S7ffEw"
}
]
}
],
"metadata": {
@@ -1,23 +1,10 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"gpuType": "T4"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "pviK1VFFNp8h"
},
"source": [
"# Evaluating Alignment of Text-to-image Diffusion Models\n",
"\n",
@@ -26,32 +13,29 @@
"[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow/supervision/blob/develop/docs/notebooks/evaluating-alignment-of-text-to-image-diffusion-models.ipynb)\n",
"\n",
"Click the `Open in Colab` button to run the cookbook on Google Colab."
],
"metadata": {
"id": "pviK1VFFNp8h"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FtZXoFjPt569"
},
"source": [
"## Introduction\n",
"\n",
"It is a common scenario to evaluate text-to-image models for its alignment to the prompt. One way to test it is to use a set of prompts, consisting of number of objects and their basic physical properties (e.g. color), to generate images and manually evaluate the results. This process can be greatly improved using object detection models."
],
"metadata": {
"id": "FtZXoFjPt569"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1yOkAwH-UYPM"
},
"source": [
"## Before you start\n",
"\n",
"Let's make sure that we have access to GPU. We can use `nvidia-smi` command to do that. In case of any problems navigate to `Edit` -> `Notebook settings` -> `Hardware accelerator`, set it to `GPU`, and then click `Save`."
],
"metadata": {
"id": "1yOkAwH-UYPM"
}
]
},
{
"cell_type": "code",
@@ -65,8 +49,8 @@
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Thu Feb 29 18:16:26 2024 \n",
"+---------------------------------------------------------------------------------------+\n",
@@ -97,6 +81,9 @@
},
{
"cell_type": "markdown",
"metadata": {
"id": "xg5JFGa4UjZq"
},
"source": [
"## Install required packages\n",
"\n",
@@ -104,33 +91,35 @@
"* [diffusers](https://huggingface.co/docs/diffusers/en/index) for image generation pipelines,\n",
"* [inference](https://inference.roboflow.com/) for running object detection,\n",
"* [supervision](https://supervision.roboflow.com/) for visualizing detections."
],
"metadata": {
"id": "xg5JFGa4UjZq"
}
]
},
{
"cell_type": "code",
"source": [
"!pip install -q torch diffusers accelerate inference-gpu[yolo-world] dill git+https://github.com/openai/CLIP.git supervision==0.19.0rc5"
],
"execution_count": null,
"metadata": {
"id": "ri8GPZ3SD7LT"
},
"execution_count": null,
"outputs": []
"outputs": [],
"source": [
"!pip install -q torch diffusers accelerate inference-gpu[yolo-world] dill git+https://github.com/openai/CLIP.git supervision==0.19.0rc5"
]
},
{
"cell_type": "markdown",
"source": [
"## Imports"
],
"metadata": {
"id": "U0qBpU5YU3P9"
}
},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "sBKUQMdwJTv1"
},
"outputs": [],
"source": [
"import itertools\n",
"import cv2\n",
@@ -140,26 +129,26 @@
"import supervision as sv\n",
"import torch\n",
"from inference.models import YOLOWorld"
],
"metadata": {
"id": "sBKUQMdwJTv1"
},
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZzEhndAyU_EF"
},
"source": [
"## Generating an image\n",
"\n",
"We'll use [SDXL](https://huggingface.co/docs/diffusers/using-diffusers/sdxl) model to generate our image. Let's initialize our pipeline first:"
],
"metadata": {
"id": "ZzEhndAyU_EF"
}
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "qCwxwGcuEHJ-"
},
"outputs": [],
"source": [
"pipeline = StableDiffusionXLPipeline.from_pretrained(\n",
" \"stabilityai/stable-diffusion-xl-base-1.0\",\n",
@@ -167,39 +156,20 @@
" variant=\"fp16\",\n",
" use_safetensors=True,\n",
").to(\"cuda\")"
],
"metadata": {
"id": "qCwxwGcuEHJ-"
},
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "markdown",
"source": [
"In this example, we'll focus on generating an image of a black cat playing with a blue ball next to a parked white car. We don't care about the aesthetic aspect of the image."
],
"metadata": {
"id": "XrQ8ose0Vm-T"
}
},
"source": [
"In this example, we'll focus on generating an image of a black cat playing with a blue ball next to a parked white car. We don't care about the aesthetic aspect of the image."
]
},
{
"cell_type": "code",
"source": [
"PROMPT = \"a black cat playing with a blue ball next to a parked white car, wide angle, photorealistic\"\n",
"NEGATIVE_PROMPT = \"low quality, blurred, text, illustration\"\n",
"WIDTH, HEIGHT = 1024, 768\n",
"SEED = 9213799\n",
"\n",
"image = pipeline(\n",
" prompt=PROMPT,\n",
" negative_prompt=NEGATIVE_PROMPT,\n",
" generator=torch.manual_seed(SEED),\n",
" width=WIDTH,\n",
" height=HEIGHT,\n",
").images[0]\n",
"image"
],
"execution_count": 41,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -221,83 +191,92 @@
"id": "TaWaIpjQERtf",
"outputId": "236e6107-b50f-4eb8-8db8-234519245264"
},
"execution_count": 41,
"outputs": [
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "80345cfe8a724651a287a20078218742",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/50 [00:00<?, ?it/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "80345cfe8a724651a287a20078218742"
}
},
"metadata": {}
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<PIL.Image.Image image mode=RGB size=1024x768>"
],
"image/png": "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 truncated
]
},
"metadata": {},
"execution_count": 41
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<PIL.Image.Image image mode=RGB size=1024x768>"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"PROMPT = \"a black cat playing with a blue ball next to a parked white car, wide angle, photorealistic\"\n",
"NEGATIVE_PROMPT = \"low quality, blurred, text, illustration\"\n",
"WIDTH, HEIGHT = 1024, 768\n",
"SEED = 9213799\n",
"\n",
"image = pipeline(\n",
" prompt=PROMPT,\n",
" negative_prompt=NEGATIVE_PROMPT,\n",
" generator=torch.manual_seed(SEED),\n",
" width=WIDTH,\n",
" height=HEIGHT,\n",
").images[0]\n",
"image"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wKuyU-GDXPhr"
},
"source": [
"Not bad! The results seem to be well-aligned with the prompt.\n",
"\n",
"## Detecting objects\n",
"\n",
"Now, let's see how can we detect the objects automatically. For this, we'll use [YOLO-World](https://inference.roboflow.com/) model from `inference` library."
],
"metadata": {
"id": "wKuyU-GDXPhr"
}
]
},
{
"cell_type": "code",
"source": [
"model = YOLOWorld(model_id=\"yolo_world/l\")"
],
"execution_count": 42,
"metadata": {
"id": "R9pERjDkGIlN"
},
"execution_count": 42,
"outputs": []
"outputs": [],
"source": [
"model = YOLOWorld(model_id=\"yolo_world/l\")"
]
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "G0PlnmZckOCH"
}
},
"source": []
},
{
"cell_type": "markdown",
"source": [
"YOLO-World model allows us to [define our own set of labels](https://docs.ultralytics.com/models/yolo-world/#set-prompts). Let's create it by combining lists of pre-defined colors and objects."
],
"metadata": {
"id": "VOxtES_qaoWe"
}
},
"source": [
"YOLO-World model allows us to [define our own set of labels](https://docs.ultralytics.com/models/yolo-world/#set-prompts). Let's create it by combining lists of pre-defined colors and objects."
]
},
{
"cell_type": "code",
"source": [
"COLORS = [\"green\", \"yellow\", \"black\", \"blue\", \"red\", \"white\", \"orange\"]\n",
"OBJECTS = [\"car\", \"cat\", \"ball\", \"dog\", \"tree\", \"house\", \"person\"]\n",
"CLASSES = [f\"{color} {obj}\" for color, obj in itertools.product(COLORS, OBJECTS)]\n",
"print(\"Number of labels:\", len(CLASSES))"
],
"execution_count": 43,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -305,116 +284,114 @@
"id": "SkY3TI4JHmkj",
"outputId": "253a95a8-0c32-403a-db63-82e529de2eba"
},
"execution_count": 43,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Number of labels: 49\n"
]
}
],
"source": [
"COLORS = [\"green\", \"yellow\", \"black\", \"blue\", \"red\", \"white\", \"orange\"]\n",
"OBJECTS = [\"car\", \"cat\", \"ball\", \"dog\", \"tree\", \"house\", \"person\"]\n",
"CLASSES = [f\"{color} {obj}\" for color, obj in itertools.product(COLORS, OBJECTS)]\n",
"print(\"Number of labels:\", len(CLASSES))"
]
},
{
"cell_type": "markdown",
"source": [
"Let's feed these labels into our model:"
],
"metadata": {
"id": "by_NYnqkoET-"
}
},
"source": [
"Let's feed these labels into our model:"
]
},
{
"cell_type": "code",
"source": [
"model.set_classes(CLASSES)"
],
"execution_count": 44,
"metadata": {
"id": "oinXZU3YWZqw"
},
"execution_count": 44,
"outputs": []
"outputs": [],
"source": [
"model.set_classes(CLASSES)"
]
},
{
"cell_type": "markdown",
"source": [
"Time to detect some objects!"
],
"metadata": {
"id": "RTHHpRsFoJsk"
}
},
"source": [
"Time to detect some objects!"
]
},
{
"cell_type": "code",
"source": [
"results = model.infer(image)"
],
"execution_count": 45,
"metadata": {
"id": "zDPd-LOqGLHJ"
},
"execution_count": 45,
"outputs": []
"outputs": [],
"source": [
"results = model.infer(image)"
]
},
{
"cell_type": "markdown",
"source": [
"We'll convert the results to the [sv.Detections](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections) format to enable features like filtering or annotations."
],
"metadata": {
"id": "TGCRxUpeu8Vi"
}
},
"source": [
"We'll convert the results to the [sv.Detections](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections) format to enable features like filtering or annotations."
]
},
{
"cell_type": "code",
"source": [
"detections = sv.Detections.from_inference(results)"
],
"execution_count": 46,
"metadata": {
"id": "GWbmFKscvUhU"
},
"execution_count": 46,
"outputs": []
"outputs": [],
"source": [
"detections = sv.Detections.from_inference(results)"
]
},
{
"cell_type": "markdown",
"source": [
"Speaking of which: we only care about strong detections, so we filter out ones that are below 0.6 confidence."
],
"metadata": {
"id": "AscEY8SioQQ7"
}
},
"source": [
"Speaking of which: we only care about strong detections, so we filter out ones that are below 0.6 confidence."
]
},
{
"cell_type": "code",
"source": [
"valid_detections = detections[detections.confidence >= 0.6]"
],
"execution_count": 47,
"metadata": {
"id": "f2fvqc8lWxGT"
},
"execution_count": 47,
"outputs": []
"outputs": [],
"source": [
"valid_detections = detections[detections.confidence >= 0.6]"
]
},
{
"cell_type": "markdown",
"source": [
"A quick peek on the detected labels and their score:"
],
"metadata": {
"id": "klstslXPop-9"
}
},
"source": [
"A quick peek on the detected labels and their score:"
]
},
{
"cell_type": "code",
"source": [
"labels = [\n",
" f\"{CLASSES[class_id]} {confidence:0.2f}\"\n",
" for class_id, confidence\n",
" in zip(valid_detections.class_id, valid_detections.confidence)\n",
"]\n",
"labels"
],
"execution_count": 48,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -422,62 +399,64 @@
"id": "0jbyOEGdGOhd",
"outputId": "a7a90eb0-d829-40d3-8090-151e2c735d8c"
},
"execution_count": 48,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['blue ball 0.95', 'black cat 0.72', 'white car 0.68']"
]
},
"execution_count": 48,
"metadata": {},
"execution_count": 48
"output_type": "execute_result"
}
],
"source": [
"labels = [\n",
" f\"{CLASSES[class_id]} {confidence:0.2f}\"\n",
" for class_id, confidence\n",
" in zip(valid_detections.class_id, valid_detections.confidence)\n",
"]\n",
"labels"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GOccbqMDo2Ec"
},
"source": [
"## Visualizing results\n",
"\n",
"Now, let's use the power of `supervision` to visualize them. Our output image is in [Pillow](https://pillow.readthedocs.io/en/stable/index.html) format, but annotators can accept the image to be a BGR `np.ndarray` or pillow's `PIL.Image.Image`.\n",
"\n",
"Time to define how we want our detections to be visualized. A combination of [sv.BoundingBoxAnnotator](https://supervision.roboflow.com/latest/annotators/#supervision.annotators.core.BoundingBoxAnnotator) and [sv.LabelAnnotator](https://supervision.roboflow.com/latest/annotators/#supervision.annotators.core.LabelAnnotator) should be perfect."
],
"metadata": {
"id": "GOccbqMDo2Ec"
}
"Time to define how we want our detections to be visualized. A combination of [sv.BoundingBoxAnnotator](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.BoundingBoxAnnotator) and [sv.LabelAnnotator](https://supervision.roboflow.com/latest/detection/annotators/#supervision.annotators.core.LabelAnnotator) should be perfect."
]
},
{
"cell_type": "code",
"source": [
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=2)\n",
"label_annotator = sv.LabelAnnotator(text_thickness=1, text_scale=0.5,text_color=sv.Color.BLACK)"
],
"execution_count": 49,
"metadata": {
"id": "X9HMMnTppp-c"
},
"execution_count": 49,
"outputs": []
"outputs": [],
"source": [
"bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=2)\n",
"label_annotator = sv.LabelAnnotator(text_thickness=1, text_scale=0.5,text_color=sv.Color.BLACK)"
]
},
{
"cell_type": "markdown",
"source": [
"Finally, annotating our image is as simple as calling `annotate` methods from our annotators:"
],
"metadata": {
"id": "u3y59TgWp4Fx"
}
},
"source": [
"Finally, annotating our image is as simple as calling `annotate` methods from our annotators:"
]
},
{
"cell_type": "code",
"source": [
"annotated_image = bounding_box_annotator.annotate(image, valid_detections)\n",
"annotated_image = label_annotator.annotate(annotated_image, valid_detections, labels)\n",
"\n",
"sv.plot_image(annotated_image, (12, 12))"
],
"execution_count": 50,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
@@ -486,39 +465,39 @@
"id": "UdDEwjhoIiHo",
"outputId": "c56bd631-653c-4fd6-cc41-653abc49b0e7"
},
"execution_count": 50,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"annotated_image = bounding_box_annotator.annotate(image, valid_detections)\n",
"annotated_image = label_annotator.annotate(annotated_image, valid_detections, labels)\n",
"\n",
"sv.plot_image(annotated_image, (12, 12))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "kl5kO59CquMq"
},
"source": [
"## Testing it automatically\n",
"\n",
"We can also test if all requested objects are in the generated image by comparing a set of ground-truth labels with predicted ones:"
],
"metadata": {
"id": "kl5kO59CquMq"
}
]
},
{
"cell_type": "code",
"source": [
"GROUND_TRUTH = {\"black cat\", \"blue ball\", \"white car\"}\n",
"prediction = {CLASSES[class_id] for class_id in valid_detections.class_id}\n",
"\n",
"prediction.issubset(GROUND_TRUTH)"
],
"execution_count": 51,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -526,41 +505,62 @@
"id": "laJS1E76qynK",
"outputId": "de193606-b41a-445d-8107-de02218190bd"
},
"execution_count": 51,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"True"
]
},
"execution_count": 51,
"metadata": {},
"execution_count": 51
"output_type": "execute_result"
}
],
"source": [
"GROUND_TRUTH = {\"black cat\", \"blue ball\", \"white car\"}\n",
"prediction = {CLASSES[class_id] for class_id in valid_detections.class_id}\n",
"\n",
"prediction.issubset(GROUND_TRUTH)"
]
},
{
"cell_type": "markdown",
"source": [
"Using [sv.Detections](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections) makes it super easy to do."
],
"metadata": {
"id": "8L4lXpvFvxZR"
}
},
"source": [
"Using [sv.Detections](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections) makes it super easy to do."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "j2GgYtNGqYmY"
},
"source": [
"## Next steps\n",
"\n",
"In this tutorial you learned how to detect and visualize objects for a simple image generation evaluation study.\n",
"\n",
"Having a pipeline capable of evaluating a single image, the natural next step should be to run it on a set of pre-defined scenarios and calculate metrics."
],
"metadata": {
"id": "j2GgYtNGqYmY"
}
]
}
]
],
"metadata": {
"accelerator": "GPU",
"colab": {
"gpuType": "T4",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
+6 -6
View File
@@ -12,7 +12,7 @@
"\n",
"[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/roboflow/supervision/blob/develop/docs/notebooks/object-tracking.ipynb)\n",
"\n",
"In some cases, it's important for us to track objects across multiple frames of a video. For example, we may need to figure out the direction a vehicle is moving, or count objects in a frame. Some Supervision [Annotators](https://supervision.roboflow.com/latest/annotators/) and Tools like [LineZone](https://supervision.roboflow.com/latest/detection/tools/line_zone/) require tracking to be setup. In this cookbook, we'll cover how to get a tracker up and running for use in your computer vision applications.\n",
"In some cases, it's important for us to track objects across multiple frames of a video. For example, we may need to figure out the direction a vehicle is moving, or count objects in a frame. Some Supervision [Annotators](https://supervision.roboflow.com/latest/detection/annotators/) and Tools like [LineZone](https://supervision.roboflow.com/latest/detection/tools/line_zone/) require tracking to be setup. In this cookbook, we'll cover how to get a tracker up and running for use in your computer vision applications.\n",
"\n",
"## What is a Tracker?\n",
"\n",
@@ -45,8 +45,8 @@
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Fri Feb 23 03:18:02 2024 \n",
"+---------------------------------------------------------------------------------------+\n",
@@ -160,14 +160,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1200x1200 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
+94 -94
View File
@@ -71,16 +71,16 @@
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "1Pwtk-9CQWsH",
"outputId": "c8a33db4-f95e-49db-c080-6ac431f84e3a",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"id": "1Pwtk-9CQWsH",
"outputId": "c8a33db4-f95e-49db-c080-6ac431f84e3a"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Wed Jul 17 14:51:30 2024 \n",
"+---------------------------------------------------------------------------------------+\n",
@@ -122,16 +122,16 @@
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "dwGOFWdJnr3T",
"outputId": "b121cc01-3a8b-4847-8e3d-80808ab36bea",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"id": "dwGOFWdJnr3T",
"outputId": "b121cc01-3a8b-4847-8e3d-80808ab36bea"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"/content\n"
]
@@ -185,8 +185,8 @@
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"/content/images\n"
]
@@ -218,16 +218,16 @@
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "Lo8hLtZ2LPWp",
"outputId": "18c43a29-fa01-4d29-9e84-3411d2924b0c",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"id": "Lo8hLtZ2LPWp",
"outputId": "18c43a29-fa01-4d29-9e84-3411d2924b0c"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m0.0/135.7 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m135.7/135.7 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h0.22.0\n"
@@ -265,7 +265,7 @@
"source": [
"## \ud83d\udd0c Plug in your model\n",
"\n",
"**NOTE:** In our example, we will focus only on integration with YOLO-NAS and YOLOv8. However, keep in mind that supervision allows seamless integration with many other models like SAM, Transformers, and YOLOv5. You can learn more from our [documentation](https://roboflow.github.io/supervision/detection/core/#detections)."
"**NOTE:** In our example, we will focus only on integration with YOLO-NAS and YOLOv8. However, keep in mind that supervision allows seamless integration with many other models like SAM, Transformers, and YOLOv5. You can learn more from our [documentation](https://supervision.roboflow.com/latest/detection/core/#supervision.detection.core.Detections)."
]
},
{
@@ -320,89 +320,89 @@
},
{
"cell_type": "code",
"source": [
"\"detections\", len(detections)"
],
"execution_count": 9,
"metadata": {
"id": "0laYCojABX8I",
"outputId": "c72e9f77-311a-451e-907f-ebcac738884f",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"id": "0laYCojABX8I",
"outputId": "c72e9f77-311a-451e-907f-ebcac738884f"
},
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"('detections', 4)"
]
},
"execution_count": 9,
"metadata": {},
"execution_count": 9
"output_type": "execute_result"
}
],
"source": [
"\"detections\", len(detections)"
]
},
{
"cell_type": "markdown",
"source": [
"### Inference [\ud83d\udcda](https://roboflow.github.io/supervision/detection/core/#supervision.detection.core.Detections.from_inference)"
],
"metadata": {
"id": "-G8T5ShwC5PL"
}
},
"source": [
"### Inference [\ud83d\udcda](https://roboflow.github.io/supervision/detection/core/#supervision.detection.core.Detections.from_inference)"
]
},
{
"cell_type": "code",
"source": [
"!pip install -q inference"
],
"execution_count": null,
"metadata": {
"id": "YbSD9YkGDMJh"
},
"execution_count": null,
"outputs": []
"outputs": [],
"source": [
"!pip install -q inference"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "MkA6CzVNDikG"
},
"outputs": [],
"source": [
"from inference import get_model\n",
"\n",
"model = get_model(model_id=\"yolov8s-640\")\n",
"result = model.infer(image)[0]\n",
"detections = sv.Detections.from_inference(result)"
],
"metadata": {
"id": "MkA6CzVNDikG"
},
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "code",
"source": [
"\"detections\", len(detections)"
],
"execution_count": 12,
"metadata": {
"id": "A0y7n3meD8gE",
"outputId": "bf9443cf-84ab-4775-c997-0d196b538f06",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"id": "A0y7n3meD8gE",
"outputId": "bf9443cf-84ab-4775-c997-0d196b538f06"
},
"execution_count": 12,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"('detections', 4)"
]
},
"execution_count": 12,
"metadata": {},
"execution_count": 12
"output_type": "execute_result"
}
],
"source": [
"\"detections\", len(detections)"
]
},
{
@@ -445,22 +445,22 @@
"cell_type": "code",
"execution_count": 15,
"metadata": {
"id": "jdOW9a0P30ar",
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "jdOW9a0P30ar",
"outputId": "2171b154-a579-4e20-ea23-ca9179cbee78"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"('detections', 7)"
]
},
"execution_count": 15,
"metadata": {},
"execution_count": 15
"output_type": "execute_result"
}
],
"source": [
@@ -487,18 +487,18 @@
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "8gg8C_7rQ_9F"
},
"outputs": [],
"source": [
"from ultralytics import YOLO\n",
"\n",
"model = YOLO(\"yolov8x.pt\")\n",
"result = model(image, verbose=False)[0]\n",
"detections = sv.Detections.from_ultralytics(result)"
],
"metadata": {
"id": "8gg8C_7rQ_9F"
},
"execution_count": null,
"outputs": []
]
},
{
"cell_type": "code",
@@ -513,14 +513,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 800x800 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@@ -556,14 +556,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAJ8CAYAAADeVEuCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9Wa9lSZYmhn3LbO8z3MGHCPfIjIwcKmvK7gLVBEkIVFMkKAEUQEB8kP6ABOhX6E3/Qm/SG18kQRAEUgKkhgSJIER1F1Vd3ayBnUNlZWRkjD7d6Qx7my09LFs2bdvnnnvdPYZst0yPe+85e9ts31rrs2XLiJkZ79K79C69S+/SdyaZb7oC79K79C69S+/S3dI74H6X3qV36V36jqV3wP0uvUvv0rv0HUvvgPtdepfepXfpO5beAfe79C69S+/Sdyy9A+536V16l96l71h6B9zv0rv0Lr1L37H0DrjfpXfpXXqXvmPpHXC/S+/Su/QufcdSd+yD/8v/zT8t/vbeg4gAAIYInUkyQA9jdl0Hay2MBfRr/Y6Z4z8/OgAAEcV/1loYY2AMYI1BKApEBGNMLJvDP+89mBnOOXjv498MAkCxbkQEZsY4jhhHh8EB3qf39JlWqg+ZskeRd/EdACbAI7V38kBVt0NltVLsgzsefr3L82/iYO20P9ttlq88QufEJPPAwBKhCyNa553PnTwxc5wL+TOt5+t39T356QDysT90Dmrd6vzqedwqM85/DGCzB8ZzWH+CDpe4ufhr/N3P/yl+/fNf4Acf/gkevP8TvLq4wvV2jwfvPcWHP/oxnnzwIWy/gOeyx/K1lY+f/j2OY1HPvL51+70jMBMAhmQlPzUvawFj2n1pjYljWfeNMSaMoy/GOK8nmGCMje8558K6HSfjmbeFmePS0rXtHMM7bQMB5MDsIo5Za9F1HbquC3VjGFOOU2uO5GXmuFSPQ94H3qW5VeBg+Ox/9T//x7gtHQ3c91nAWhkQwAwQTRujzymg5mVJJxgwewDTiXWfVHSiMcCYwPpN5P8uHZMOzKVqnpEhEHSBTl+t507xbvi8nm/63bTo9jMyVywACnMRTcDO/9XA3qpDLAcWwAIMBpkd3HCJlxdf4cuvnuPhw+/hxz/5Gd7/8Ke42e1xvd3h5OwBVmcPYLoFnA8L60CqlaUWWLcASdoNEOuw6NrRvwlEXORfABdU6SqFVdnXZd2KZ6rnFdjqdtVtMcaAwfCclEtkdVMB4TMsUOC2NgiKMM552TqfWljRUiBaQlOFSmvO3gV/3jpwixbMoKyyqtkC4TN5uPjMew/nHIikobU0u0+qpZt3Hr6SiO9Ct7ztdLh/a+7OADAEGFD4bn7htsauBQj6+zHzSRe1WAKA90ljtNZOnp3TwGdBmwiAhR8NiD2MucR2+ALPnn2KYQR+/KOf4fHTn6A7PcfD8w4PyMDDgsnCAXDMMByskAPNyef+Mdp2bA8BIApatkrO9J4IsmkfU0B3IlPkl9dHPpsqc7GvGGBk6zWzpOt89PecBQABzgWrib2YwEHYkCHAJ20+atraF0SgrN8UuHWetca+Fty1th0tP1AE7/umo4H7PimZPAwmROnsvQ/jL52IfLCRGikmnQVZcxSgNp8Jg58/o3mPzgNsirLnFn/779cQJA3t8a7pOytkiCfjkrQhkkUHyLyRX0DwMl90TdfaWTBV83QIqA9pwHmd4pw0pvgsN+3z/OtF2yp30mZ0MKYH8RXc8AzPn/0aL18+w6P3PsSjpz/B4ux9cNcHSkS0f6VHOJY9zb9u65yGOqd1h8rFeZo07USPALZp7jNzBN26T5NGndZ+ywpXUz0H7rkxEwXRpXHJWEhmH/4BBANmEkXAEJin23zMDFP1Zz3PWpbLIZqk/Lvd33dZz28MuFvglipGSGMkpi+DwZ7hwegMRY281py892Az7ZTcBHLVoJaaTnpHv9dnDRH4Fo3oTaW2af5Wi/x2J1KuWiQYEWCMRWdEWyo0lECTzInJ3IKrNSFgqlHqWItFN8+N67vGmKA9lhRJK++W5j/3dywbDAuCwR5X11/ii88+BtjgyZMf4fHTj8DdEh7CBjMYcE5EmdIXFATcQQYqaY0AJoJH6zP5O6xbqbPsGUWNEWm95pa0/m6I4MkXfZSP1W2JMKVX9P1in6sCSGkngmbNMBawTMFagtA/gYLL35+lNpDGtS4z19Jrjr7OLwq1rJ9a5RyT3hpw5w1sLYpcKoOSWM8lWv1sXk7afESUxnm5qSKSdT1x5F2azPW87NvaeEyaG4jbsnodaXxbept5z5URSgr/cgBR85VgjWxo2YDShkh4ympz+VC9j9GiDz2fA3IOSAaA6e62uZmX0dJ4TdTiPcAD9vtXePblJ3j17AU+ePpH+P6HP8Xi9Ax7Fssw11AJDBM3DKeY3dZg5ymiObqEg1DVosOqDuDN8D6VYYyBc65aoz62ddJfKPneXLDE0vk466jGB3gRaNBNRmsCmJuwYWwjTVMLk+bMbWBQXW7LmiocJfQZNpN36/xuS28EuBVA60rXpkH5TqYNey+cE1AMsDT4FvBGMhdbqZ6MqpFJfgDIZBpFKqsWBDrh37Zm/vufVLPQRWQCZUbojEVvIMANgA3D+3qCl2bqIe32kPZSa1J50jlYaEE09UoxFX3SWoitek0/8/B+g5cvPscXn/0O6+UZvvfBT3B69j68BYgZ7HxYNEGb1I1SZjgm+Ibn1Jzy0xI2pZVa96H+rW1UBJ96yGiKmjGVZRT9TBS9zfI6J7ppHhhbaSqU1WNEQNt4mXPG2LRBmW06HkqHgHvucwVt51zxfbJkpjTM1wrcwLyVFk0steUYQNXBujPehQ6NeQVOLYJzKCkJVZbNRX08o09SFsHGZinDZGWzZ5CnCPyeM1OOEqEneQS+7dYW3zfx9K/fAxlRggVF7pECx2iMkcUNgjW5CUygIPQ9B/OSqNC+D4FhbdqmOqD4/pAGWlAJ1DZlb6NJwjcgsuBAeDBJuwgWhi3gHTZXv8UXn/4GNzcOP/zoj3H+3kegfoX94MDkYBAUjriG8lURgCBuHKZFI6Z5mMrZ2ksgUW4g1n0pj2vb01rW76TNbdDhsOakepmmptooM4iNtipaxkTB48OnsubrV1pGUbsHAk+t1hxkbxJGPF0Mhb02RvRag7b1dos0Kp0sVoe1YWKz0L/sGWNwMWbPcT+HQCDDgS4ulV4O9T0mHQ3cB7UXlBgjnUb6IpQS8T4slIycjwsaFiArtAkDZAwMM0A++ENrkyjtNDe0CM4mB0EBQIFQvjMQosuTB5lQLwAg2USNHQkAPtMWCCDO/IwP9nFphdSJSJobn64nKE8LmNMyv4l0LBc3eS/udhlYGNgwPgQvjhtkM+2RAGPBzoHJpPHL6Kw5E1/TMX1V0x5tKsQH4DpeQyppncBRGw8mj950MB4wDnC7G1y/+AVePPsMJ+c/wPq9n8KvH2JHBEM24DAFWpESCAdByCwus4qTCVQg/stefLGJREgqoHsvmqC1833IxTzUvahSi2+Z+grAMNlKoPS5zvfR+fiZ8P0IgsaLsOapVdCyJGqqxRoLsAntztxJIQJIgZ1JNyIZgIBsLtzyfZY0pqQoC+8A9h6GbABiYWmcl7apZa+UEhFglH4CIoZJ/cyxuP12vUry1BrkmIpJk3dwWjRA0oZz3ijnz+bKjZpHVX7iWcXNy4DgiQVIKEPwbyBFLf/3LpVjrVaMrJ3cbSulqBnXOd2RulIf7LgIjVIeCmoUwO84n/5jQVu0Wl2sCxAzyIsSwHyN6+vP8cUXXwLo8PR7P8Dj955kmiwSWEN/1kJhKlD0pwA6TcAn06vunYgo+kJzAUA6LqqUIf6e2iEHYpD5WufCkkPjdQNU13i++VwDd6n4TDXnuu75zzy/PLU+E8W4zHscx/Q8BUHLSUDVNFLNgeftPyZ97cCtv+fJVXxyvjuLsBHCwZZS6TWOqi1YeK9mG5ADv5pfedm1D3khwaGgHUCBNJNvIFEy3oBvh5b9NpJaQqwUmOdivanWA4gVhnoRTXjNqWAuSqPclQ0FKFBwbZt/v8rtWOAmgMjDsAGjA7EF8Qj4S+y3X+HLL3+BF6+u8ejJ9/H4/afoFgvABC06q7parlQDErfXl/adcxRpDqUOcu3zLqkGSdX+a+COfRAEj9I5KoR04zIq4w1NmsJabvnG5xt+taeJMSa4bx5nbVlrJ2XniuEEvKu1qe8556AjVGvt+nv6mQO3Q8KttwjctaZT0xX6mT6Xd3IrpQnmJp+DAEsGRLlvrB7D1QMRSQDK2hbEZbVdGlI550CjqQadY5mt+Q2B52RxfofTHAB6n0gRpdIAmcTAFIRVC6u/mytjosGQAFjtzhe+mvVeydOhOdwsM7ZGtQmCYYIBww83uHz5CZ598fdYrh7j+x/+FGcPHoGNAVPgd4FI9UUNLpCTueJRg3UObiXVkbcx1StvV+3VlbdxspY5vd8SepzL4QDkzMK7H9KMiAiGhI9O4S/KTeNaUy1Oq5KBHppqjWU9Xnl/1Y4JeT8rVTKrMFSKfl7XNFZ5nwHel9bZMelOwF03JK9YC7zzdBD0qvwKrTiaW2Vj099JM5e/w2ZHmEgGnL2XftcBjqXEceZm390dtCkqGse+P13wtwuNQ2NxdE3vpLXeLU2BLAcCH08ierB4T2RjO6lDQLKpSS6p5Zdc8JvkA2Ux9YZI5ZauWikzjv63x7c1fiP19gz2ezARrBmx3Vzg2WefwI8OTz/8IR48+gCmW8KThfehzmH/RTfO6/YSTbXgvP7SV/ln8+uTOR1ias2p3KyXD+U/aQ221pnJfgdqzhiNuar92FlbgHZpiUvy3k8EsfYLNeZD0yrIyszbV/dpPr9aVFX6LnXPHJ2nnDeznF+469q9N1WSd8LraqKEtokSJ49PcQUkaIwPAWN4Mg/lhF36m7ONAKA9wYgAcNr05Line truncated
"text/plain": [
"<Figure size 800x800 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@@ -594,18 +594,18 @@
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"id": "yM6dmicTRGl6"
},
"outputs": [],
"source": [
"from ultralytics import YOLO\n",
"\n",
"model = YOLO(\"yolov8x-seg.pt\")\n",
"result = model(image, verbose=False)[0]\n",
"detections = sv.Detections.from_ultralytics(result)"
],
"metadata": {
"id": "yM6dmicTRGl6"
},
"execution_count": 33,
"outputs": []
]
},
{
"cell_type": "code",
@@ -620,14 +620,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 800x800 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@@ -685,14 +685,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIQCAYAAAC1yPLfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9eYBlRXn//X2qzr3dPT09C9DDNjqMo5FFkYi4gMqmIAoIaAgSBFEEBQVMjJoYA7hG0YhiUFF/4DuKCxpB4wKoGHGNBlBEjSiLsg8Ms/V276l63j+eqjp1zj23+3ZP96z1QE/3PbdOrU996p7nPvUUMTMjSZIkSZIkSZIkSZIkSZIk2UpFbe4KJEmSJEmSJEmSJEmSJEmSJBsj6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt28SD7YUXXggiwiOPPDKn5RxyyCE45JBDtvg8N5UQES688MLNXY0ZyZbS70QUfj74wQ/OKI/99tsv5HH00UfPcg2T1ElizvSlyosrr7wSRIS77757k9dlOvKDH/wARIQf/OAHm7sqM5ItgdO+D/3PL3/5y/DeIYccst3wa82aNV2Zf/7554fr8+fP34y13LIksXb2pY5pr3rVq7DHHntstjrNVLaWdaRO7r77bhARrrzyys1aD9+H/mc259o111zTlf1zJdvEg22SrUvuv/9+XHjhhbj11lvntJzf/va3uPDCC7d44B1//PFYuXIlXvKSl5SuW2vxgQ98AMuXL0d/fz/23XdffOELX+i4/73vfS9WrlyJnXbaaVNVOUmSzSKjo6O48MILt5qHzJ/85Ce48MILsWbNmjkt51vf+tZmf3jtRf75n/8ZK1euxBOe8ITS9T333BMrV67Em9/85o57vv71r+PpT386+vv78fjHPx4XXHAB8jyfcR2uv/56vOY1r8FTnvIUaK1n5cP81772NRx55JHYbbfd0NfXh6VLl+LlL385fvOb35TSDQ4OYuXKlfjwhz/ckccrX/lKrFy5Es973vM2uj5JkiSZWjYVN6+66ipccsklc17OxsqHP/xhrFy5EkNDQ5OmGx0dxX/8x3/giCOOwK677oqhoSH89V//NT7+8Y/DGFNK+4xnPAMrV67EmWeeOZdVL0l6sJ2GXH/99bj++us3dzW2ern//vtx0UUXbZIH24suuqj2wXZLGst9990Xp5xyCvbaa6/S9be//e1461vfihe+8IW49NJL8fjHPx4nn3wyvvjFL5bSvfjFL8Ypp5yCwcHBTVntJJtAtiQ9nW155StfibGxMSxbtqzne0ZHR3HRRRdtVQ+2F1100SZ5sL3oootq3xsbG8O//Mu/zGn5vcoLX/hCnHLKKdhhhx1K13feeWeccsopHd9uffvb38Zxxx2HRYsW4dJLL8Vxxx2Hd7/73XjjG9844zpcddVVuOqqq7Bw4ULstttuM84nlttuuw2LFy/Geeedh8suuwyvf/3rccstt+CZz3wmfvWrX4V0jUYDp5xyCo477riOPPbff3+ccsopHQ/9STaNbMus7UU+9alP4f/+7/82dzU2qUzGzdmUbg+2y5Ytw9jYGF75ylfOeR16keOOOw6nnHIK+vr6Jk1355134o1vfCOYGX//93+PD37wg1i+fDnOPvtsvPrVry6lXbp0KU455RQ85znPmcuqlyTbZCVtA9JsNjd3FZLMkmzpY3nffffhQx/6EM455xx87GMfAwCcccYZOPjgg/GP//iP+Ju/+RtorTdzLZPMtWzperoxorVOOrwJpL+/f3NXYcby5je/Gfvuuy+uv/56ZJl8XFmwYAHe+9734rzzzsOee+457Tzf+9734lOf+hQajQaOPvrojm9VZyL/+q//2nHtjDPOwNKlS/Hxj38cn/jEJza6jCRzK9sya3uRRqOxuauw3QkRbZV83mWXXXDbbbdhn332CdfOOussvPrVr8YVV1yBd7zjHXjiE5+42eq3TX1j+8gjj+DEE0/EggULsOOOO+K8887D+Ph4eP/ggw/G0572tNp7n/zkJ+PII4+cNP/qfgm/T+HLX/4y3vOe92Dp0qXo7+/H4Ycfjj/+8Y8d919++eVYsWIFBgYG8MxnPhM33XRTbTkTExO44IIL8MQnPhF9fX143OMeh7e85S2YmJgIaU477TT09/fjd7/7XeneI488EosXL8b9998/aVumIxMTE3jTm96E4eFhDA0N4dhjj8W9995bm/a+++7Dq1/9auy8887o6+vDPvvsg//3//5feP8HP/gBDjjgAADA6aefHvzu4z0GP//5z/GiF70ICxcuxLx583DwwQfjxz/+cW1Zr3nNa4L71/Lly/H6178erVYLV155Jf7mb/4GAHDooYeGcvw3PXV7Xx5++GG85jWvwc4774z+/n487WlPw2c/+9lSGr8n4oMf/GAYz76+PhxwwAH4xS9+UUr74IMP4vTTT8fSpUvR19eHXXfdFS996Ut7co2+9tpr0W63cfbZZ4drRITXv/71uPfee/HTn/50yjySzL0k5sycOXV7o375y1/iyCOPxE477YSBgQEsX748WIDvvvtuDA8PAwAuuuiiMKdn05Xs3nvvxXHHHYfBwUEsWbIEb3rTm0p9EMtUnLrwwgvxj//4jwCA5cuXh/rG7f3c5z6H/fffHwMDA9hhhx1w0kkn4S9/+UttWS9+8YuxePFiDA4OYt9998VHPvIRALI37j/+4z8AlPfse6nro1tuuQVHHXUUFixYgPnz5+Pwww/Hz372s1IaPz4//vGP8fd///cYHh7G4OAgjj/+eKxataqUdrJxm6n89re/xW9/+1uceeaZ4aEWAM4++2wwM77yla/MKN/ddtttk3yIX7JkCebNmzfn39ZvL5JY2ztrv/jFL2L//ffH0NAQFixYgKc+9amBF92kbo+ttRYf+chH8NSnPhX9/f0YHh7Gi170oo59kr1ybGPl9ttvx2GHHYaBgQEsXboU7373u2GtrU377W9/G8973vMwODiIoaEhvOQlL8Htt99eau9k3LTW4pJLLsE+++yD/v5+7LzzzjjrrLPw2GOP1ZZ18MEHh/4+4IADcNVVVwEQvfrmN7+Je+65J5Th+7nbHtvvf//7oe6LFi3CS1/60g5d8HvP//jHP+JVr3oVFi1ahIULF+L000/H6OhoKe0NN9yA5z73uVi0aBHmz5+PJz/5yfjnf/7nnvp8dHQUv//970v7bnfaaafSQ62X448/HgA66rqpZZv6xvbEE0/EHnvsgfe973342c9+ho9+9KN47LHH8P/9f/8fAHF9e+1rX4vf/OY3eMpTnhLu+8UvfoE//OEPM3bX+rd/+zcopfDmN78Za9euxQc+8AH83d/9HX7+85+HNJ/5zGdw1lln4cADD8T555+PO++8E8ceeyx22GEHPO5xjwvprLU49thj8aMf/Qhnnnkm9tprL9x222348Ic/jD/84Q+45pprAAAf+chH8P3vfx+nnXYafvrTn0JrjU9+8pO4/vrrsXLlyllzsQLE8vy5z30OJ598Mg488EB8//vf79gPCgAPPfQQnv3sZ4OI8IY3vAHDw8P49re/jde85jVYt24dzj//fOy111545zvfiX/913/FmWeeGfYTHXjggQBkQh911FHYf//9ccEFF0AphSuuuAKHHXYYbrrpJjzzmc8EIO7Mz3zmM7FmzRqceeaZ2HPPPXHffffhK1/5CkZHR/H85z8f5557Lj760Y/in//5n4Obb9Xd18vY2BgOOeQQ/PGPf8Qb3vAGLF++HFdffTVe9apXYc2aNTjvvPNK6a+66iqsX78eZ511FogIH/jAB3DCCSfgzjvvDB+aXvayl+H222/HG9/4Ruyxxx54+OGHccMNN+DPf/7zlPu6brnlFgwODnbU17f/lltuwXOf+9xJ80gy95KYM3vMefjhh3HEEUdgeHgYb3vb27Bo0SLcfffd+M///E8AwPDwMD7+8Y/j9a9/PY4//niccMIJAMSVfzZkbGwMhx9+OP785z/j3HPPxW677YaVK1fi+9//fkfaXjh1wgkn4A9/+AO+8IUv4MMf/nDYA+8fzt/znvfgHe94B0488UScccYZWLVqFS699FI8//nPxy233IJFixYBkA8lRx99NHbddVecd9552GWXXfC73/0O//Vf/4XzzjsPZ511Fu6//37ccMMNWLly5ZTtvP322/G85z0PCxYswFve8hY0Gg188pOfxCGHHIL//u//xrOe9axS+je+8Y1YvHgxLrjgAtx999245JJL8IY3vAFf+tKXAEw9bjOVW265BYDs0Yplt912w9KlS8P7W5KsWbMG7XYbDz74IC655BKsW7cOhx9++Oau1jYhibW9sfaGG27AK17xChx++OF4//vfD0AeNH784x93fI6ZSl7zmtfgyiuvxFFHHYUzzjgDeZ7jpptuws9+9rMwL3vl2MbKgw8+iEMPPRR5nuNtb3sbBgcHcfnll2NgYKAj7cqVK3HaaafhyCOPxPvf/36Mjo7i4x//OJ773OfilltuwR577DElN8866yxceeWVOP3003Huuefirrvuwsc+9jHccsst+PGPfxw+51155ZV49atfjX322Qf/9E//hEWLFuGWW27Bd77zHZx88sl4+9vfjrVr1+Lee+8Ne+snCw733e9+F0cddRSe8IQn4MILL8TY2BguvfRSHHTQQbj55ps7PjueeOKJWL58Od73vvfh5ptvxqc//WksWbIkjP3tt9+Oo48+Gvvuuy/e+c53oq+vD3/84x9rvyyqk//5n//BoYceigsuuLine truncated
"text/plain": [
"<Figure size 1200x1200 with 3 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIQCAYAAAC1yPLfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9eYBlRXn//X2qzr3dPT09C9DDNjqMo5FFkYi4gMqmIAoIaAgSBFEEBQVMjJoYA7hG0YhiUFF/4DuKCxpB4wKoGHGNBlBEjSiLsg8Ms/V276l63j+eqjp1zj23+3ZP96z1QE/3PbdOrU996p7nPvUUMTMjSZIkSZIkSZIkSZIkSZIk2UpFbe4KJEmSJEmSJEmSJEmSJEmSJBsj6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt6cE2SZIkSZIkSZIkSZIkSZJs1ZIebJMkSZIkSZIkSZIkSZIkyVYt28SD7YUXXggiwiOPPDKn5RxyyCE45JBDtvg8N5UQES688MLNXY0ZyZbS70QUfj74wQ/OKI/99tsv5HH00UfPcg2T1ElizvSlyosrr7wSRIS77757k9dlOvKDH/wARIQf/OAHm7sqM5ItgdO+D/3PL3/5y/DeIYccst3wa82aNV2Zf/7554fr8+fP34y13LIksXb2pY5pr3rVq7DHHntstjrNVLaWdaRO7r77bhARrrzyys1aD9+H/mc259o111zTlf1zJdvEg22SrUvuv/9+XHjhhbj11lvntJzf/va3uPDCC7d44B1//PFYuXIlXvKSl5SuW2vxgQ98AMuXL0d/fz/23XdffOELX+i4/73vfS9WrlyJnXbaaVNVOUmSzSKjo6O48MILt5qHzJ/85Ce48MILsWbNmjkt51vf+tZmf3jtRf75n/8ZK1euxBOe8ITS9T333BMrV67Em9/85o57vv71r+PpT386+vv78fjHPx4XXHAB8jyfcR2uv/56vOY1r8FTnvIUaK1n5cP81772NRx55JHYbbfd0NfXh6VLl+LlL385fvOb35TSDQ4OYuXKlfjwhz/ckccrX/lKrFy5Es973vM2uj5JkiSZWjYVN6+66ipccsklc17OxsqHP/xhrFy5EkNDQ5OmGx0dxX/8x3/giCOOwK677oqhoSH89V//NT7+8Y/DGFNK+4xnPAMrV67EmWeeOZdVL0l6sJ2GXH/99bj++us3dzW2ern//vtx0UUXbZIH24suuqj2wXZLGst9990Xp5xyCvbaa6/S9be//e1461vfihe+8IW49NJL8fjHPx4nn3wyvvjFL5bSvfjFL8Ypp5yCwcHBTVntJJtAtiQ9nW155StfibGxMSxbtqzne0ZHR3HRRRdtVQ+2F1100SZ5sL3oootq3xsbG8O//Mu/zGn5vcoLX/hCnHLKKdhhhx1K13feeWeccsopHd9uffvb38Zxxx2HRYsW4dJLL8Vxxx2Hd7/73XjjG9844zpcddVVuOqqq7Bw4ULstttuM84nlttuuw2LFy/Geeedh8suuwyvf/3rccstt+CZz3wmfvWrX4V0jUYDp5xyCo477riOPPbff3+ccsopHQ/9STaNbMus7UU+9alP4f/+7/82dzU2qUzGzdmUbg+2y5Ytw9jYGF75ylfOeR16keOOOw6nnHIK+vr6Jk1355134o1vfCOYGX//93+PD37wg1i+fDnOPvtsvPrVry6lXbp0KU455RQ85znPmcuqlyTbZCVtA9JsNjd3FZLMkmzpY3nffffhQx/6EM455xx87GMfAwCcccYZOPjgg/GP//iP+Ju/+RtorTdzLZPMtWzperoxorVOOrwJpL+/f3NXYcby5je/Gfvuuy+uv/56ZJl8XFmwYAHe+9734rzzzsOee+457Tzf+9734lOf+hQajQaOPvrojm9VZyL/+q//2nHtjDPOwNKlS/Hxj38cn/jEJza6jCRzK9sya3uRRqOxuauw3QkRbZV83mWXXXDbbbdhn332CdfOOussvPrVr8YVV1yBd7zjHXjiE5+42eq3TX1j+8gjj+DEE0/EggULsOOOO+K8887D+Ph4eP/ggw/G0572tNp7n/zkJ+PII4+cNP/qfgm/T+HLX/4y3vOe92Dp0qXo7+/H4Ycfjj/+8Y8d919++eVYsWIFBgYG8MxnPhM33XRTbTkTExO44IIL8MQnPhF9fX143OMeh7e85S2YmJgIaU477TT09/fjd7/7XeneI488EosXL8b9998/aVumIxMTE3jTm96E4eFhDA0N4dhjj8W9995bm/a+++7Dq1/9auy8887o6+vDPvvsg//3//5feP8HP/gBDjjgAADA6aefHvzu4z0GP//5z/GiF70ICxcuxLx583DwwQfjxz/+cW1Zr3nNa4L71/Lly/H6178erVYLV155Jf7mb/4GAHDooYeGcvw3PXV7Xx5++GG85jWvwc4774z+/n487WlPw2c/+9lSGr8n4oMf/GAYz76+PhxwwAH4xS9+UUr74IMP4vTTT8fSpUvR19eHXXfdFS996Ut7co2+9tpr0W63cfbZZ4drRITXv/71uPfee/HTn/50yjySzL0k5sycOXV7o375y1/iyCOPxE477YSBgQEsX748WIDvvvtuDA8PAwAuuuiiMKdn05Xs3nvvxXHHHYfBwUEsWbIEb3rTm0p9EMtUnLrwwgvxj//4jwCA5cuXh/rG7f3c5z6H/fffHwMDA9hhhx1w0kkn4S9/+UttWS9+8YuxePFiDA4OYt9998VHPvIRALI37j/+4z8AlPfse6nro1tuuQVHHXUUFixYgPnz5+Pwww/Hz372s1IaPz4//vGP8fd///cYHh7G4OAgjj/+eKxataqUdrJxm6n89re/xW9/+1uceeaZ4aEWAM4++2wwM77yla/MKN/ddtttk3yIX7JkCebNmzfn39ZvL5JY2ztrv/jFL2L//ffH0NAQFixYgKc+9amBF92kbo+ttRYf+chH8NSnPhX9/f0YHh7Gi170oo59kr1ybGPl9ttvx2GHHYaBgQEsXboU7373u2GtrU377W9/G8973vMwODiIoaEhvOQlL8Htt99eau9k3LTW4pJLLsE+++yD/v5+7LzzzjjrrLPw2GOP1ZZ18MEHh/4+4IADcNVVVwEQvfrmN7+Je+65J5Th+7nbHtvvf//7oe6LFi3CS1/60g5d8HvP//jHP+JVr3oVFi1ahIULF+L000/H6OhoKe0NN9yA5z73uVi0aBHmz5+PJz/5yfjnf/7nnvp8dHQUv//970v7bnfaaafSQ62X448/HgA66rqpZZv6xvbEE0/EHnvsgfe973342c9+ho9+9KN47LHH8P/9f/8fAHF9e+1rX4vf/OY3eMpTnhLu+8UvfoE//OEPM3bX+rd/+zcopfDmN78Za9euxQc+8AH83d/9HX7+85+HNJ/5zGdw1lln4cADD8T555+PO++8E8ceeyx22GEHPO5xjwvprLU49thj8aMf/Qhnnnkm9tprL9x222348Ic/jD/84Q+45pprAAAf+chH8P3vfx+nnXYafvrTn0JrjU9+8pO4/vrrsXLlyllzsQLE8vy5z30OJ598Mg488EB8//vf79gPCgAPPfQQnv3sZ4OI8IY3vAHDw8P49re/jde85jVYt24dzj//fOy111545zvfiX/913/FmWeeGfYTHXjggQBkQh911FHYf//9ccEFF0AphSuuuAKHHXYYbrrpJjzzmc8EIO7Mz3zmM7FmzRqceeaZ2HPPPXHffffhK1/5CkZHR/H85z8f5557Lj760Y/in//5n4Obb9Xd18vY2BgOOeQQ/PGPf8Qb3vAGLF++HFdffTVe9apXYc2aNTjvvPNK6a+66iqsX78eZ511FogIH/jAB3DCCSfgzjvvDB+aXvayl+H222/HG9/4Ruyxxx54+OGHccMNN+DPf/7zlPu6brnlFgwODnbU17f/lltuwXOf+9xJ80gy95KYM3vMefjhh3HEEUdgeHgYb3vb27Bo0SLcfffd+M///E8AwPDwMD7+8Y/j9a9/PY4//niccMIJAMSVfzZkbGwMhx9+OP785z/j3HPPxW677YaVK1fi+9//fkfaXjh1wgkn4A9/+AO+8IUv4MMf/nDYA+8fzt/znvfgHe94B0488UScccYZWLVqFS699FI8//nPxy233IJFixYBkA8lRx99NHbddVecd9552GWXXfC73/0O//Vf/4XzzjsPZ511Fu6//37ccMMNWLly5ZTtvP322/G85z0PCxYswFve8hY0Gg188pOfxCGHHIL//u//xrOe9axS+je+8Y1YvHgxLrjgAtx999245JJL8IY3vAFf+tKXAEw9bjOVW265BYDs0Yplt912w9KlS8P7W5KsWbMG7XYbDz74IC655BKsW7cOhx9++Oau1jYhibW9sfaGG27AK17xChx++OF4//vfD0AeNH784x93fI6ZSl7zmtfgyiuvxFFHHYUzzjgDeZ7jpptuws9+9rMwL3vl2MbKgw8+iEMPPRR5nuNtb3sbBgcHcfnll2NgYKAj7cqVK3HaaafhyCOPxPvf/36Mjo7i4x//OJ773OfilltuwR577DElN8866yxceeWVOP3003Huuefirrvuwsc+9jHccsst+PGPfxw+51155ZV49atfjX322Qf/9E//hEWLFuGWW27Bd77zHZx88sl4+9vfjrVr1+Lee+8Ne+snCw733e9+F0cddRSe8IQn4MILL8TY2BguvfRSHHTQQbj55ps7PjueeOKJWL58Od73vvfh5ptvxqc//WksWbIkjP3tt9+Oo48+Gvvuuy/e+c53oq+vD3/84x9rvyyqk//5n//BoYceigsuuLine truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@@ -748,14 +748,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 800x800 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@@ -803,14 +803,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 800x800 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@@ -868,14 +868,14 @@
},
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 800x800 with 1 Axes>"
],
"image/png": "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 truncated
]
},
"metadata": {}
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@@ -1459,10 +1459,11 @@
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"provenance": [],
"gpuType": "L4",
"machine_shape": "hm",
"gpuType": "L4"
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
@@ -1470,8 +1471,7 @@
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
}
},
"nbformat": 4,
"nbformat_minor": 0
File diff suppressed because it is too large. Load diff
-18
View File
@@ -109,24 +109,6 @@ tests = ["B201", "B301", "B318", "B314", "B303", "B413", "B412", "B410"]
check = true
imports = ["cv2", "supervision"]
[tool.black]
target-version = ["py38"]
line-length = 88
include = '\.pyi?$'
exclude = '''
/(
\.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
| dist
| docs
)/
'''
[tool.ruff]
target-version = "py38"
+1 -1
View File
@@ -45,7 +45,7 @@ class Detections:
The `sv.Detections` class in the Supervision library standardizes results from
various object detection and segmentation models into a consistent format. This
class simplifies data manipulation and filtering, providing a uniform API for
integration with Supervision [trackers](/trackers/), [annotators](/detection/annotators/), and [tools](/detection/tools/line_zone/).
integration with Supervision [trackers](/trackers/), [annotators](/latest/detection/annotators/), and [tools](/detection/tools/line_zone/).
=== "Inference"
+4 -4
View File
@@ -18,11 +18,11 @@ class KeyPoints:
The `sv.KeyPoints` class in the Supervision library standardizes results from
various keypoint detection and pose estimation models into a consistent format. This
class simplifies data manipulation and filtering, providing a uniform API for
integration with Supervision [keypoints annotators](/keypoint/annotators).
integration with Supervision [keypoints annotators](/latest/keypoint/annotators).
=== "Ultralytics"
Use [`sv.KeyPoints.from_ultralytics`](/keypoint/core/#supervision.keypoint.core.KeyPoints.from_ultralytics)
Use [`sv.KeyPoints.from_ultralytics`](/latest/keypoint/core/#supervision.keypoint.core.KeyPoints.from_ultralytics)
method, which accepts [YOLOv8](https://github.com/ultralytics/ultralytics)
pose result.
@@ -40,7 +40,7 @@ class KeyPoints:
=== "Inference"
Use [`sv.KeyPoints.from_inference`](/keypoint/core/#supervision.keypoint.core.KeyPoints.from_inference)
Use [`sv.KeyPoints.from_inference`](/latest/keypoint/core/#supervision.keypoint.core.KeyPoints.from_inference)
method, which accepts [Inference](https://inference.roboflow.com/) pose result.
```python
@@ -57,7 +57,7 @@ class KeyPoints:
=== "MediaPipe"
Use [`sv.KeyPoints.from_mediapipe`](/keypoint/core/#supervision.keypoint.core.KeyPoints.from_mediapipe)
Use [`sv.KeyPoints.from_mediapipe`](/latest/keypoint/core/#supervision.keypoint.core.KeyPoints.from_mediapipe)
method, which accepts [MediaPipe](https://github.com/google-ai-edge/mediapipe)
pose result.