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.
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
- Debe haber configurado y ejecutado el análisis básico de reconocimiento de productos con la API Product Understanding.
- cURL instalado. O bien, puede usar otra plataforma REST, como Swagger o la extensión de cliente REST para VS Code.
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.
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. | Sí |
height |
double | Alto del planograma. | Sí |
products |
ProductApiModel | Lista de productos en el planograma. | Sí |
fixtures |
FixtureApiModel | Lista de accesorios en el planograma. | Sí |
positions |
PositionApiModel | Lista de posiciones en el planograma. | Sí |
Modelo de API de producto
Describe un producto en el planograma.
Nombre | Escribir | Descripción | Obligatorio |
---|---|---|---|
id |
string | Id. del producto. | Sí |
name |
string | Nombre del producto. | Sí |
w |
double | Ancho del producto. | Sí |
h |
double | Alto del accesorio. | Sí |
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. | Sí |
w |
double | Ancho del accesorio. | Sí |
h |
double | Alto del accesorio. | Sí |
x |
double | Desplazamiento hacia la izquierda desde el origen, en unidades de pulgadas o centímetros. | Sí |
y |
double | Desplazamiento superior desde el origen, en unidades de pulgadas o centímetros. | Sí |
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. | Sí |
productId |
string | Id. del producto. | Sí |
fixtureId |
string | Id. del accesorio en el que está el producto. | Sí |
x |
double | Desplazamiento hacia la izquierda desde el origen, en unidades de pulgadas o centímetros. | Sí |
y |
double | Desplazamiento superior desde el origen, en unidades de pulgadas o centímetros. | Sí |
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
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>"
Realice los siguientes cambios en el comando donde sea necesario:
- Reemplace el valor de
<subscriptionKey>
por la clave del recurso de Vision. - Reemplace el valor de
<endpoint>
por el punto de conexión del recurso de Vision. Por ejemplo:https://YourResourceName.cognitiveservices.azure.com
. - Reemplace el valor de
<body>
por la cadena JSON combinada que preparó en la sección anterior.
- Reemplace el valor de
Abra una ventana de símbolo del sistema.
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 |