def compute_overlaps(parked_car_boxes, car_boxes): new_car_boxes = [] for box in car_boxes: y1 = box[0] x1 = box[1] y2 = box[2] x2 = box[3] p1 = (x1, y1) p2 = (x2, y1) p3 = (x2, y2) p4 = (x1, y2) new_car_boxes.append([p1, p2, p3, p4]) overlaps = np.zeros((len(parked_car_boxes), len(new_car_boxes))) for i in range(len(parked_car_boxes)): for j in range(car_boxes.shape[0]): pol1_xy = parked_car_boxes[i] pol2_xy = new_car_boxes[j] polygon1_shape = shapely_poly(pol1_xy) polygon2_shape = shapely_poly(pol2_xy) polygon_intersection = polygon1_shape.intersection( polygon2_shape).area polygon_union = polygon1_shape.union(polygon2_shape).area IOU = polygon_intersection / polygon_union overlaps[i][j] = IOU return overlaps
def make_polygon_obj(self): point_x = self.points[0::2] point_y = self.points[1::2] # in TotalText dataset, there there are under 4 points annotation for Polygon shape # so, we have to deal with it # if points are given 3, fill last quad points with left bottom coordinates if len(point_x) == len(point_y) == 3: point_x.append(point_x[0]) point_y.append(point_y[2]) self.points.append(point_x[0]) self.points.append(point_y[2]) self.num_points = len(self.points) // 2 # if points are given 2, copy value 2 times elif len(point_x) == len(point_y) == 2: point_x *= 2 point_y *= 2 self.points.append(point_x[1]) self.points.append(point_y[0]) self.points.append(point_x[0]) self.points.append(point_y[1]) self.num_points = len(self.points) // 2 # if points are given 1, copy value 4 times elif len(point_x) == len(point_y) == 1: point_x *= 4 point_y *= 4 for _ in range(3): self.points.append(point_x[0]) self.points.append(point_x[0]) self.num_points = len(self.points) // 2 return shapely_poly(np.stack([point_x, point_y], axis=1)).buffer(0)