Skip to content

Core

Classifications

Source code in supervision/classification/core.py
28
29
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
@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
    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:
            Detections: 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)

    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
33
34
35
36
37
38
39
40
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_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
Detections 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
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
@classmethod
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:
        Detections: 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
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
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