boxes
阵列(
[ymin, xmin, ymax, xmax]
)已规范化。因此,必须将它们与图像宽度/高度相乘,才能获得原始值。
要实现这一点,可以执行以下操作:
for box in np.squeeze(boxes):
box[0] = box[0] * heigh
box[1] = box[1] * width
box[2] = box[2] * height
box[3] = box[3] * width
然后,您可以使用numpy将框保存到csv。savetxt()方法:
import numpy as np
np.savetxt('yourfile.csv', boxes, delimiter=',')
编辑:
正如评论中所指出的,上述方法给出了框坐标列表。这是因为boxes张量保持每个检测区域的坐标。假设您使用默认的置信度接受阈值0.5,我的一个快速修复方法如下:
for i, box in enumerate(np.squeeze(boxes)):
if(np.squeeze(scores)[i] > 0.5):
print("ymin={}, xmin={}, ymax={}, xmax{}".format(box[0]*height,box[1]*width,box[2]*height,box[3]*width))
这应该打印四个值,而不是四个框。每个值表示边界框的一个角。
如果使用另一个置信度接受阈值,则必须调整该值。也许您可以解析此参数的模型配置。
要将坐标存储为CSV,可以执行以下操作:
new_boxes = []
for i, box in enumerate(np.squeeze(boxes)):
if(np.squeeze(scores)[i] > 0.5):
new_boxes.append(box)
np.savetxt('yourfile.csv', new_boxes, delimiter=',')