我有一个 bbox_sort 函数,可以按从左到右的顺序对坐标进行排序。为了考虑到两个边界框之间的 Y 高度,我启动了 thresh 变量。在 get_predict 中,bbox_sort 函数作为参数传递给 cmp_to_key。我需要制作可选参数 thresh
我知道使用全局变量是不好的做法,但我不知道如何将 thresh 参数传递给 bbox_sort 函数。将数字阈值写入单独的文件并从那里获取它是一种好习惯,还是我如何重新制作排序功能?
from functools import cmp_to_key
def bbox_sort(a, b,):
bbox_a = a
bbox_b = b
if abs(bbox_a[1] - bbox_b[1]) <= thresh:
return bbox_a[0] - bbox_b[0]
return bbox_a[1] - bbox_b[1]
def get_prediction(result):
coord_list = []
res = result.to_coco_annotations()
global thresh
thresh = 10
for ann in res:
current_bbox = ann['bbox']
x = current_bbox[0]
y = current_bbox[1]
w = current_bbox[2]
h = current_bbox[3]
coord_list.append((x, y, w, h))
cnts = sorted(coord_list, key=cmp_to_key(bbox_sort))
for pred in range(len(res)-1):
res[pred]['image_id'] = cnts.index(tuple(res[pred]['bbox']))
return res
如果您的阈值是一个只能由开发人员配置的全局变量,通常的做法是将其定义在全部大写的文件之上
THRESHOLD = 10
就在您的导入之下。
在 python 中,您只需要在编辑函数内的全局变量时使用
global ...
。 (我想你不打算在这里做。)