diff --git a/supervision/classification/core.py b/supervision/classification/core.py index 2f654b79..8ce20b36 100644 --- a/supervision/classification/core.py +++ b/supervision/classification/core.py @@ -5,6 +5,8 @@ from typing import Any, Optional, Tuple import numpy as np +from supervision.utils.internal import deprecated + def _validate_class_ids(class_id: Any, n: int) -> None: """ @@ -40,6 +42,9 @@ class Classifications: _validate_confidence(self.confidence, n) @classmethod + @deprecated( + "This method is deprecated and removed in 0.15.0 release. Use sv.Classifications.from_ultralytics() instead." + ) def from_yolov8(cls, yolov8_results) -> Classifications: """ Creates a Classifications instance from a [YOLOv8](https://github.com/ultralytics/ultralytics) inference result. @@ -48,7 +53,7 @@ class Classifications: yolov8_results (ultralytics.yolo.engine.results.Results): The output Results instance from YOLOv8 Returns: - Detections: A new Classifications object. + Classifications: A new Classifications object. Example: ```python @@ -65,6 +70,40 @@ class Classifications: confidence = yolov8_results.probs.data.cpu().numpy() return cls(class_id=np.arange(confidence.shape[0]), confidence=confidence) + @classmethod + def from_ultralytics(cls, ultralytics_results) -> Classifications: + """ + Creates a Classifications instance from a (https://github.com/ultralytics/ultralytics) inference result. + + Args: + ultralytics_results (ultralytics.yolo.engine.results.Results): The output Results instance from ultralytics model + + Returns: + Classifications: A new Classifications object. + + Example: + ```python + >>> import cv2 + >>> from ultralytics import YOLO, FastSAM, SAM, RTDETR + >>> import supervision as sv + + >>> image = cv2.imread(SOURCE_IMAGE_PATH) + >>> model = YOLO('yolov8s.pt') + >>> model = SAM('sam_b.pt') + >>> model = SAM('mobile_sam.pt') + >>> model = FastSAM('FastSAM-s.pt') + >>> model = RTDETR('rtdetr-l.pt') + + >>> result = model(image)[0] + >>> classifications = sv.Classifications.from_ultralytics(result) + ``` + """ + confidence = ultralytics_results.boxes.conf.cpu().numpy() + return cls(class_id=np.arange(confidence.shape[0]), confidence=confidence) + + + + def get_top_k(self, k: int) -> Tuple[np.ndarray, np.ndarray]: """ Retrieve the top k class IDs and confidences, ordered in descending order by confidence.