From 38e7fa07d28c9fb6ec93034a5d6805a413ba8492 Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Sun, 12 Jan 2020 07:50:21 -0600 Subject: [PATCH] add a label position arg for bounding boxes --- frigate/util.py | 16 +++++++++++++--- frigate/video.py | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/frigate/util.py b/frigate/util.py index d62419514..e441f39e1 100644 --- a/frigate/util.py +++ b/frigate/util.py @@ -75,7 +75,7 @@ def compute_intersection_over_union(box_a, box_b): def tonumpyarray(mp_arr): return np.frombuffer(mp_arr.get_obj(), dtype=np.uint8) -def draw_box_with_label(frame, x_min, y_min, x_max, y_max, label, info, thickness=2, color=None): +def draw_box_with_label(frame, x_min, y_min, x_max, y_max, label, info, thickness=2, color=None, position='ul'): if color is None: color = COLOR_MAP[label] display_text = "{}: {}".format(label, info) @@ -90,8 +90,18 @@ def draw_box_with_label(frame, x_min, y_min, x_max, y_max, label, info, thicknes text_height = size[0][1] line_height = text_height + size[1] # set the text start position - text_offset_x = x_min - text_offset_y = 0 if y_min < line_height else y_min - (line_height+8) + if position == 'ul': + text_offset_x = x_min + text_offset_y = 0 if y_min < line_height else y_min - (line_height+8) + elif position == 'ur': + text_offset_x = x_max - (text_width+8) + text_offset_y = 0 if y_min < line_height else y_min - (line_height+8) + elif position == 'bl': + text_offset_x = x_min + text_offset_y = y_max + elif position == 'br': + text_offset_x = x_max - (text_width+8) + text_offset_y = y_max # make the coords of the box with a small padding of two pixels textbox_coords = ((text_offset_x, text_offset_y), (text_offset_x + text_width + 2, text_offset_y + line_height)) cv2.rectangle(frame, textbox_coords[0], textbox_coords[1], color, cv2.FILLED) diff --git a/frigate/video.py b/frigate/video.py index 13b9a1ce4..ef7a84c8b 100644 --- a/frigate/video.py +++ b/frigate/video.py @@ -333,7 +333,7 @@ class Camera: for id, obj in tracked_objects.items(): color = (0, 255,0) if obj['frame_time'] == frame_time else (255, 0, 0) - draw_box_with_label(frame, obj['box']['xmin'], obj['box']['ymin'], obj['box']['xmax'], obj['box']['ymax'], obj['name'], f"{int(obj['score']*100)}% {obj['area']} {id}", color=color, thickness=1) + draw_box_with_label(frame, obj['box']['xmin'], obj['box']['ymin'], obj['box']['xmax'], obj['box']['ymax'], obj['name'], f"{id}", color=color, thickness=1, position='bl') # print a timestamp time_to_show = datetime.datetime.fromtimestamp(frame_time).strftime("%m/%d/%Y %H:%M:%S")