From 56825423dcaffc8087f65a61a6c8b8bf9e21e1ab Mon Sep 17 00:00:00 2001 From: Onuralp SEZER Date: Sat, 2 Mar 2024 03:16:21 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9E=20update=20PolygonZone=20te?= =?UTF-8?q?st=20and=20update=20traffic-analysis=20depricated=20codes=20are?= =?UTF-8?q?=20updated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Onuralp SEZER --- .../traffic_analysis/inference_example.py | 25 ++++++++++++------- examples/traffic_analysis/requirements.txt | 2 +- .../traffic_analysis/ultralytics_example.py | 24 +++++++++++------- test/detection/test_polygonzone.py | 4 ++- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/examples/traffic_analysis/inference_example.py b/examples/traffic_analysis/inference_example.py index 787db52b..7da5f37c 100644 --- a/examples/traffic_analysis/inference_example.py +++ b/examples/traffic_analysis/inference_example.py @@ -1,6 +1,6 @@ import argparse import os -from typing import Dict, List, Set, Tuple +from typing import Dict, Iterable, List, Set, Tuple import cv2 import numpy as np @@ -9,7 +9,8 @@ from tqdm import tqdm import supervision as sv -COLORS = sv.ColorPalette.default() +COLORS = sv.ColorPalette.from_hex(["#E6194B", "#3CB44B", "#FFE119", "#3C76D1"]) + ZONE_IN_POLYGONS = [ np.array([[592, 282], [900, 282], [900, 82], [592, 82]]), @@ -60,13 +61,13 @@ class DetectionsManager: def initiate_polygon_zones( polygons: List[np.ndarray], frame_resolution_wh: Tuple[int, int], - triggering_position: sv.Position = sv.Position.CENTER, + triggering_anchors: Iterable[sv.Position] = [sv.Position.CENTER], ) -> List[sv.PolygonZone]: return [ sv.PolygonZone( polygon=polygon, frame_resolution_wh=frame_resolution_wh, - triggering_position=triggering_position, + triggering_anchors=triggering_anchors, ) for polygon in polygons ] @@ -92,13 +93,16 @@ class VideoProcessor: self.video_info = sv.VideoInfo.from_video_path(source_video_path) self.zones_in = initiate_polygon_zones( - ZONE_IN_POLYGONS, self.video_info.resolution_wh, sv.Position.CENTER + ZONE_IN_POLYGONS, self.video_info.resolution_wh, [sv.Position.CENTER] ) self.zones_out = initiate_polygon_zones( - ZONE_OUT_POLYGONS, self.video_info.resolution_wh, sv.Position.CENTER + ZONE_OUT_POLYGONS, self.video_info.resolution_wh, [sv.Position.CENTER] ) - self.box_annotator = sv.BoxAnnotator(color=COLORS) + self.bounding_box_annotator = sv.BoundingBoxAnnotator(color=COLORS) + self.label_annotator = sv.LabelAnnotator( + color=COLORS, text_color=sv.Color.BLACK + ) self.trace_annotator = sv.TraceAnnotator( color=COLORS, position=sv.Position.CENTER, trace_length=100, thickness=2 ) @@ -136,7 +140,10 @@ class VideoProcessor: labels = [f"#{tracker_id}" for tracker_id in detections.tracker_id] annotated_frame = self.trace_annotator.annotate(annotated_frame, detections) - annotated_frame = self.box_annotator.annotate( + annotated_frame = self.bounding_box_annotator.annotate( + annotated_frame, detections + ) + annotated_frame = self.label_annotator.annotate( annotated_frame, detections, labels ) @@ -167,7 +174,7 @@ class VideoProcessor: detections_in_zones = [] detections_out_zones = [] - for i, (zone_in, zone_out) in enumerate(zip(self.zones_in, self.zones_out)): + for zone_in, zone_out in zip(self.zones_in, self.zones_out): detections_in_zone = detections[zone_in.trigger(detections=detections)] detections_in_zones.append(detections_in_zone) detections_out_zone = detections[zone_out.trigger(detections=detections)] diff --git a/examples/traffic_analysis/requirements.txt b/examples/traffic_analysis/requirements.txt index a8f583e8..c56009a1 100644 --- a/examples/traffic_analysis/requirements.txt +++ b/examples/traffic_analysis/requirements.txt @@ -1,5 +1,5 @@ gdown inference -supervision +supervision>=0.19.0rc5 tqdm ultralytics diff --git a/examples/traffic_analysis/ultralytics_example.py b/examples/traffic_analysis/ultralytics_example.py index 0e6efc6b..78189d29 100644 --- a/examples/traffic_analysis/ultralytics_example.py +++ b/examples/traffic_analysis/ultralytics_example.py @@ -1,5 +1,5 @@ import argparse -from typing import Dict, List, Set, Tuple +from typing import Dict, Iterable, List, Set, Tuple import cv2 import numpy as np @@ -8,7 +8,7 @@ from ultralytics import YOLO import supervision as sv -COLORS = sv.ColorPalette.default() +COLORS = sv.ColorPalette.from_hex(["#E6194B", "#3CB44B", "#FFE119", "#3C76D1"]) ZONE_IN_POLYGONS = [ np.array([[592, 282], [900, 282], [900, 82], [592, 82]]), @@ -59,13 +59,13 @@ class DetectionsManager: def initiate_polygon_zones( polygons: List[np.ndarray], frame_resolution_wh: Tuple[int, int], - triggering_position: sv.Position = sv.Position.CENTER, + triggering_anchors: Iterable[sv.Position] = [sv.Position.CENTER], ) -> List[sv.PolygonZone]: return [ sv.PolygonZone( polygon=polygon, frame_resolution_wh=frame_resolution_wh, - triggering_position=triggering_position, + triggering_anchors=triggering_anchors, ) for polygon in polygons ] @@ -90,13 +90,16 @@ class VideoProcessor: self.video_info = sv.VideoInfo.from_video_path(source_video_path) self.zones_in = initiate_polygon_zones( - ZONE_IN_POLYGONS, self.video_info.resolution_wh, sv.Position.CENTER + ZONE_IN_POLYGONS, self.video_info.resolution_wh, [sv.Position.CENTER] ) self.zones_out = initiate_polygon_zones( - ZONE_OUT_POLYGONS, self.video_info.resolution_wh, sv.Position.CENTER + ZONE_OUT_POLYGONS, self.video_info.resolution_wh, [sv.Position.CENTER] ) - self.box_annotator = sv.BoxAnnotator(color=COLORS) + self.bounding_box_annotator = sv.BoundingBoxAnnotator(color=COLORS) + self.label_annotator = sv.LabelAnnotator( + color=COLORS, text_color=sv.Color.BLACK + ) self.trace_annotator = sv.TraceAnnotator( color=COLORS, position=sv.Position.CENTER, trace_length=100, thickness=2 ) @@ -134,7 +137,10 @@ class VideoProcessor: labels = [f"#{tracker_id}" for tracker_id in detections.tracker_id] annotated_frame = self.trace_annotator.annotate(annotated_frame, detections) - annotated_frame = self.box_annotator.annotate( + annotated_frame = self.bounding_box_annotator.annotate( + annotated_frame, detections + ) + annotated_frame = self.label_annotator.annotate( annotated_frame, detections, labels ) @@ -165,7 +171,7 @@ class VideoProcessor: detections_in_zones = [] detections_out_zones = [] - for i, (zone_in, zone_out) in enumerate(zip(self.zones_in, self.zones_out)): + for zone_in, zone_out in zip(self.zones_in, self.zones_out): detections_in_zone = detections[zone_in.trigger(detections=detections)] detections_in_zones.append(detections_in_zone) detections_out_zone = detections[zone_out.trigger(detections=detections)] diff --git a/test/detection/test_polygonzone.py b/test/detection/test_polygonzone.py index 2aae955f..1a86a45b 100644 --- a/test/detection/test_polygonzone.py +++ b/test/detection/test_polygonzone.py @@ -63,7 +63,9 @@ FRAME_RESOLUTION = (300, 300) ( DETECTIONS, sv.PolygonZone( - POLYGON, FRAME_RESOLUTION, triggering_position=sv.Position.BOTTOM_CENTER + POLYGON, + FRAME_RESOLUTION, + triggering_anchors=[sv.Position.BOTTOM_CENTER], ), np.array( [False, False, True, True, True, True, False, False, False], dtype=bool