odometer_value_extractor / xyxy_converter.py
Vahe's picture
more to run the app
69c8334
def yolov5_to_image_coordinates(text_file, image_width=640, image_height=640):
"""
Convert YOLOv5 bounding box coordinates to normal image coordinates.
Args:
box (tuple): YOLOv5 bounding box coordinates in the format (x_center, y_center, width, height).
image_width (int): Width of the image.
image_height (int): Height of the image.
Returns:
tuple: Normal image coordinates in the format (x_min, y_min, x_max, y_max).
"""
with open(text_file, 'r') as f:
xywh_text = f.read()
xywh_splitted = xywh_text.split('\n')
if xywh_splitted[-1] == '':
xywh_splitted = xywh_text.split('\n')[0]
else:
conf_list = [float(i.split(' ')[-1]) for i in xywh_splitted]
max_conf_idx = conf_list.index(max(conf_list))
xywh_splitted = xywh_text.split('\n')[max_conf_idx]
yolo_box = [float(i) for i in xywh_splitted.split(' ')[1:-1]]
# yolo_box = [float(i) for i in xywh_text.replace('\n', '').split(' ')[1:]]
x_center, y_center, width, height = yolo_box
# Convert from normalized to absolute coordinates
x_min = int((x_center - width / 2) * image_width)
y_min = int((y_center - height / 2) * image_height)
x_max = int((x_center + width / 2) * image_width)
y_max = int((y_center + height / 2) * image_height)
x1, y1, x2, y2 = y_min, x_min, y_max, x_max
return x1, y1, x2, y2