你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

货架陈列图合规性(预览)

货架图是指示在货架上正确放置零售产品的图表。 通过货架图合规性 API,可以将照片中的分析结果与商店的货架图输入进行比较。 这可返回货架图中所有位置的帐户,以及每个位置是否都有产品。

零售货架的照片,其中显示检测到的产品,并单独显示货位位置矩形。

注意

图像中显示的品牌不属于 Microsoft,不表示品牌所有者对 Microsoft 或 Microsoft 产品任何形式的认可,也不表示 Microsoft 对品牌所有者或其产品的认可。

先决条件

  • 必须已使用产品理解分析 API 设置并运行基本产品理解分析
  • 已安装 cURL。 或者,可以使用其他 REST 平台,例如 Swagger 或 VS Code 的 REST 客户端扩展。

准备货架图架构

需要以特定的 JSON 格式设置货架图数据。 请参阅以下部分了解字段定义。

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

X 和 Y 坐标相对于左上角原点,宽度和高度将每个边界框向下和向右延伸。 下图显示坐标系统的示例。

货位图像图,突出显示固定物和产品,以及其坐标。

注意

图像中显示的品牌不属于 Microsoft,不表示品牌所有者对 Microsoft 或 Microsoft 产品任何形式的认可,也不表示 Microsoft 对品牌所有者或其产品的认可。

货架图架构中的数量以非特定单位表示。 这些数量可对应于英寸、厘米或任何其他度量单位。 匹配算法可计算照片分析单位(像素)与货架图单位之间的关系。

货架图 API 模型

描述用于货架图匹配操作的货架图。

名称 Type 描述 必需
width Double 货架图的宽度。
height double 货架图的高度。
products ProductApiModel 货架图中的产品列表。
fixtures FixtureApiModel 货架图中的固定物列表。
positions PositionApiModel 货架图中的位置列表。

产品 API 模型

描述货架图中的产品。

名称 Type 描述 必须
id string 产品的 ID。
name 字符串 产品的名称。
w double 产品的宽度。
h double 固定物的高度。

固定物 API 模型

描述货架图中的固定物(货架或类似硬件)。

名称 Type 描述 必须
id string 固定物的 ID。
w double 固定物的宽度。
h double 固定物的高度。
x double 原点向左的偏移量,以英寸或厘米为单位。
y double 原点向上的偏移量,以英寸或厘米为单位。

位置 API 模型

描述货架图中产品的位置。

名称 Type 描述 必须
id string 位置的 ID。
productId 字符串 产品的 ID。
fixtureId 字符串 产品所在固定物的 ID。
x double 原点向左的偏移量,以英寸或厘米为单位。
y double 原点向上的偏移量,以英寸或厘米为单位。

获取分析结果

接下来,需要使用自定义模型执行产品理解 API 调用。

返回的 JSON 文本应为 "detectedProducts" 结构。 这可显示货位上检测到的所有产品,以及训练阶段中使用的产品特定标签。

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

准备匹配的请求

将货架图架构的 JSON 内容与分析结果的 JSON 内容联接,如下所示:

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

该文本将在 API 请求正文中使用。

调用货架图匹配 API

  1. 将以下 curl 命令复制到文本编辑器中。

    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. 必要时在命令中进行如下更改:

    1. <subscriptionKey> 的值替换为视觉资源密钥。
    2. <endpoint> 的值替换为视觉资源终结点。 例如:https://YourResourceName.cognitiveservices.azure.com
    3. <body> 的值替换为在上一部分准备的联接 JSON 字符串。
  3. 打开命令提示符窗口。

  4. 将文本编辑器中编辑的 curl 命令粘贴到命令提示符窗口,然后运行命令。

检查响应

JSON 中会返回成功响应,显示在每个货架图位置检测到的产品(或间隙)。 请参阅以下部分了解字段定义。

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

货架图匹配位置 API 模型

根据产品理解结果,对货架图位置 ID 和对应检测到的对象进行匹配。

名称 Type 描述 必须
positionId string 货架图中的位置 ID 与对应检测到的对象匹配。
detectedObject DetectedObjectApiModel 描述在图像中检测到的对象。

后续步骤