|
|
from shapely.geometry import Polygon |
|
|
import yaml |
|
|
from pathlib import Path |
|
|
|
|
|
|
|
|
|
|
|
def check_box_intersection(box_1, box_2, threshold=0.6): |
|
|
|
|
|
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]]] |
|
|
|
|
|
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)) |
|
|
|
|
|
|
|
|
return (scaled_iou > threshold) |
|
|
except ZeroDivisionError: |
|
|
|
|
|
print("ZERO DIVISION ERROR", poly_1.area, poly_2.area) |
|
|
return False |
|
|
|
|
|
|
|
|
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'] |
|
|
valid_dir = root / config_file['val'] |
|
|
test_dir = root / config_file['test'] |
|
|
image_size = config_file['img_size'] |
|
|
classes = config_file['names'] |
|
|
|
|
|
|
|
|
return (train_dir, valid_dir, test_dir), (image_size, classes) |