diff --git a/docs/changelog.md b/docs/changelog.md
index b9ceb893..39cf7f36 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -1,3 +1,136 @@
+### 0.23.0 Aug 28, 2024
+
+- 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.
+
+```python
+import supervision as sv
+from inference import get_model
+
+image =
+icon_dog =
+icon_cat =
+
+model = get_model(model_id="yolov8n-640")
+results = model.infer(image)[0]
+detections = sv.Detections.from_inference(results)
+
+icon_paths = []
+for class_name in detections.data["class_names"]:
+ if class_name == "dog":
+ icon_paths.append(icon_dog)
+ elif class_name == "cat":
+ icon_paths.append(icon_cat)
+ else:
+ icon_paths.append("")
+
+icon_annotator = sv.IconAnnotator()
+annotated_frame = icon_annotator.annotate(
+ scene=image.copy(),
+ detections=detections,
+ icon_path=icon_paths
+)
+```
+
+- Added [#1385](https://github.com/roboflow/supervision/pull/1385): `BackgroundColorAnnotator`, that draws an overlay on the background images of the detections.
+
+```python
+import supervision as sv
+from inference import get_model
+
+image =
+
+model = get_model(model_id="yolov8n-640")
+results = model.infer(image)[0]
+detections = sv.Detections.from_inference(results)
+
+background_overlay_annotator = sv.BackgroundOverlayAnnotator()
+annotated_frame = background_overlay_annotator.annotate(
+ scene=image.copy(),
+ detections=detections
+)
+```
+
+- Added [#1386](https://github.com/roboflow/supervision/pull/1386): Support for Transformers v5 functions in `sv.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
+import supervision as sv
+from PIL import Image
+from transformers import DetrImageProcessor, DetrForObjectDetection
+
+processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
+model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")
+
+image = Image.open()
+inputs = processor(images=image, return_tensors="pt")
+
+with torch.no_grad():
+ outputs = model(**inputs)
+
+width, height = image.size
+target_size = torch.tensor([[height, width]])
+results = processor.post_process_object_detection(
+ outputs=outputs, target_sizes=target_size)[0]
+detections = sv.Detections.from_transformers(
+ transformers_results=results,
+ id2label=model.config.id2label)
+```
+
+- Added [#1354](https://github.com/roboflow/supervision/pull/1354): Ultralytics SAM (Segment Anything Model) support in `sv.Detections.from_ultralytics`. SAM2 was released during this update, and is already supported via `sv.Detections.from_sam`.
+
+```python
+import supervision as sv
+from segment_anything import (
+ sam_model_registry,
+ SamAutomaticMaskGenerator
+)
+
+sam_model_reg = sam_model_registry[MODEL_TYPE]
+sam = sam_model_reg(checkpoint=CHECKPOINT_PATH).to(device=DEVICE)
+mask_generator = SamAutomaticMaskGenerator(sam)
+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` and `DotAnnotator`.
+
+- Added [#1409](https://github.com/roboflow/supervision/pull/1409): `text_color` option for `VertexLabelAnnotator` keypoint annotator.
+
+- Changed [#1434](https://github.com/roboflow/supervision/pull/1434): `InferenceSlicer` 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, addressing cases where traditional seek methods were failing. It can be enabled with `iterative_seek=True`.
+
+```python
+import supervision as sv
+
+for frame in sv.get_video_frames_generator(
+ source_path=,
+ start=60,
+ iterative_seek=True
+):
+ ...
+```
+
+- Fix [#1424](https://github.com/roboflow/supervision/pull/1424): `plot_image` function now clearly indicates that the size is in inches.
+
+!!! failure "Removed"
+
+ The `track_buffer`, `track_thresh`, and `match_thresh` parameters in [`ByteTrack`](trackers.md/#supervision.tracker.byte_tracker.core.ByteTrack) are deprecated and were removed as of `supervision-0.23.0`. Use `lost_track_buffer,` `track_activation_threshold`, and `minimum_matching_threshold` instead.
+
+!!! failure "Removed"
+
+ The `triggering_position ` parameter in [`sv.PolygonZone`](detection/tools/polygon_zone.md/#supervision.detection.tools.polygon_zone.PolygonZone) was removed as of `supervision-0.23.0`. Use `triggering_anchors ` instead.
+
+!!! failure "Deprecated"
+
+ `overlap_filter_strategy` in `InferenceSlicer.__init__` is deprecated and will be removed in `supervision-0.27.0`. Use `overlap_strategy` instead.
+
+!!! failure "Deprecated"
+
+ `overlap_ratio_wh` in `InferenceSlicer.__init__` is deprecated and will be removed in `supervision-0.27.0`. Use `overlap_wh` instead.
+
### 0.22.0 Jul 12, 2024
- 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).
@@ -360,7 +493,7 @@ annotated_frame = crop_annotator.annotate(
!!! failure "Deprecated"
- The `track_buffer`, `track_thresh`, and `match_thresh` parameters in `sv.ByterTrack` are deprecated and will be removed in `supervision-0.23.0`. Use `lost_track_buffer,` `track_activation_threshold`, and `minimum_matching_threshold` instead.
+ The `track_buffer`, `track_thresh`, and `match_thresh` parameters in `sv.ByteTrack` are deprecated and will be removed in `supervision-0.23.0`. Use `lost_track_buffer,` `track_activation_threshold`, and `minimum_matching_threshold` instead.
- Changed [#910](https://github.com/roboflow/supervision/pull/910): [`sv.PolygonZone`](/0.19.0/detection/tools/polygon_zone/#supervision.detection.tools.polygon_zone.PolygonZone) to now accept a list of specific box anchors that must be in zone for a detection to be counted.
diff --git a/docs/deprecated.md b/docs/deprecated.md
index 5f9de21d..0d2f456b 100644
--- a/docs/deprecated.md
+++ b/docs/deprecated.md
@@ -7,15 +7,24 @@ status: deprecated
These features are phased out due to better alternatives or potential issues in future versions. Deprecated functionalities are supported for **five subsequent releases**, providing time for users to transition to updated methods.
-- The `track_buffer`, `track_thresh`, and `match_thresh` parameters in [`ByterTrack`](trackers.md/#supervision.tracker.byte_tracker.core.ByteTrack) are deprecated and will be removed in `supervision-0.23.0`. Use `lost_track_buffer,` `track_activation_threshold`, and `minimum_matching_threshold` instead.
-- The `triggering_position ` parameter in [`sv.PolygonZone`](detection/tools/polygon_zone.md/#supervision.detection.tools.polygon_zone.PolygonZone) will be removed in `supervision-0.23.0`. Use `triggering_anchors ` instead.
- The `frame_resolution_wh ` parameter in [`sv.PolygonZone`](detection/tools/polygon_zone.md/#supervision.detection.tools.polygon_zone.PolygonZone) will be removed in `supervision-0.24.0`.
+
- Constructing `DetectionDataset` and `ClassificationDataset` with parameter `images` as `Dict[str, np.ndarray]` will be removed in `supervision-0.26.0`. Please pass a list of paths `List[str]` instead.
- The `DetectionDataset.images` property will be removed in `supervision-0.26.0`. Please loop over images with `for path, image, annotation in dataset:`, as that does not require loading all images into memory.
- `BoundingBoxAnnotator` has been renamed to `BoxAnnotator` after the old implementation of `BoxAnnotator` has been removed. `BoundingBoxAnnotator` will be removed in `supervision-0.26.0`.
+- `overlap_filter_strategy` in `InferenceSlicer.__init__` is deprecated and will be removed in `supervision-0.27.0`. Use `overlap_strategy` instead.
+- `overlap_ratio_wh` in `InferenceSlicer.__init__` is deprecated and will be removed in `supervision-0.27.0`. Use `overlap_wh` instead.
+
# Removed
+### 0.23.0
+
+- The `track_buffer`, `track_thresh`, and `match_thresh` parameters in [`ByteTrack`](trackers.md/#supervision.tracker.byte_tracker.core.ByteTrack) are deprecated and were removed as of `supervision-0.23.0`. Use `lost_track_buffer,` `track_activation_threshold`, and `minimum_matching_threshold` instead.
+- The `triggering_position ` parameter in [`sv.PolygonZone`](detection/tools/polygon_zone.md/#supervision.detection.tools.polygon_zone.PolygonZone) was removed as of `supervision-0.23.0`. Use `triggering_anchors ` instead.
+
+### 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.
- 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.
diff --git a/examples/heatmap_and_track/script.py b/examples/heatmap_and_track/script.py
index a4eb80b9..f2060dbb 100644
--- a/examples/heatmap_and_track/script.py
+++ b/examples/heatmap_and_track/script.py
@@ -20,9 +20,9 @@ def heatmap_and_track(
iou_threshold: float = 0.5,
heatmap_alpha: float = 0.5,
radius: int = 25,
- track_threshold: float = 0.35,
+ track_activation_threshold: float = 0.35,
track_seconds: int = 5,
- match_threshold: float = 0.99,
+ minimum_matching_threshold: float = 0.99,
) -> None:
### instantiate model
model = YOLO(source_weights_path)
@@ -47,9 +47,9 @@ def heatmap_and_track(
### tracker config
byte_tracker = sv.ByteTrack(
- track_thresh=track_threshold,
- track_buffer=track_seconds * fps,
- match_thresh=match_threshold,
+ track_activation_threshold=track_activation_threshold,
+ lost_track_buffer=track_seconds * fps,
+ minimum_matching_threshold=minimum_matching_threshold,
frame_rate=fps,
)
@@ -175,7 +175,7 @@ if __name__ == "__main__":
iou_threshold=args.iou_threshold,
heatmap_alpha=args.heatmap_alpha,
radius=args.radius,
- track_threshold=args.track_threshold,
+ track_activation_threshold=args.track_threshold,
track_seconds=args.track_seconds,
- match_threshold=args.match_threshold,
+ minimum_matching_threshold=args.match_threshold,
)
diff --git a/examples/speed_estimation/inference_example.py b/examples/speed_estimation/inference_example.py
index 78432dad..14edb886 100644
--- a/examples/speed_estimation/inference_example.py
+++ b/examples/speed_estimation/inference_example.py
@@ -95,7 +95,7 @@ if __name__ == "__main__":
model = get_roboflow_model(model_id=args.model_id, api_key=args.roboflow_api_key)
byte_track = sv.ByteTrack(
- frame_rate=video_info.fps, track_thresh=args.confidence_threshold
+ frame_rate=video_info.fps, track_activation_threshold=args.confidence_threshold
)
thickness = sv.calculate_optimal_line_thickness(
diff --git a/examples/speed_estimation/ultralytics_example.py b/examples/speed_estimation/ultralytics_example.py
index 170d918e..63a4c7ea 100644
--- a/examples/speed_estimation/ultralytics_example.py
+++ b/examples/speed_estimation/ultralytics_example.py
@@ -73,7 +73,7 @@ if __name__ == "__main__":
model = YOLO("yolov8x.pt")
byte_track = sv.ByteTrack(
- frame_rate=video_info.fps, track_thresh=args.confidence_threshold
+ frame_rate=video_info.fps, track_activation_threshold=args.confidence_threshold
)
thickness = sv.calculate_optimal_line_thickness(
diff --git a/examples/speed_estimation/yolo_nas_example.py b/examples/speed_estimation/yolo_nas_example.py
index f8eb46d5..e3593df7 100644
--- a/examples/speed_estimation/yolo_nas_example.py
+++ b/examples/speed_estimation/yolo_nas_example.py
@@ -74,7 +74,7 @@ if __name__ == "__main__":
model = models.get(Models.YOLO_NAS_L, pretrained_weights="coco")
byte_track = sv.ByteTrack(
- frame_rate=video_info.fps, track_thresh=args.confidence_threshold
+ frame_rate=video_info.fps, track_activation_threshold=args.confidence_threshold
)
thickness = sv.calculate_optimal_line_thickness(
diff --git a/supervision/detection/tools/polygon_zone.py b/supervision/detection/tools/polygon_zone.py
index c1e030f9..5f82cfd8 100644
--- a/supervision/detection/tools/polygon_zone.py
+++ b/supervision/detection/tools/polygon_zone.py
@@ -12,7 +12,7 @@ from supervision.draw.color import Color
from supervision.draw.utils import draw_polygon, draw_text
from supervision.geometry.core import Position
from supervision.geometry.utils import get_polygon_center
-from supervision.utils.internal import SupervisionWarnings, deprecated_parameter
+from supervision.utils.internal import SupervisionWarnings
class PolygonZone:
@@ -30,14 +30,6 @@ class PolygonZone:
mask (np.ndarray): The 2D bool mask for the polygon zone
"""
- @deprecated_parameter(
- old_parameter="triggering_position",
- new_parameter="triggering_anchors",
- map_function=lambda x: [x],
- warning_message="`{old_parameter}` in `{function_name}` is deprecated and will "
- "be remove in `supervision-0.23.0`. Use '{new_parameter}' "
- "instead.",
- )
def __init__(
self,
polygon: npt.NDArray[np.int64],
diff --git a/supervision/tracker/byte_tracker/core.py b/supervision/tracker/byte_tracker/core.py
index 4be3b184..89e1e2f2 100644
--- a/supervision/tracker/byte_tracker/core.py
+++ b/supervision/tracker/byte_tracker/core.py
@@ -7,7 +7,6 @@ from supervision.detection.utils import box_iou_batch
from supervision.tracker.byte_tracker import matching
from supervision.tracker.byte_tracker.basetrack import BaseTrack, TrackState
from supervision.tracker.byte_tracker.kalman_filter import KalmanFilter
-from supervision.utils.internal import deprecated_parameter
class STrack(BaseTrack):
@@ -215,30 +214,6 @@ class ByteTrack:
false detection or double detection, but risks missing shorter tracks.
""" # noqa: E501 // docs
- @deprecated_parameter(
- old_parameter="track_buffer",
- new_parameter="lost_track_buffer",
- map_function=lambda x: x,
- warning_message="`{old_parameter}` in `{function_name}` is deprecated and will "
- "be remove in `supervision-0.23.0`. Use '{new_parameter}' "
- "instead.",
- )
- @deprecated_parameter(
- old_parameter="track_thresh",
- new_parameter="track_activation_threshold",
- map_function=lambda x: x,
- warning_message="`{old_parameter}` in `{function_name}` is deprecated and will "
- "be remove in `supervision-0.23.0`. Use '{new_parameter}' "
- "instead.",
- )
- @deprecated_parameter(
- old_parameter="match_thresh",
- new_parameter="minimum_matching_threshold",
- map_function=lambda x: x,
- warning_message="`{old_parameter}` in `{function_name}` is deprecated and will "
- "be remove in `supervision-0.23.0`. Use '{new_parameter}' "
- "instead.",
- )
def __init__(
self,
track_activation_threshold: float = 0.25,