2023-10-13 23:44:38 +01:00
|
|
|
import cv2
|
|
|
|
import numpy as np
|
2023-10-14 00:16:55 +01:00
|
|
|
|
|
|
|
|
2023-10-13 23:44:38 +01:00
|
|
|
def plot_label(
|
2023-10-14 00:16:55 +01:00
|
|
|
# list of dicts with each dict containing a label, x1, y1, x2, y2
|
|
|
|
boxes: list = None,
|
|
|
|
# opencv image
|
|
|
|
full_frame: np.ndarray = None,
|
|
|
|
# run_scale is the scale of the image that was used to run the model
|
|
|
|
# So the coordinates will be scaled up to the view frame size
|
|
|
|
run_scale: float = None,
|
|
|
|
# view_scale is the scale of the image, in relation to the full frame
|
|
|
|
# So the coordinates will be scaled appropriately when coming from run_frame
|
|
|
|
view_scale: float = None,
|
|
|
|
font: int = cv2.FONT_HERSHEY_SIMPLEX,
|
2023-10-13 23:44:38 +01:00
|
|
|
):
|
|
|
|
view_frame = cv2.resize(full_frame, (0, 0), fx=view_scale, fy=view_scale)
|
|
|
|
for thing in boxes:
|
|
|
|
cv2.rectangle(
|
|
|
|
# Image
|
|
|
|
view_frame,
|
|
|
|
# Start point
|
2023-10-14 00:16:55 +01:00
|
|
|
(
|
|
|
|
int(thing["x1"] * (run_scale / view_scale)),
|
|
|
|
int(thing["y1"] * (run_scale / view_scale)),
|
|
|
|
),
|
2023-10-13 23:44:38 +01:00
|
|
|
# End point
|
2023-10-14 00:16:55 +01:00
|
|
|
(
|
|
|
|
int(thing["x2"] * (run_scale / view_scale)),
|
|
|
|
int(thing["y2"] * (run_scale / view_scale)),
|
|
|
|
),
|
2023-10-13 23:44:38 +01:00
|
|
|
# Color
|
|
|
|
(0, 255, 0),
|
|
|
|
# Thickness
|
|
|
|
2,
|
|
|
|
)
|
|
|
|
cv2.putText(
|
|
|
|
# Image
|
|
|
|
view_frame,
|
|
|
|
# Text
|
|
|
|
thing["label"],
|
|
|
|
# Origin
|
2023-10-14 00:16:55 +01:00
|
|
|
(
|
|
|
|
int(thing["x1"] * (run_scale / view_scale)),
|
|
|
|
int(thing["y1"] * (run_scale / view_scale)),
|
|
|
|
),
|
2023-10-13 23:44:38 +01:00
|
|
|
# Font
|
|
|
|
font,
|
|
|
|
# Font Scale
|
|
|
|
1,
|
|
|
|
# Color
|
|
|
|
(0, 255, 0),
|
|
|
|
# Thickness
|
2023-10-14 00:16:55 +01:00
|
|
|
1,
|
2023-10-13 23:44:38 +01:00
|
|
|
)
|
2023-10-14 00:16:55 +01:00
|
|
|
return view_frame
|