|
|
|
|
@ -315,11 +315,14 @@ class ShapeManager(ObjectManager):
|
|
|
|
|
@staticmethod
|
|
|
|
|
def _calc_objects_similarity(obj0, obj1, start_frame, overlap):
|
|
|
|
|
def _calc_polygons_similarity(p0, p1):
|
|
|
|
|
overlap_area = p0.intersection(p1).area
|
|
|
|
|
if p0.area == 0 or p1.area == 0: # a line with many points
|
|
|
|
|
return 0
|
|
|
|
|
if p0.is_valid and p1.is_valid: # check validity of polygons
|
|
|
|
|
overlap_area = p0.intersection(p1).area
|
|
|
|
|
if p0.area == 0 or p1.area == 0: # a line with many points
|
|
|
|
|
return 0
|
|
|
|
|
else:
|
|
|
|
|
return overlap_area / (p0.area + p1.area - overlap_area)
|
|
|
|
|
else:
|
|
|
|
|
return overlap_area / (p0.area + p1.area - overlap_area)
|
|
|
|
|
return 0 # if there's invalid polygon, assume similarity is 0
|
|
|
|
|
|
|
|
|
|
has_same_type = obj0["type"] == obj1["type"]
|
|
|
|
|
has_same_label = obj0.get("label_id") == obj1.get("label_id")
|
|
|
|
|
|