Compartilhar via


Conformidade com o planograma de prateleira (versão prévia)

Um planograma é um diagrama que indica o posicionamento correto dos produtos de varejo nas prateleiras. Com a API de Conformidade do Planograma você compara os resultados da análise de uma foto com a entrada do planograma da loja. Ela retorna uma conta de todas as posições no planograma e se um produto foi encontrado em cada posição.

Foto de uma prateleira com os produtos esboçados e os retângulos de posição do planograma esboçados separadamente.

Observação

As marcas mostradas nas imagens não são afiliadas à Microsoft e não indicam nenhuma forma de endosso dos produtos da Microsoft ou da Microsoft pelos proprietários da marca, ou um endosso dos proprietários da marca ou seus produtos pela Microsoft.

Pré-requisitos

Preparar um esquema de planograma

Você precisa ter seus dados de planograma em um formato JSON específico. Confira as seções abaixo para obter definições de campo.

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

As coordenadas X e Y são relativas a uma origem superior esquerda e a largura e a altura estendem cada caixa delimitadora para baixo e para a direita. O diagrama a seguir mostra exemplos do sistema de coordenadas.

Diagrama de uma prateleira com acessórios e produtos realçados e as respectivas coordenadas mostradas.

Observação

As marcas mostradas nas imagens não são afiliadas à Microsoft e não indicam nenhuma forma de endosso dos produtos da Microsoft ou da Microsoft pelos proprietários da marca, ou um endosso dos proprietários da marca ou seus produtos pela Microsoft.

As quantidades no esquema de planograma estão em unidades não específicas. Eles podem corresponder a polegadas, centímetros ou a qualquer outra unidade de medida. O algoritmo correspondente calcula a relação entre as unidades de análise de foto (pixels) e as unidades do planograma.

Modelo de API de planograma

Descreve o planograma para operações de correspondência de planograma.

Nome Tipo Descrição Obrigatório
width double Largura do planograma. Sim
height double Altura do planograma. Yes
products ProductApiModel Lista de produtos no planograma. Yes
fixtures FixtureApiModel Lista dos acessórios no planograma. Yes
positions PositionApiModel Lista das posições no planograma. Yes

Modelo de API de produto

Descreve um produto no planograma.

Nome Tipo Descrição Obrigatório
id string ID do produto. Sim
name string O nome do produto. Sim
w double Largura do produto. Sim
h double Altura do acessório. Yes

Modelo de API de acessório

Descreve um acessório (prateleira ou hardware semelhante) em um planograma.

Nome Tipo Descrição Obrigatório
id string ID do acessório. Sim
w double Largura do acessório. Sim
h double Altura do acessório. Sim
x double Deslocamento para a esquerda em relação à origem, em unidades de polegadas ou centímetros. Sim
y double Deslocamento para cima em relação à origem, em unidades de polegadas ou centímetros. Yes

Modelo de API de posição

Descreve a posição de um produto em um planograma.

Nome Tipo Descrição Obrigatório
id string ID da posição. Sim
productId string ID do produto. Sim
fixtureId string ID do acessório em que o produto está. Sim
x double Deslocamento para a esquerda em relação à origem, em unidades de polegadas ou centímetros. Sim
y double Deslocamento para cima em relação à origem, em unidades de polegadas ou centímetros. Sim

Obter resultados da análise

Em seguida, você precisa fazer uma chamada à API de Compreensão do Produto com um modelo personalizado.

O texto JSON retornado deve ser uma estrutura "detectedProducts". Ele mostra todos os produtos que foram detectados na prateleira, com os rótulos específicos usados na fase de treinamento.

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

Preparar a solicitação de correspondência

Una o conteúdo JSON do esquema de planograma com o conteúdo JSON dos resultados da análise, desta forma:

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

Esse é o texto que você usará no corpo da solicitação da API.

Chamar a API de correspondência do planograma

  1. Copie o comando curl a seguir em um editor de texto.

    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. Faça as alterações a seguir no comando quando necessário:

    1. Substitua o valor <subscriptionKey> por sua chave de recurso de Visão.
    2. Substitua o valor <endpoint> pelo ponto de extremidade do recurso de Visão. Por exemplo: https://YourResourceName.cognitiveservices.azure.com.
    3. Substitua o valor de <body> pela cadeia de caracteres JSON unida que você preparou na seção anterior.
  3. Abra una janela de prompt de comando.

  4. Cole o comando curl modificado do editor de texto na janela do prompt de comando e, em seguida, execute-o.

Examinar a resposta

Uma resposta bem-sucedida é retornada em JSON, mostrando os produtos (ou lacunas) detectados em cada posição do planograma. Confira as seções abaixo para obter definições de campo.

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

Modelo de API de posição correspondente ao planograma

O par unido da ID de posição do planograma com o objeto detectado correspondente do resultado da compreensão do produto.

Nome Tipo Descrição Obrigatório
positionId string A ID da posição do planograma correspondeu ao objeto detectado correspondente. No
detectedObject DetectedObjectApiModel Descreve um objeto detectado em uma imagem. Não

Próximas etapas