Skip to content

Core

Classifications

Source code in supervision/classification/core.py
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
@dataclass
class Classifications:
    class_id: np.ndarray
    confidence: Optional[np.ndarray] = None

    def __post_init__(self) -> None:
        """
        Validate the classification inputs.
        """
        n = len(self.class_id)

        _validate_class_ids(self.class_id, n)
        _validate_confidence(self.confidence, n)

    @classmethod
    @deprecated(
        """
        This method is deprecated and removed in 0.16.0 release.
        Use sv.Classifications.from_ultralytics() instead as it is more generic and
        can be used for detections from any ultralytics.engine.results.Results Object
        """
    )
    def from_yolov8(cls, yolov8_results) -> Classifications:
        """
        Creates a Classifications instance from a
        [YOLOv8](https://github.com/ultralytics/ultralytics) inference result.

        Args:
            yolov8_results (ultralytics.yolo.engine.results.Results):
                The output Results instance from YOLOv8

        Returns:
            Classifications: A new Classifications object.

        Example:
            ```python
            >>> import cv2
            >>> from ultralytics import YOLO
            >>> import supervision as sv

            >>> image = cv2.imread(SOURCE_IMAGE_PATH)
            >>> model = YOLO('yolov8s-cls.pt')
            >>> result = model(image)[0]
            >>> classifications = sv.Classifications.from_yolov8(result)
            ```
        """
        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.engine.results.Results):
            The output Results instance from ultralytics model

        Returns:
            Classifications: A new Classifications object.

        Example:
            ```python
            >>> import cv2
            >>> from ultralytics import YOLO
            >>> import supervision as sv

            >>> image = cv2.imread(SOURCE_IMAGE_PATH)
            >>> model = YOLO('yolov8n-cls.pt')
            >>> model = YOLO('yolov8s-cls.pt')

            >>> result = model(image)[0]
            >>> classifications = sv.Classifications.from_ultralytics(result)
            ```
        """
        confidence = ultralytics_results.probs.data.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.

        Args:
            k (int): The number of top class IDs and confidences to retrieve.

        Returns:
            Tuple[np.ndarray, np.ndarray]: A tuple containing
                the top k class IDs and confidences.

        Example:
            ```python
            >>> import supervision as sv

            >>> classifications = sv.Classifications(...)

            >>> classifications.get_top_k(1)

            (array([1]), array([0.9]))
            ```
        """
        if self.confidence is None:
            raise ValueError("top_k could not be calculated, confidence is None")

        order = np.argsort(self.confidence)[::-1]
        top_k_order = order[:k]
        top_k_class_id = self.class_id[top_k_order]
        top_k_confidence = self.confidence[top_k_order]

        return top_k_class_id, top_k_confidence

__post_init__()

Validate the classification inputs.

Source code in supervision/classification/core.py
35
36
37
38
39
40
41
42
def __post_init__(self) -> None:
    """
    Validate the classification inputs.
    """
    n = len(self.class_id)

    _validate_class_ids(self.class_id, n)
    _validate_confidence(self.confidence, n)

from_ultralytics(ultralytics_results) classmethod

Creates a Classifications instance from a (https://github.com/ultralytics/ultralytics) inference result.

Parameters:

Name Type Description Default
ultralytics_results Results
required

Returns:

Name Type Description
Classifications Classifications

A new Classifications object.

Example
>>> import cv2
>>> from ultralytics import YOLO
>>> import supervision as sv

>>> image = cv2.imread(SOURCE_IMAGE_PATH)
>>> model = YOLO('yolov8n-cls.pt')
>>> model = YOLO('yolov8s-cls.pt')

>>> result = model(image)[0]
>>> classifications = sv.Classifications.from_ultralytics(result)
Source code in supervision/classification/core.py
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
@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.engine.results.Results):
        The output Results instance from ultralytics model

    Returns:
        Classifications: A new Classifications object.

    Example:
        ```python
        >>> import cv2
        >>> from ultralytics import YOLO
        >>> import supervision as sv

        >>> image = cv2.imread(SOURCE_IMAGE_PATH)
        >>> model = YOLO('yolov8n-cls.pt')
        >>> model = YOLO('yolov8s-cls.pt')

        >>> result = model(image)[0]
        >>> classifications = sv.Classifications.from_ultralytics(result)
        ```
    """
    confidence = ultralytics_results.probs.data.cpu().numpy()
    return cls(class_id=np.arange(confidence.shape[0]), confidence=confidence)

from_yolov8(yolov8_results) classmethod

Creates a Classifications instance from a YOLOv8 inference result.

Parameters:

Name Type Description Default
yolov8_results Results

The output Results instance from YOLOv8

required

Returns:

Name Type Description
Classifications Classifications

A new Classifications object.

Example
>>> import cv2
>>> from ultralytics import YOLO
>>> import supervision as sv

>>> image = cv2.imread(SOURCE_IMAGE_PATH)
>>> model = YOLO('yolov8s-cls.pt')
>>> result = model(image)[0]
>>> classifications = sv.Classifications.from_yolov8(result)
Source code in supervision/classification/core.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
@classmethod
@deprecated(
    """
    This method is deprecated and removed in 0.16.0 release.
    Use sv.Classifications.from_ultralytics() instead as it is more generic and
    can be used for detections from any ultralytics.engine.results.Results Object
    """
)
def from_yolov8(cls, yolov8_results) -> Classifications:
    """
    Creates a Classifications instance from a
    [YOLOv8](https://github.com/ultralytics/ultralytics) inference result.

    Args:
        yolov8_results (ultralytics.yolo.engine.results.Results):
            The output Results instance from YOLOv8

    Returns:
        Classifications: A new Classifications object.

    Example:
        ```python
        >>> import cv2
        >>> from ultralytics import YOLO
        >>> import supervision as sv

        >>> image = cv2.imread(SOURCE_IMAGE_PATH)
        >>> model = YOLO('yolov8s-cls.pt')
        >>> result = model(image)[0]
        >>> classifications = sv.Classifications.from_yolov8(result)
        ```
    """
    confidence = yolov8_results.probs.data.cpu().numpy()
    return cls(class_id=np.arange(confidence.shape[0]), confidence=confidence)

get_top_k(k)

Retrieve the top k class IDs and confidences, ordered in descending order by confidence.

Parameters:

Name Type Description Default
k int

The number of top class IDs and confidences to retrieve.

required

Returns:

Type Description
Tuple[ndarray, ndarray]

Tuple[np.ndarray, np.ndarray]: A tuple containing the top k class IDs and confidences.

Example
>>> import supervision as sv

>>> classifications = sv.Classifications(...)

>>> classifications.get_top_k(1)

(array([1]), array([0.9]))
Source code in supervision/classification/core.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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.

    Args:
        k (int): The number of top class IDs and confidences to retrieve.

    Returns:
        Tuple[np.ndarray, np.ndarray]: A tuple containing
            the top k class IDs and confidences.

    Example:
        ```python
        >>> import supervision as sv

        >>> classifications = sv.Classifications(...)

        >>> classifications.get_top_k(1)

        (array([1]), array([0.9]))
        ```
    """
    if self.confidence is None:
        raise ValueError("top_k could not be calculated, confidence is None")

    order = np.argsort(self.confidence)[::-1]
    top_k_order = order[:k]
    top_k_class_id = self.class_id[top_k_order]
    top_k_confidence = self.confidence[top_k_order]

    return top_k_class_id, top_k_confidence