V0.1.0
王莹 2 years ago
parent 38b5121e15
commit ab9b20f834

@ -0,0 +1,47 @@
from tools_analysis import select_bbox_by_labels, iou_result_two
def same_model_img_analysis_labels(example_list, result_dicts_list, relevancy, relevancy_para):
'''
example_list: 需要关联处理的目标标签集合
result_dicts_list: 当前图片检测结果格式为[{labels1:result1},{labels2:result2},{labels2:result2}...]
'''
# 获得当前结果的标签集
result_labels_list = [list(re.keys())[0] for re in result_dicts_list]
# 判断是否存在example_list中的所有标签
continue_para = False
compara_labellist = [
label for label in example_list if label not in result_labels_list]
if compara_labellist:
return continue_para
else:
result_dicts_list_change = select_bbox_by_labels(
example_list, result_dicts_list)
if relevancy == 'overlap':
if len(example_list) == 2:
overlap_list = iou_result_two(
result_dicts_list_change, relevancy_para)
return overlap_list
if relevancy == 'in_bbox':
pass
def model_labels_selet(example_list, result_dict_list):
'''
直接从result中获得目标列表
'''
compara_labellist = [result_dict for result_dict in result_dict_list if list(
result_dict.keys()) in example_list]
return compara_labellist

@ -0,0 +1,74 @@
def iou_result_two(result_dict_list,iou_para):
result_0 = list(result_dict_list[0].values())[0]
result_1 = list(result_dict_list[1].values())[0]
label_0 = list(result_dict_list[0].keys())[0]
label_1 = list(result_dict_list[1].keys())[0]
return_lists = []
for re_0 in result_0:
for re_1 in result_1:
iou = calculate_iou(re_0, re_1)
if iou > iou_para:
label_dict_0 = {label_0: re_0}
label_dict_1 = {label_1: re_1}
return_lists.append(label_dict_0)
return_lists.append(label_dict_1)
return return_lists
def calculate_iou(box1, box2):
"""
计算两个边界框之间的IoU值
参数:
box1: 边界框1的坐标x1, y1, x2, y2
box2: 边界框2的坐标x1, y1, x2, y2
返回值:
iou: 两个边界框之间的IoU值
"""
x1 = max(box1[0], box2[0])
y1 = max(box1[1], box2[1])
x2 = min(box1[2], box2[2])
y2 = min(box1[3], box2[3])
# 计算交集区域面积
intersection_area = max(0, x2 - x1 + 1) * max(0, y2 - y1 + 1)
# 计算边界框1和边界框2的面积
box1_area = (box1[2] - box1[0] + 1) * (box1[3] - box1[1] + 1)
box2_area = (box2[2] - box2[0] + 1) * (box2[3] - box2[1] + 1)
# 计算并集区域面积
union_area = box1_area + box2_area - intersection_area
# 计算IoU值
iou = intersection_area / union_area
return iou
def select_bbox_by_labels(example_list, result_dicts_list):
'''
将result列表中的example列表内的bbox挑选出来,放到同一字典下
'''
result_dict_list_change = []
for label in example_list:
bbox_list = []
for result in result_dicts_list:
if list(result.keys()) == label:
bbox_list.append(list(result.values()))
result_dict_change = {label: bbox_list}
result_dict_list_change.append(result_dict_change)
return result_dict_list_change
Loading…
Cancel
Save