Соответствие планограммы полки (предварительная версия)

Планограмма — это схема, указывающая правильное размещение розничных продуктов на полках. API соответствия планограмм позволяет сравнить результаты анализа с фотографии с входным вводом планограммы в магазине. Он возвращает учет всех позиций в планограмме и указывает, найден ли продукт в каждой позиции.

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

Примечание.

Бренды, отображаемые на изображениях, не связаны с корпорацией Майкрософт и не указывают ни одну форму подтверждения продуктов Майкрософт или Майкрософт владельцами бренда, или одобрение владельцев бренда или их продуктов корпорацией Майкрософт.

Необходимые компоненты

  • Необходимо уже настроить и запустить базовый анализ распознавания продуктов с помощью API распознавания продуктов.
  • Установленная программа cURL. Кроме того, можно использовать другую платформу REST, например Swagger или расширение REST Client для VS Code.

Подготовка схемы планограммы

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

"planogram": {
  "width": 100.0,
  "height": 50.0,
  "products": [
    {
      "id": "string",
      "name": "string",
      "w": 12.34,
      "h": 123.4
    }
  ],
  "fixtures": [
    {
      "id": "string",
      "w": 2.0,
      "h": 10.0,
      "x": 0.0,
      "y": 3.0
    }
  ],
  "positions": [
    {
      "id": "string",
      "productId": "string",
      "fixtureId": "string",
      "x": 12.0,
      "y": 34.0
    }
  ]
}

Координаты X и Y относятся к левому верхнему источнику, а ширина и высота расширяют каждый ограничивающий прямоугольник вниз и справа. На следующей схеме показаны примеры системы координат.

Схема изображения полки с выделенными светильниками и продуктами и их координатами.

Примечание.

Бренды, отображаемые на изображениях, не связаны с корпорацией Майкрософт и не указывают ни одну форму подтверждения продуктов Майкрософт или Майкрософт владельцами бренда, или одобрение владельцев бренда или их продуктов корпорацией Майкрософт.

Числа в схеме планограммы находятся в неспецифичных единицах. Они могут соответствовать дюймам, сантиметрам или любой другой единице измерения. Алгоритм сопоставления вычисляет связь между единицами анализа фотографий (пикселями) и единицами планограммы.

Модель API планограммы

Описывает планограмму для операций сопоставления планограмм.

Имя. Тип Описание Обязательное поле
width двойной точности Ширина планограммы. Да
height двойной точности Высота планограммы. Да
products ProductApiModel Список продуктов в планограмме. Да
fixtures FixtureApiModel Список светильников в планограмме. Да
positions PositionApiModel Список позиций в планограмме. Да

Модель API продукта

Описывает продукт в планограмме.

Имя. Тип Описание Обязательное поле
id строка Идентификатор продукта. Да
name строка Имя продукта. Да
w двойной точности Ширина продукта. Да
h двойной точности Высота светильника. Да

Модель API исправления

Описывает светильник (полку или аналогичное оборудование) в планограмме.

Имя. Тип Описание Обязательное поле
id строка Идентификатор светильника. Да
w двойной точности Ширина светильника. Да
h двойной точности Высота светильника. Да
x двойной точности Левое смещение от источника в единицах в дюймах или сантиметрах. Да
y двойной точности Верхнее смещение от источника в единицах дюйма или сантиметров. Да

Модель API позиции

Описывает положение продукта в планограмме.

Имя. Тип Описание Обязательное поле
id строка Идентификатор позиции. Да
productId строка Идентификатор продукта. Да
fixtureId строка Идентификатор светильника, на который находится продукт. Да
x двойной точности Левое смещение от источника в единицах в дюймах или сантиметрах. Да
y двойной точности Верхнее смещение от источника в единицах дюйма или сантиметров. Да

Получение результатов анализа

Затем необходимо выполнить вызов API распознавания продуктов с пользовательской моделью.

Возвращаемый текст JSON должен быть структурой "detectedProducts" . В нем показаны все продукты, обнаруженные на полке, с метками для конкретного продукта, которые вы использовали на этапе обучения.

"detectedProducts": {
  "imageMetadata": {
    "width": 21,
    "height": 25
  },
  "products": [
    {
      "id": "01",
      "boundingBox": {
        "x": 123,
        "y": 234,
        "w": 34,
        "h": 45
      },
      "classifications": [
        {
          "confidence": 0.8,
          "label": "Product1"
        }
      ]
    }
  ],
  "gaps": [
    {
      "id": "02",
      "boundingBox": {
        "x": 12,
        "y": 123,
        "w": 1234,
        "h": 123
      },
      "classifications": [
        {
          "confidence": 0.9,
          "label": "Product1"
        }
      ]
    }
  ]
}

Подготовка соответствующего запроса

Присоедините содержимое JSON схемы планограммы с содержимым JSON результатов анализа, как показано ниже.

"planogram": {
  "width": 100.0,
  "height": 50.0,
  "products": [
    {
      "id": "string",
      "name": "string",
      "w": 12.34,
      "h": 123.4
    }
  ],
  "fixtures": [
    {
      "id": "string",
      "w": 2.0,
      "h": 10.0,
      "x": 0.0,
      "y": 3.0
    }
  ],
  "positions": [
    {
      "id": "string",
      "productId": "string",
      "fixtureId": "string",
      "x": 12.0,
      "y": 34.0
    }
  ]
},
"detectedProducts": {
  "imageMetadata": {
    "width": 21,
    "height": 25
  },
  "products": [
    {
      "id": "01",
      "boundingBox": {
        "x": 123,
        "y": 234,
        "w": 34,
        "h": 45
      },
      "classifications": [
        {
          "confidence": 0.8,
          "label": "Product1"
        }
      ]
    }
  ],
  "gaps": [
    {
      "id": "02",
      "boundingBox": {
        "x": 12,
        "y": 123,
        "w": 1234,
        "h": 123
      },
      "classifications": [
        {
          "confidence": 0.9,
          "label": "Product1"
        }
      ]
    }
  ]
}

Это текст, который вы будете использовать в тексте запроса API.

Вызов API сопоставления планограммы

  1. Скопируйте следующую curl команду в текстовый редактор.

    curl.exe -H "Ocp-Apim-Subscription-Key: <subscriptionKey>" -H "Content-Type: application/json" "<endpoint>/computervision/planogramcompliance:match?api-version=2023-04-01-preview" -d "<body>"
    
  2. При необходимости внесите следующие изменения в команду.

    1. Замените значение ключа ресурса Визуального <subscriptionKey> зрения.
    2. Замените значение конечной точки ресурса Визуального <endpoint> зрения. Например: https://YourResourceName.cognitiveservices.azure.com.
    3. Замените значение <body> присоединенной строки JSON, подготовленной в предыдущем разделе.
  3. Откройте окно командной строки.

  4. Вставьте измененную curl команду из текстового редактора в окно командной строки и выполните команду.

Изучите ответ.

Успешный ответ возвращается в формате JSON, где отображаются продукты (или пробелы), обнаруженные на каждой позиции планограммы. Дополнительные сведения о определениях полей см. в разделах ниже.

{
  "matchedResultsPerPosition": [
    {
      "positionId": "01",
      "detectedObject": {
        "id": "01",
        "boundingBox": {
          "x": 12,
          "y": 1234,
          "w": 123,
          "h": 12345
        },
        "classifications": [
          {
            "confidence": 0.9,
            "label": "Product1"
          }
        ]
      }
    }
  ]
}

Модель API сопоставления позиций планограммы

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

Имя. Тип Описание Обязательное поле
positionId строка Идентификатор позиции из планограммы, сопоставленной с соответствующим обнаруженным объектом. No
detectedObject DetectedObjectApiModel Описывает обнаруженный объект на изображении. No

Следующие шаги