如何从张量流对象检测中获取边界框 [Xmax,Xmin,Ymax,Ymin]

我是人工智能的新手,我正在使用 TensorFlow 对象检测 API 来检测图像上的产品,因此它已经检测到对象,但我想获取图像中每个对象的坐标 Xmax、Xmin、Ymax 和 Ymin。

即检测到物体的图像,在这种情况下,图像中检测到 2 个物体。

图片:

http://img4.mukewang.com/61bc4bd6000109ff06400634.jpg

我们可以看到我得到了对象的坐标但不清楚,输出中有超过 3 个坐标,我只想得到坐标的数量作为图像中对象的数量。


这是提供输出的代码


with detection_graph.as_default():

    with tf.Session(graph=detection_graph) as sess:

        image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')

        detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')

        detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')

        detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')

        num_detections = detection_graph.get_tensor_by_name('num_detections:0')


        print(detection_graph.get_tensor_by_name('detection_boxes:0'))


        for image_path in TEST_IMAGE_PATHS:

            boxes = detect_objects(image_path)

            print(boxes)


输出


Tensor("detection_boxes:0", dtype=float32)

[[[0.16593058 0.06630109 0.8009524  0.5019088 ]

  [0.15757088 0.5376015  0.8869156  0.9394863 ]

  [0.5966009  0.88420665 0.6564093  0.9339011 ]

  ...

  [0.         0.         0.         0.        ]

  [0.         0.         0.         0.        ]

  [0.         0.         0.         0.        ]]]


我想得到类似的东西,但只有边界框的坐标。我们假设它们是对象的坐标。


[0.16593058 0.06630109 0.8009524  0.5019088 ]

[0.15757088 0.5376015  0.8869156  0.9394863 ]


湖上湖
浏览 313回答 2
2回答

慕丝7291255

你应该知道两件事:这些是所有(通常是 100 个)顶级检测的所有坐标。这些以标准化坐标给出。因此,为了按分数过滤检测,使用detection_scores以确定要过滤掉哪些索引(它们已排序),您可以将归一化坐标与原始图像大小相乘以获得绝对坐标。标准化坐标以 的格式给出[ymin, xmin, ymax, xmax],因此您应该将第一个和第三个坐标乘以y_size,将第二个和第四个坐标乘以x_size。您可以通过评估 的形状来计算x_size和。y_sizeimage_tensor

浮云间

代码:for box in boxes[0]:     xmin, ymin, xmax, ymax =box     bboxes.append([int(ymin *640),int(xmin*480) , int((ymax-ymin)*640), int((xmax-xmin)*480)])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python