【发布时间】:2021-10-29 12:51:15
【问题描述】:
给定两个字典列表,例如 -
poo = [{
"xmin":10,
"ymin":100,
"xmax":70,
"ymax":120,
"text":"fish",
}]
还有
foo = [{
"class":"Animal",
"percent":88.25,
"box_points":[30, 90, 80, 110]
}]
产生如下输出:
poofoo = [{
"class":"Animal",
"text":"fish",
"percent": 88.25,
"box_points":{
"xmin":10,
"ymin":90,
"xmax":80,
"ymax":120}
]}
知道
foo字典列表中的box_points也是xmin, ymin, xmax, ymax格式。这些框点是系统检测到的边界框的坐标。
如何访问嵌套元素,比较它们然后合并元素?如果它们在空间上接近,则将它们合并,在此示例中,阈值为 10 个单位 (x,y)。
我已经试过了:
def boxOverlap(box1, box2):
try:
if(box1[0]<=box2[2] and box1[0]>=box2[0]) \
or (box1[1]<=box2[3] and box1[1]>=box2[3]):
return True
else:
return False
except TypeError:
print(f"{message_error}")
final_json = []
for el1, el2 in zip(foo, poo):
el1_box_format = [el1['x_min'], el1['y_min'], el1['x_max'], el1['y_max']]
if(boxOverlap(el1_box_format, el2['box_points'])):
final_json.append({"class":el2["name"],
"text":el1["text"],
"confidence":el2["percentage_probability"],
"boxpoints":None
})
请注意,我创建了一个函数,用于在框是否重叠时返回布尔值(稍后我将实现阈值)。但问题是,我只想比较空间上接近的字典,而现在,由于我使用的是zip(foo, poo),它只能在成对元素中运行。
【问题讨论】:
-
请澄清你的输出,为什么动物在里面?
-
我在这里拼错了,它是“class”而不是“name”。谢谢你带来这个。
-
也不清楚 box_points 如何与 xmin 等相关
-
已在帖子中更正!
标签: python list dictionary