다음을 통해 공유


Shelf Planogram Compliance(미리 보기)

플래노그램은 진열대에 소매 제품의 올바른 배치를 나타내는 다이어그램입니다. Planogram Compliance API를 사용하면 사진의 분석 결과를 매장의 플래노그램 입력과 비교할 수 있습니다. 플래노그램의 모든 위치에 대한 계정과 각 위치에서 제품이 발견되었는지 여부를 반환합니다.

감지된 제품 윤곽선과 플라노그램 위치 직사각형 윤곽선이 별도로 표시된 소매 선반 사진.

참고 항목

이미지에 표시된 브랜드는 Microsoft와 제휴하지 않으며 브랜드 소유자가 Microsoft 또는 Microsoft 제품을 보증하거나 Microsoft가 브랜드 소유자 또는 해당 제품을 보증한다는 의미를 나타내지 않습니다.

필수 조건

  • 제품 이해 API를 사용하여 기본 제품 이해 분석을 이미 설정하고 실행해야 합니다.
  • cURL 설치 또는 Swagger나 VS Code용 REST 클라이언트 확장과 같은 다른 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 모델

플래노그램 일치 작업에 대한 플래노그램을 설명합니다.

이름 형식 설명 필수
width double 플래노그램의 너비.
height double 플래노그램의 높이.
products ProductApiModel 플래노그램의 제품 목록입니다.
fixtures FixtureApiModel 플래노그램의 고정 장치 목록입니다.
positions PositionApiModel 플래노그램의 위치 목록입니다.

제품 API 모델

플래노그램으로 제품을 설명합니다.

이름 형식 설명 필수
id string 제품의 ID입니다.
name string 제품의 이름입니다.
w double 제품의 너비입니다.
h double 고정 장치의 높이.

픽스쳐 API 모델

플래노그램의 고정 장치(선반 또는 유사한 하드웨어)를 설명합니다.

이름 형식 설명 필수
id string 고정 장치의 ID입니다.
w double 고정 장치의 너비.
h double 고정 장치의 높이.
x double 원점으로부터의 왼쪽 오프셋(인치 또는 센티미터 단위)입니다.
y double 인치 또는 센티미터 단위로 원점으로부터의 상단 오프셋입니다.

위치 API 모델

플래노그램에서 제품의 위치를 설명합니다.

이름 형식 설명 필수
id string 위치의 ID입니다.
productId string 제품의 ID입니다.
fixtureId string 제품이 있는 고정 장치의 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> 값을 Vision 리소스 키로 바꾸세요.
    2. <endpoint> 값을 Vision 리소스 엔드포인트로 바꿉니다. 예: 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와 해당 감지 개체를 페어링합니다.

이름 형식 설명 필수
positionId string 해당 감지된 개체와 일치하는 플래노그램의 위치 ID입니다. 아니요
detectedObject DetectedObjectApiModel 이미지에서 감지된 개체를 설명합니다. 아니요

다음 단계