Browse Source

add a label position arg for bounding boxes

Blake Blackshear 5 years ago
parent
commit
38e7fa07d2
2 changed files with 14 additions and 4 deletions
  1. 13 3
      frigate/util.py
  2. 1 1
      frigate/video.py

+ 13 - 3
frigate/util.py

@@ -75,7 +75,7 @@ def compute_intersection_over_union(box_a, box_b):
 def tonumpyarray(mp_arr):
 def tonumpyarray(mp_arr):
     return np.frombuffer(mp_arr.get_obj(), dtype=np.uint8)
     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:
     if color is None:
         color = COLOR_MAP[label]
         color = COLOR_MAP[label]
     display_text = "{}: {}".format(label, info)
     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]
     text_height = size[0][1]
     line_height = text_height + size[1]
     line_height = text_height + size[1]
     # set the text start position
     # 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
     # 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))
     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)
     cv2.rectangle(frame, textbox_coords[0], textbox_coords[1], color, cv2.FILLED)

+ 1 - 1
frigate/video.py

@@ -333,7 +333,7 @@ class Camera:
         
         
         for id, obj in tracked_objects.items():
         for id, obj in tracked_objects.items():
             color = (0, 255,0) if obj['frame_time'] == frame_time else (255, 0, 0)
             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
         # print a timestamp
         time_to_show = datetime.datetime.fromtimestamp(frame_time).strftime("%m/%d/%Y %H:%M:%S")
         time_to_show = datetime.datetime.fromtimestamp(frame_time).strftime("%m/%d/%Y %H:%M:%S")