From bb4d741aff4d2390aad02a32c29d994ac10ebe96 Mon Sep 17 00:00:00 2001 From: Onuralp SEZER Date: Fri, 19 Jan 2024 00:29:46 +0300 Subject: [PATCH] =?UTF-8?q?feat(color.py):=20=E2=9C=A8=20add=20color=20con?= =?UTF-8?q?stants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds the WHITE, BLACK, RED, GREEN, and BLUE color constants to the Color class in color.py. These constants represent the corresponding colors in the RGB color space. Signed-off-by: Onuralp SEZER --- supervision/annotators/core.py | 2 +- supervision/detection/annotate.py | 2 +- supervision/detection/line_counter.py | 4 +- supervision/detection/tools/polygon_zone.py | 2 +- supervision/draw/color.py | 48 ++++++++++++++++----- supervision/draw/utils.py | 2 +- test/draw/test_color.py | 24 +++++------ 7 files changed, 56 insertions(+), 28 deletions(-) diff --git a/supervision/annotators/core.py b/supervision/annotators/core.py index fdfb9a58..9ae81c95 100644 --- a/supervision/annotators/core.py +++ b/supervision/annotators/core.py @@ -783,7 +783,7 @@ class LabelAnnotator: def __init__( self, color: Union[Color, ColorPalette] = ColorPalette.default(), - text_color: Color = Color.black(), + text_color: Color = Color.BLACK, text_scale: float = 0.5, text_thickness: int = 1, text_padding: int = 10, diff --git a/supervision/detection/annotate.py b/supervision/detection/annotate.py index 5e9b379a..1ab1bdc2 100644 --- a/supervision/detection/annotate.py +++ b/supervision/detection/annotate.py @@ -28,7 +28,7 @@ class BoxAnnotator: self, color: Union[Color, ColorPalette] = ColorPalette.default(), thickness: int = 2, - text_color: Color = Color.black(), + text_color: Color = Color.BLACK, text_scale: float = 0.5, text_thickness: int = 1, text_padding: int = 10, diff --git a/supervision/detection/line_counter.py b/supervision/detection/line_counter.py index 0b8a1321..8fd3de4c 100644 --- a/supervision/detection/line_counter.py +++ b/supervision/detection/line_counter.py @@ -166,9 +166,9 @@ class LineZoneAnnotator: def __init__( self, thickness: float = 2, - color: Color = Color.white(), + color: Color = Color.WHITE, text_thickness: float = 2, - text_color: Color = Color.black(), + text_color: Color = Color.BLACK, text_scale: float = 0.5, text_offset: float = 1.5, text_padding: int = 10, diff --git a/supervision/detection/tools/polygon_zone.py b/supervision/detection/tools/polygon_zone.py index 8e18d8bd..c6f5b80e 100644 --- a/supervision/detection/tools/polygon_zone.py +++ b/supervision/detection/tools/polygon_zone.py @@ -90,7 +90,7 @@ class PolygonZoneAnnotator: zone: PolygonZone, color: Color, thickness: int = 2, - text_color: Color = Color.black(), + text_color: Color = Color.BLACK, text_scale: float = 0.5, text_thickness: int = 1, text_padding: int = 10, diff --git a/supervision/draw/color.py b/supervision/draw/color.py index 9d1b4ad9..cac00130 100644 --- a/supervision/draw/color.py +++ b/supervision/draw/color.py @@ -47,6 +47,12 @@ class Color: g: int b: int + _WHITE = None + _BLACK = None + _RED = None + _GREEN = None + _BLUE = None + @classmethod def from_hex(cls, color_hex: str) -> Color: """ @@ -116,25 +122,40 @@ class Color: """ return self.b, self.g, self.r + @property @classmethod - def white(cls) -> Color: - return Color.from_hex(color_hex="#ffffff") + def WHITE(cls): + if cls._WHITE is None: + cls._WHITE = cls.from_hex("#ffffff") + return cls._WHITE + @property @classmethod - def black(cls) -> Color: - return Color.from_hex(color_hex="#000000") + def BLACK(cls): + if cls._BLACK is None: + cls._BLACK = cls.from_hex("#000000") + return cls._BLACK + @property @classmethod - def red(cls) -> Color: - return Color.from_hex(color_hex="#ff0000") + def RED(cls): + if cls._RED is None: + cls._RED = cls.from_hex("#ff0000") + return cls._RED + @property @classmethod - def green(cls) -> Color: - return Color.from_hex(color_hex="#00ff00") + def GREEN(cls): + if cls._GREEN is None: + cls._GREEN = cls.from_hex("#00ff00") + return cls._GREEN + @property @classmethod - def blue(cls) -> Color: - return Color.from_hex(color_hex="#0000ff") + def BLUE(cls): + if cls._BLUE is None: + cls._BLUE = cls.from_hex("#0000ff") + return cls._BLUE @dataclass @@ -197,3 +218,10 @@ class ColorPalette: raise ValueError("idx argument should not be negative") idx = idx % len(self.colors) return self.colors[idx] + + +Color.WHITE = Color.from_hex("#ffffff") +Color.BLACK = Color.from_hex("#000000") +Color.RED = Color.from_hex("#ff0000") +Color.GREEN = Color.from_hex("#00ff00") +Color.BLUE = Color.from_hex("#0000ff") diff --git a/supervision/draw/utils.py b/supervision/draw/utils.py index 34c11a9f..10f5c932 100644 --- a/supervision/draw/utils.py +++ b/supervision/draw/utils.py @@ -105,7 +105,7 @@ def draw_text( scene: np.ndarray, text: str, text_anchor: Point, - text_color: Color = Color.black(), + text_color: Color = Color.BLACK, text_scale: float = 0.5, text_thickness: int = 1, text_padding: int = 10, diff --git a/test/draw/test_color.py b/test/draw/test_color.py index eb4c3657..b9dbc440 100644 --- a/test/draw/test_color.py +++ b/test/draw/test_color.py @@ -9,13 +9,13 @@ from supervision.draw.color import Color @pytest.mark.parametrize( "color_hex, expected_result, exception", [ - ("fff", Color.white(), DoesNotRaise()), - ("#fff", Color.white(), DoesNotRaise()), - ("ffffff", Color.white(), DoesNotRaise()), - ("#ffffff", Color.white(), DoesNotRaise()), - ("f00", Color.red(), DoesNotRaise()), - ("0f0", Color.green(), DoesNotRaise()), - ("00f", Color.blue(), DoesNotRaise()), + ("fff", Color.WHITE, DoesNotRaise()), + ("#fff", Color.WHITE, DoesNotRaise()), + ("ffffff", Color.WHITE, DoesNotRaise()), + ("#ffffff", Color.WHITE, DoesNotRaise()), + ("f00", Color.RED, DoesNotRaise()), + ("0f0", Color.GREEN, DoesNotRaise()), + ("00f", Color.BLUE, DoesNotRaise()), ("#808000", Color(r=128, g=128, b=0), DoesNotRaise()), ("", None, pytest.raises(ValueError)), ("00", None, pytest.raises(ValueError)), @@ -35,11 +35,11 @@ def test_color_from_hex( @pytest.mark.parametrize( "color, expected_result, exception", [ - (Color.white(), "#ffffff", DoesNotRaise()), - (Color.black(), "#000000", DoesNotRaise()), - (Color.red(), "#ff0000", DoesNotRaise()), - (Color.green(), "#00ff00", DoesNotRaise()), - (Color.blue(), "#0000ff", DoesNotRaise()), + (Color.WHITE, "#ffffff", DoesNotRaise()), + (Color.BLACK, "#000000", DoesNotRaise()), + (Color.RED, "#ff0000", DoesNotRaise()), + (Color.GREEN, "#00ff00", DoesNotRaise()), + (Color.BLUE, "#0000ff", DoesNotRaise()), (Color(r=128, g=128, b=0), "#808000", DoesNotRaise()), ], )