File size: 1,682 Bytes
b39a019 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
from shapely.geometry import Polygon
import yaml
from pathlib import Path
# Each box has format (x_1, y_1, x_2, y_2) - this does mean this is an estimate.
# box_1 is the bounding box of the crosswalk, and box_2 is that of the tile.
def check_box_intersection(box_1, box_2, threshold=0.6):
# Threshold is the min IoU required to consider it as having a crosswalk - the minimum percent area of the crosswalk that must be in the tile
formatted_box_1 = [[box_1[0], box_1[1]], [box_1[2], box_1[1]], [box_1[2], box_1[3]], [box_1[0], box_1[3]]] # Formatting follows shapely clockwise system
poly_1 = Polygon(formatted_box_1)
poly_2 = Polygon(box_2)
try:
iou = poly_1.intersection(poly_2).area / poly_1.union(poly_2).area
scaled_iou = iou * ((poly_1.area) / (poly_2.area))
# print("--------------")
# print(iou, scaled_iou)
return (scaled_iou > threshold)
except ZeroDivisionError:
# In the case of a zero division error
print("ZERO DIVISION ERROR", poly_1.area, poly_2.area)
return False
# Loads a YAML dataset into the user's device
def load_yaml_database(yaml_path):
config_file = None
with open(yaml_path, "r") as file:
config_file = yaml.safe_load(file)
root = Path(config_file['path'])
train_dir = root / config_file['train'] # Training data
valid_dir = root / config_file['val'] # Validation data
test_dir = root / config_file['test'] # Testing data
image_size = config_file['img_size']
classes = config_file['names']
# Returns in format (directories, label_description)
return (train_dir, valid_dir, test_dir), (image_size, classes) |