在运行实验的过程中,遇到了一个问题:
Traceback (most recent call last):
File "get_cropped_val_images.py", line 86, in <module>
gt_bboxes = get_gt_bboxes[str(image_names[i].replace('jpg', 'xml'))]
TypeError: 'function' object is not subscriptable
根据错误信息,您正在尝试对函数get_gt_bboxes进行索引操作[str(image_names[i].replace(‘jpg’, ‘xml’))],这是不允许的,因为函数是不可索引的对象。
报错的代码片段为:
image_names = []
for name in os.listdir('val/'):
image_names.append(name)
gt_all_bboxes = get_gt_bboxes()
output_folder = 'output/'
interval = 100
for i in range(len(image_names)):
image_path = os.path.join('val/', image_names[i])
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
masks = mask_generator.generate(image)
bbox_list = extract_bboxes(masks)
gt_bboxes = get_gt_bboxes[str(image_names[i].replace('jpg', 'xml'))]
根据错误信息,您正在尝试对函数get_gt_bboxes进行索引操作[str(image_names[i].replace(‘jpg’, ‘xml’))],这是不允许的,因为函数是不可索引的对象。
可能的原因是您意图调用get_gt_bboxes函数并将其结果存储在gt_all_bboxes中,但是在代码中我们看不到get_gt_bboxes函数的定义或相关实现。
请确保在代码中包含了正确的get_gt_bboxes函数的定义,并将其结果存储在gt_all_bboxes中,然后在后续代码中使用gt_all_bboxes来获取边界框。
把代码改进后:
image_names = []
for name in os.listdir('val/'):
image_names.append(name)
gt_all_bboxes = get_gt_bboxes()
output_folder = 'output/'
interval = 100
for i in range(len(image_names)):
image_path = os.path.join('val/', image_names[i])
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
masks = mask_generator.generate(image)
bbox_list = extract_bboxes(masks)
gt_bboxes = gt_all_bboxes[str(image_names[i].replace('jpg', 'xml'))]
selected_bboxes = []
for bbox_gt in gt_bboxes:
for bbox_pred in bbox_list:
if is_bbox_inside(bbox_gt, bbox_pred):
selected_bboxes.append(bbox_pred)
break
可以运行结果!