Compartir vía


Cumplimiento de planogramas del estante (versión preliminar)

Un planograma es un diagrama que indica la ubicación correcta de los productos en los estantes. La API de conformidad del planograma le permite comparar los resultados del análisis de una foto con la entrada del planograma de la tienda. Devuelve una cuenta de todas las posiciones del planograma y si se encontró un producto en cada posición.

Foto de un estante comercial con los productos detectados contorneados y los rectángulos de posición del planograma contorneados por separado.

Nota:

Las marcas que se muestran en las imágenes no están afiliadas a Microsoft y no indican ninguna forma de aprobación de Microsoft ni de productos de Microsoft por parte de los propietarios de la marca, o bien una aprobación de los propietarios de la marca o sus productos por parte de Microsoft.

Requisitos previos

Preparación de un esquema de planograma

Debe tener los datos del planograma en un formato JSON específico. Consulte las siguientes secciones para ver las definiciones 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
    }
  ]
}

Las coordenadas X e Y son relativas a un origen superior izquierdo, y el ancho y alto extienden cada rectángulo delimitador hacia abajo y hacia la derecha. En el siguiente diagrama se muestran ejemplos del sistema de coordenadas.

Diagrama de la imagen de una estantería con los accesorios y productos resaltados y sus coordenadas.

Nota:

Las marcas que se muestran en las imágenes no están afiliadas a Microsoft y no indican ninguna forma de aprobación de Microsoft ni de productos de Microsoft por parte de los propietarios de la marca, o bien una aprobación de los propietarios de la marca o sus productos por parte de Microsoft.

Las cantidades del esquema de planograma se encuentran en unidades no específicas. Pueden corresponder a pulgadas, centímetros o cualquier otra unidad de medida. El algoritmo de coincidencia calcula la relación entre las unidades de análisis de fotos (píxeles) y las unidades del planograma.

Modelo de API de planograma

Describe el planograma para las operaciones de coincidencia de planogramas.

Nombre Escribir Descripción Obligatorio
width double Ancho del planograma.
height double Alto del planograma.
products ProductApiModel Lista de productos en el planograma.
fixtures FixtureApiModel Lista de accesorios en el planograma.
positions PositionApiModel Lista de posiciones en el planograma.

Modelo de API de producto

Describe un producto en el planograma.

Nombre Escribir Descripción Obligatorio
id string Id. del producto.
name string Nombre del producto.
w double Ancho del producto.
h double Alto del accesorio.

Modelo de API de accesorios

Describe un accesorio (estante o hardware similar) en un planograma.

Nombre Escribir Descripción Obligatorio
id string Id. del accesorio.
w double Ancho del accesorio.
h double Alto del accesorio.
x double Desplazamiento hacia la izquierda desde el origen, en unidades de pulgadas o centímetros.
y double Desplazamiento superior desde el origen, en unidades de pulgadas o centímetros.

Modelo de API de posición

Describe la posición de un producto en un planograma.

Nombre Escribir Descripción Obligatorio
id string Id. de posición.
productId string Id. del producto.
fixtureId string Id. del accesorio en el que está el producto.
x double Desplazamiento hacia la izquierda desde el origen, en unidades de pulgadas o centímetros.
y double Desplazamiento superior desde el origen, en unidades de pulgadas o centímetros.

Resultados del análisis

A continuación, debe realizar una llamada API Product Understanding con un modelo personalizado.

El texto JSON devuelto debe ser una estructura "detectedProducts". Muestra todos los productos detectados en el estante, con las etiquetas específicas de producto que usó en la fase de entrenamiento.

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

Preparación de la solicitud de coincidencia

Combine el contenido JSON del esquema de planograma con el contenido JSON de los resultados del análisis, de la siguiente manera:

"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 es el texto que usará en el cuerpo de la solicitud de API.

Llame a la API de coincidencia de planogramas

  1. Copie el comando curl siguiente en un 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. Realice los siguientes cambios en el comando donde sea necesario:

    1. Reemplace el valor de <subscriptionKey> por la clave del recurso de Vision.
    2. Reemplace el valor de <endpoint> por el punto de conexión del recurso de Vision. Por ejemplo: https://YourResourceName.cognitiveservices.azure.com.
    3. Reemplace el valor de <body> por la cadena JSON combinada que preparó en la sección anterior.
  3. Abra una ventana de símbolo del sistema.

  4. Pegue el comando curl editado del editor de texto en la ventana del símbolo del sistema y después ejecute el comando.

Examen de la respuesta

Se devuelve una respuesta correcta en JSON, en la que se muestran los productos (o huecos) detectados en cada posición del planograma. Consulte las siguientes secciones para ver las definiciones 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 posición de coincidencia de planogramas

Identificador de posición del planograma coincidente y el objeto detectado correspondiente del resultado de reconocimiento del producto.

Nombre Escribir Descripción Obligatorio
positionId string Identificador de posición del planograma coincidente con el objeto detectado correspondiente. No
detectedObject DetectedObjectApiModel Describe un objeto detectado en una imagen. No

Pasos siguientes