Partilhar via


Conformidade com planograma de prateleira (visualização)

Um planograma é um diagrama que indica o posicionamento correto dos produtos de varejo nas prateleiras. A API de conformidade de planograma permite comparar os resultados da análise de uma foto com a entrada de planograma da loja. Ele retorna uma conta de todas as posições no planograma e se um produto foi encontrado em cada posição.

Foto de uma prateleira de varejo com produtos detetados delineados e retângulos de posição de planograma delineados separadamente.

Nota

As marcas mostradas nas imagens não são afiliadas à Microsoft e não indicam qualquer 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

  • Você já deve ter configurado e executado a análise básica de Compreensão do Produto com a API de Compreensão do Produto.
  • cURL instalado. Ou, você pode usar uma plataforma REST diferente, como Swagger ou a extensão REST Client para VS Code.

Preparar um esquema de planograma

Você precisa ter seus dados de planograma em um formato JSON específico. Consulte 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 imagem de prateleira com luminárias e produtos destacados e suas coordenadas mostradas.

Nota

As marcas mostradas nas imagens não são afiliadas à Microsoft e não indicam qualquer 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. Podem corresponder a polegadas, centímetros ou qualquer outra unidade de medida. O algoritmo de correspondência calcula a relação entre as unidades de análise fotográfica (pixels) e as unidades de planograma.

Modelo de API de planograma

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

Nome Tipo Descrição Obrigatório
width duplo Largura do planograma. Sim
height duplo Altura do planograma. Sim
products ProdutoApiModel Lista de produtos no planograma. Sim
fixtures FixtureApiModel Lista de equipamentos no planograma. Sim
positions PositionApiModel Lista de posições no planograma. Sim

Modelo de API do produto

Descreve um produto no planograma.

Nome Tipo Descrição Obrigatório
id string ID do produto. Sim
name string Nome do produto. Sim
w duplo Largura do produto. Sim
h duplo Altura da luminária. Sim

Modelo de API de fixação

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

Nome Tipo Descrição Obrigatório
id string ID do equipamento. Sim
w duplo Largura da luminária. Sim
h duplo Altura da luminária. Sim
x duplo Deslocamento esquerdo da origem, em unidades de polegadas ou centímetros. Sim
y duplo Deslocamento superior da origem, em unidades de polegadas ou centímetros. Sim

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 do cargo. Sim
productId string ID do produto. Sim
fixtureId string ID do equipamento em que o produto se encontra. Sim
x duplo Deslocamento esquerdo da origem, em unidades de polegadas ou centímetros. Sim
y duplo Deslocamento superior da origem, em unidades de polegadas ou centímetros. Sim

Obter resultados de análise

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

O texto JSON retornado deve ser uma "detectedProducts" estrutura. Ele mostra todos os produtos que foram detetados na prateleira, com os rótulos específicos do produto que você usou na etapa 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 o pedido de correspondência

Junte o conteúdo JSON do seu esquema de planograma com o conteúdo JSON dos resultados da análise, da seguinte 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"
        }
      ]
    }
  ]
}

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

Chamar a API de correspondência de planograma

  1. Copie o seguinte curl comando para 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 seguintes ao comando, se for necessário:

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

  4. Cole o comando editado curl do editor de texto na janela do prompt de comando e execute o comando.

Examinar a resposta

Uma resposta bem-sucedida é retornada em JSON, mostrando os produtos (ou lacunas) detetados em cada posição de planograma. Consulte 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 de correspondência de planograma

ID da posição do planograma emparelhado e o objeto detetado correspondente do resultado de compreensão do produto.

Nome Tipo Descrição Obrigatório
positionId string O ID de posição do planograma correspondia ao objeto detetado correspondente. Não
detectedObject DetectedObjectApiModel Descreve um objeto detetado em uma imagem. Não

Próximos passos