如何在Tensorflow对象检测API中获取多个边界框坐标

时间:2019-05-24 11:26:18

标签: python-3.x tensorflow object-detection bounding-box object-detection-api

我想获取多个边界框坐标和每个边界框的类,并将其作为JSON文件返回。

当我从下面的代码打印box []时,它的形状为(1,300,4)。框内有300个坐标[]。但是我的预测图像上只有2个。我想要在图像上预测的边界框的坐标。

此外,我们如何知道哪个边界框映射到图像中的哪个类别/类?

例如,假设我在图像中有一只狗和一个人,我怎么知道哪个边界框对应于狗类,哪个边界框对应于人类? boxs []给我们一个形状为(1,300,4)的数组,而没有指示哪个边界框对应于图像中的哪个类。

我遵循此answer,使用阈值从框[]中的300个坐标中获取边界框坐标。

我尝试获得得分最高的边界框。但是,即使预测的图像具有多个边界框,它也只返回一个边界框。

得分最高的边界框坐标甚至与预测图像上的边界框坐标都不匹配。如何获得预测图像上的边界框坐标?

            vis_util.visualize_boxes_and_labels_on_image_array(
                image_np,
                np.squeeze(boxes),
                np.squeeze(classes).astype(np.int32),
                np.squeeze(scores),
                category_index,
                use_normalized_coordinates=True,
                line_thickness=8)
            im = Image.fromarray(image_np)

            true_boxes = boxes[0][scores[0]==scores.max()]    # Gives us the box with max score
            for i in range(true_boxes.shape[0]):   # rescaling the coordinates
                ymin = true_boxes[i,0]*height
                xmin = true_boxes[i,1]*width
                ymax = true_boxes[i,2]*height
                xmax = true_boxes[i,3]*width

我从上面的代码xmin,ymin,xmax,ymax(具有最高分)获得的坐标与预测图像上的边界框坐标不完全匹配。它们相差几个像素。 另外,即使预测的图像具有多个边界框和多个类别(例如:一条狗和一个人),我也只会得到一个边界框。

我想返回一个具有image_name,bounding_boxes和对应于每个边界框的类的JSON文件。

谢谢,我是新来的。请询问您是否不理解问题的任何部分。

1 个答案:

答案 0 :(得分:0)

我在这里link遵循了这个答案,并且找到了所有边界框坐标:

min_score_thresh=0.60
true_boxes = boxes[0][scores[0] > min_score_thresh]
for i in range(true_boxes.shape[0]):
    ymin = int(true_boxes[i,0]*height)
    xmin = int(true_boxes[i,1]*width)
    ymax = int(true_boxes[i,2]*height)
    xmax = int(true_boxes[i,3]*width)

    roi = image[ymin:ymax,xmin:xmax].copy()
    cv2.imwrite("box_{}.jpg".format(str(i)), roi)