如何使用Azure自定义视觉服务响应的boundingBox来绘制形状

11

我正在使用Azure认知服务自定义视觉服务来检测捕获的图像中的形状。根据其文档,我按照其格式获得了响应。

但是我遇到了在图像上绘制形状的问题。

{
    "id": "0fbda4ee-8956-4979-bf57-a252441af98d",
    "project": "9ca4032b-beeb-40ad-9396-1c3fcfd9ba89",
    "iteration": "27c85265-a158-4fc4-b22a-d535dd758d80",
    "created": "2018-06-11T09:34:29.9496528Z",
    "predictions": [
        {
            "probability": 0.0102891214,
            "tagId": "677afcf8-bc4a-493f-b588-707663286125",
            "tagName": "ball",
            "boundingBox": {
                "left": 0.2889924,
                "top": 0.0169312358,
                "width": 0.7007024,
                "height": 0.8284572
            }
        },
        {
            "probability": 0.012788726,
            "tagId": "ca844f08-b6c0-4d9a-9010-73945d442708",
            "tagName": "cricket ball",
            "boundingBox": {
                "left": 0.304018974,
                "top": 0.413163722,
                "width": 0.299461246,
                "height": 0.436399817
            }
        },
        {
            "probability": 0.0229086485,
            "tagId": "ca844f08-b6c0-4d9a-9010-73945d442708",
            "tagName": "cricket ball",
            "boundingBox": {
                "left": 0.2889924,
                "top": 0.0169312358,
                "width": 0.7007024,
                "height": 0.8284572
            }
        },
        {
            "probability": 0.0100123268,
            "tagId": "4672144d-5593-446f-be63-5144a35d0e6e",
            "tagName": "pipe",
            "boundingBox": {
                "left": 0.711509764,
                "top": 0.377838552,
                "width": 0.07217276,
                "height": 0.113578767
            }
        },
        {
            "probability": 0.0167990718,
            "tagId": "4672144d-5593-446f-be63-5144a35d0e6e",
            "tagName": "pipe",
            "boundingBox": {
                "left": 0.9821227,
                "top": 0.9500536,
                "width": 0.0115685463,
                "height": 0.033854425
            }
        },
        {
            "probability": 0.923659563,
            "tagId": "4672144d-5593-446f-be63-5144a35d0e6e",
            "tagName": "pipe",
            "boundingBox": {
                "left": 0.288039029,
                "top": 0.411838,
                "width": 0.291451037,
                "height": 0.4237842
            }
        }
    ]
}

上面是我在Custom Vision API调用中获得的响应。但问题出现在boundingBox上。它始终以分数形式具有值,从0开始。如果我想使用它并且想要绘制一个正方形,那么这是不可能的,因为我不知道从这些值绘制正方形/矩形的确切逻辑。

我该如何使用这些值并绘制矩形/正方形呢?

1个回答

25

回复 / 简述

这些 boundingBox 值是相对于原始图像大小的百分比,因此您可以通过将值乘以图像宽度(对于左和宽度值)或图像高度(对于顶部和高度值)来绘制矩形。

请记住,位置是从左上角表示的,因此位置 0,0 是该角落。

详细信息及示例

我使用小型自定义视觉检测可乐瓶。

原始图像如下: original image

我使用 Custom Vision 门户进行预测,并获得了以下结果 - 让我们聚焦于具有 87.5% 得分的突出显示结果:

portal result

我还使用 API(此处可用)进行了预测操作,并获得了以下预测结果(以及其他细节):

{
    "probability": 0.875464261,
    "tagId": "1932c95f-ed4a-4675-bde4-c2457e1389e6",
    "tagName": "CocaLight",
    "boundingBox": {
      "left": 0.453497916,
      "top": 0.0,
      "width": 0.2523211,
      "height": 0.8738168
    }
}

考虑到我的图像尺寸为800 x 652(因此ImageWidth为800,ImageHeight为652):

绘制矩形

左上角位置?

  • x(距离左边框的垂直距离)= API x ImageWidth的左值 => 0.453497916 x 800 = 362
  • y(距离顶部边框的水平距离)= API x ImageHeight的上值 => 0.0 x 652 = 0

因此,我的矩形起始位置是(362,0)。

尺寸?

  • 矩形宽度= API x ImageWidth的宽度 => 201
  • 矩形高度= API x ImageHeight的高度 => 569

让我们画出它!

Draw API Result

看起来没问题!


2
很好的解释,易于理解。我会尝试并告诉你结果。谢谢。 - Vaibhav Limbani
2
@Nicolas R 非常好的解释。我希望认知服务能够像这样更新他们绘制形状的描述。非常好。非常感谢。我会尝试一下。 - Shreyash Mahajan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接