Partager via


Conformité du planogramme d’étagère (préversion)

Un planogramme est un diagramme qui indique l’emplacement correct des produits de vente au détail sur les étagères. L’API Planogram Compliance (Conformité du planogramme) vous permet de comparer les résultats d’analyse d’une photo à l’entrée du planogramme du magasin. Elle retourne les détails de toutes les positions dans le planogramme et indique si un produit a été trouvé à chaque position.

Photo d’une étagère de vente au détail avec les produits détectés délimités et les rectangles de position du planogramme délimités séparément.

Notes

Les marques affichées dans les images ne sont pas affiliées à Microsoft et n’indiquent aucune forme d’approbation de Microsoft ou de produits Microsoft par les propriétaires de la marque, ni d’approbation des propriétaires de la marque ou de leurs produits par Microsoft.

Prérequis

  • Vous devez déjà avoir configuré et exécuté l’analyse de Compréhension des produits de base avec l’API Compréhension des produits.
  • cURL installé. Vous pouvez également utiliser une plateforme REST différente, telle que Swagger ou l’extension client REST pour VS Code.

Préparer un schéma de planogramme

Vous devez avoir vos données de planogramme dans un format JSON spécifique. Consultez les sections ci-dessous pour connaître les définitions de champs.

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

Les coordonnées X et Y sont relatives à une origine supérieure gauche, et la largeur et la hauteur étendent chaque cadre englobant vers le bas et la droite. Le diagramme suivant montre des exemples de système de coordonnées.

Diagramme d’une image d’étagère avec les fixtures et les produits mis en évidence et leurs coordonnées indiquées.

Notes

Les marques affichées dans les images ne sont pas affiliées à Microsoft et n’indiquent aucune forme d’approbation de Microsoft ou de produits Microsoft par les propriétaires de la marque, ni d’approbation des propriétaires de la marque ou de leurs produits par Microsoft.

Les quantités du schéma de planogramme sont en unités non spécifiques. Elles peuvent correspondre à des pouces, des centimètres ou toute autre unité de mesure. L’algorithme de correspondance calcule la relation entre les unités d’analyse photo (pixels) et les unités de planogramme.

Modèle d’API Planogramme

Décrit le planogramme pour les opérations de correspondance de planogramme.

Nom Type Description Obligatoire
width double Largeur du planogramme. Oui
height double Hauteur du planogramme. Oui
products ProductApiModel Liste des produits dans le planogramme. Oui
fixtures FixtureApiModel Liste des fixtures dans le planogramme. Oui
positions PositionApiModel Liste des positions dans le planogramme. Oui

Modèle d’API Produit

Décrit un produit dans le planogramme.

Nom Type Description Obligatoire
id string ID du produit. Oui
name string Nom du produit. Oui
w double Largeur du produit. Oui
h double Hauteur de fixture. Oui

Modèle d’API Fixture

Décrit une fixture (étagère ou matériel similaire) dans un planogramme.

Nom Type Description Obligatoire
id string ID de la fixture. Oui
w double Largeur de la fixture. Oui
h double Hauteur de fixture. Oui
x double Décalage gauche par rapport à l’origine, en unités de pouces ou de centimètres. Oui
y double Décalage supérieur par rapport à l’origine, en unités de pouces ou de centimètres. Oui

Modèle d’API Position

Décrit la position d’un produit dans un planogramme.

Nom Type Description Obligatoire
id string ID de la position. Oui
productId string ID du produit. Oui
fixtureId string ID de la fixture sur laquelle se trouve le produit. Oui
x double Décalage gauche par rapport à l’origine, en unités de pouces ou de centimètres. Oui
y double Décalage supérieur par rapport à l’origine, en unités de pouces ou de centimètres. Oui

Obtenir les résultats de l’analyse

Ensuite, vous devez effectuer un appel d’API Compréhension des produits avec un modèle personnalisé.

Le texte JSON retourné doit être une structure "detectedProducts". Il affiche tous les produits qui ont été détectés sur l’étagère, avec les étiquettes spécifiques au produit que vous avez utilisées lors de l’étape de formation.

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

Préparer la requête de correspondance

Joignez le contenu JSON de votre schéma de planogramme au contenu JSON des résultats de l’analyse, comme suit :

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

Il s’agit du texte que vous allez utiliser dans le corps de votre requête d’API.

Appeler l’API de correspondance de planogramme

  1. Copiez la commande curl ci-après dans un éditeur de texte.

    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. Modifiez la commande comme ci-dessous :

    1. Remplacez la valeur de <subscriptionKey> par votre clé de ressource Vision.
    2. Remplacez la valeur de <endpoint> par votre point de terminaison de ressource Vision. Par exemple : https://YourResourceName.cognitiveservices.azure.com.
    3. Remplacez la valeur de <body> par la chaîne JSON jointe que vous avez préparée dans la section précédente.
  3. Ouvrir une fenêtre d’invite de commandes.

  4. Collez votre commande curl modifiée à partir de l’éditeur de texte dans la fenêtre d’invite de commandes, puis exécutez la commande.

Examiner la réponse

Une réponse correcte est retournée dans JSON, montrant les produits (ou les vides) détectés à chaque position de planogramme. Consultez les sections ci-dessous pour connaître les définitions de champs.

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

Modèle d’API de position de correspondance d’un planogramme

ID de position du planogramme jumelé et objet correspondant détecté à partir du résultat de la compréhension des produits.

Nom Type Description Obligatoire
positionId string ID de position du planogramme correspondant à l’objet détecté correspondant. Non
detectedObject DetectedObjectApiModel Décrit un objet détecté dans une image. Non

Étapes suivantes