Как использовать ответную службу привязки Azure boundingBox для построения формы - PullRequest
0 голосов
/ 11 июня 2018

Я использую службу Azure Cognitive Служба настраиваемого зрения для обнаружения фигур по захваченным изображениям.Согласно их документации, я получил ответ в соответствии с их форматом.

Но я сталкиваюсь с проблемой при построении фигуры над изображением.

{
    "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
            }
        }
    ]
}

Выше приведен ответ, который я получил вэтот вызов пользовательского видения API.Но проблема связана с boundingBox.У него всегда есть значения в виде дроби, начиная с 0. Теперь, если я хочу использовать это и хочу нарисовать квадрат, то это невозможно, потому что я не знаю точной логики для рисования квадратов / прямоугольников из этих значений.

Как я могу использовать эти значения и нарисовать прямоугольники / квадрат, используя его?

1 Ответ

0 голосов
/ 11 июня 2018

Ответить / TL; DR

Эти значения boundingBox указаны в процентах от исходного размера изображения, поэтому вы можете нарисовать прямоугольник, умножив значения на ширину изображения (для значений слева и ширины) или навысота изображения (для значений top и height).

Имейте в виду, что позиция выражена из верхнего левого угла, поэтому позиция 0,0 - это угол.

Детали с образцом

Я получил маленькое нестандартное зрение, обнаруживающее бутылки колы.

Исходное изображение следующее: original image

Я использовал портал Custom Vision длясделать прогноз и получить следующий результат - давайте сосредоточимся на этом выделенном результате с результатом 87,5%:

portal result

Использование API (доступно здесь ), я также сделал операцию Predict и получил (среди других деталей) это предсказание:

{
    "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):

Ректанgle draw

Положение верхней левой точки?

  • x (вертикальное расстояние от левой границы) = левое значение из API x ImageWidth => 0,453497916x 800 = 362
  • y (горизонтальное расстояние от верхней границы) = максимальное значение из API x ImageHeight => 0,0 x 652 = 0

ТакМоя начальная позиция прямоугольника (362,0).

Размер?

  • Ширина прямоугольника = Ширина от API x ImageWidth => 201
  • Высота прямоугольника = Высота от API x ImageHeight => 569

Давайте нарисуем это!

Draw API Result

Выглядит правильно!

...