File size: 1,482 Bytes
8d3e73e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32371f9
8d3e73e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import dataclasses
import enum
import logging
from typing import Any


class Status(enum.Enum):
    """Status Enum for the CV API."""

    UNKNOWN = 0
    SUCCESS = 1
    RUNNING = 2
    FAILURE = 3
    INVALID = 4


@dataclasses.dataclass
class DetectedObject:
    """Detected Object class."""

    name: str | None
    confidence: float = 0.0
    probability: float = 0.0
    confidence_of_all_obj: list[float] | None = dataclasses.field(default_factory=list)
    probability_of_all_obj: list[float] | None = dataclasses.field(default_factory=list)
    all_obj_detected: list[Any] | None = None
    number_of_detection: int = 0
    is_detected: bool | Status = Status.UNKNOWN
    model_name: str | None = None
    bounding_box_of_all_obj: list[Any] | None = None

    def __post_init__(self) -> None:
        """Post init."""
        if self.confidence_of_all_obj is not None and len(self.confidence_of_all_obj) > 0:
            self.confidence = max(self.confidence_of_all_obj)
        if self.probability_of_all_obj and len(self.probability_of_all_obj) > 0:
            self.probability = max(self.probability_of_all_obj)

    def get_probability(self) -> float:
        """Get probability."""
        if self.probability > 0:
            return self.probability
        if self.confidence > 0 and self.probability == 0:
            logging.info("Probability is not set, using confidence: %f", self.confidence)
            return self.confidence
        return self.probability