이미지 분석 인지 능력

이미지 분석 스킬은 이미지 내용을 바탕으로 풍부한 시각적 특징을 추출합니다. 예를 들어, 이미지에서 캡션을 생성하거나, 태그를 생성하거나, 유명인과 랜드마크를 식별할 수 있습니다. 이 문서는 이미지 분석 스킬에 대한 참고 문서입니다. 사용 지침은 ' 이미지에서 텍스트 및 정보 추출 '을 참조하세요.

이 기술은 Foundry Tools에서 제공하는 Azure Vision에서 제공하는 머신러닝 모델을 사용합니다. 이미지 분석 은 다음 요구사항을 충족하는 이미지에 대해 작업합니다:

  • 이미지는 JPEG, PNG, GIF 또는 BMP 형식으로 제공되어야 합니다
  • 이미지의 파일 크기는 4MB 미만이어야 합니다.
  • 이미지의 크기는 50 x 50 픽셀보다 커야 합니다

OCR 및 이미지 분석에 지원되는 데이터 소스는 Azure Blob Storage 및 Azure Data Lake Storage (ADLS) Gen2의 블롭, 그리고 Microsoft OneLake의 이미지 콘텐츠입니다. 이미지는 독립형 파일이거나 PDF 또는 기타 파일에 삽입된 이미지일 수 있습니다.

이 기술은 AI 이미지 분석 API 버전 3.2를 사용하여 구현됩니다. 만약 솔루션이 해당 서비스 API의 최신 버전(예: 버전 4.0)을 호출해야 한다면, Web API custom skill 또는 ImageAnalysisV4 파워 스킬을 사용해 구현하는 것을 고려해 보세요.

Note

이 기술은 Foundry Tools에 묶여 있으며, 인덱서당 하루 20개를 초과하는 거래에 대해 청구 가능한 자원이 필요합니다. 기본 제공 기술의 실행은 기존 Foundry 도구 표준 가격으로 청구됩니다.

또한 이미지 추출은 청구 대상이 Azure AI 검색입니다.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Skill parameters

매개 변수는 대/소문자를 구분합니다.

Parameter name Description
defaultLanguageCode 반환할 언어를 나타내는 문자열입니다. 서비스는 지정된 언어 인식 결과를 반환합니다. 이 매개변수가 지정되어 있지 않으면 기본 값은 "en"입니다.

지원되는 언어에는 Azure Vision의 일반적으로 사용 가능한 언어의 하위 집합이 포함됩니다. Azure Vision에 일반 사용 가능 상태로 새로 도입된 언어는 이 기술에 완전히 통합되기까지 지연이 예상됩니다.
visualFeatures 반환할 시각적 특징 유형을 나타내는 문자열 배열입니다. 유효한 시각적 특징 유형은 다음과 같습니다:
  • 성인 - 이미지가 포르노(누드 또는 성행위 묘사), 잔혹함(극단적인 폭력이나 피 묘사), 또는 암시적(선정적인 내용이라고도 함)인지 감지합니다.
  • 브랜드 - 이미지 내 다양한 브랜드를 감지하며, 대략적인 위치를 포함합니다.
  • 카테고리 - Foundry Tools가 정의한 분류 체계에 따라 이미지 콘텐츠를 분류합니다.
  • 설명 - 지원 언어로 완전한 문장으로 이미지 내용을 설명합니다.
  • 얼굴 - 얼굴이 존재하는지 감지합니다. 존재할 경우 좌표, 성별, 나이를 생성합니다.
  • 객체 - 이미지 내 다양한 객체를 감지하며, 대략적인 위치를 포함합니다.
  • 태그 - 이미지 내용과 관련된 단어 목록을 상세히 나열해 이미지를 태그합니다.
시각적 특징의 이름은 대소문자에 구분됩니다. 색상이미지타입 시각 기능 모두 권장되지 않지만, 커스텀 스킬을 통해 이 기능에 접근할 수 있습니다. 각 defaultLanguageCode에서 시각 특징이 지원되는 Azure 시각 영상 분석 문서를 참고하세요.
details 어떤 도메인 특화 세부 정보를 반환할지 나타내는 문자열 배열입니다. 유효한 시각적 특징 유형은 다음과 같습니다:
  • 셀러브리티 - 이미지에서 유명인이 감지되면 식별합니다.
  • 랜드마크 - 이미지에서 감지된 랜드마크를 식별합니다.

Skill inputs

Input name Description
image Complex Type. 현재는 Azure 블롭 인덱서에서 imageActionnone 이외의 값으로 설정되었을 때 생성되는 "/document/normalized_images" 필드에서만 작동합니다.

Skill outputs

Output name Description
adult 출력은 복잡한 유형의 단일 성인 객체로, 불리언 필드(isAdultContent, isGoryContent, isRacyContent)와 이중 타입 점수(adultScore, goreScoreracyScore, )로 구성됩니다.
brands 출력은 브랜드 객체들의 배열이며, 객체는 (문자열)과 confidence 점수(double)로 이루어 name 진 복합 타입입니다. 또한 이미지 내 배치를 나타내는 네 개의 경계 박스 좌표(x, y, wh, , 픽셀 단위)를 반환합니다rectangle. 직사각형의 경우, xy 왼쪽 상단에 위치해 있습니다. 왼쪽 아래는 x, 입니다 y+h. 오른쪽 상단은 x+w, y입니다. 오른쪽 아래는 x+w, y+h입니다.
categories 출력은 카테고리 객체들의 배열로, 각 카테고리 객체는 (문자열), score (double), 선택적으로 detail 구성된 name 복합 타입으로, 셀러브리티 또는 랜드마크 세부사항을 포함합니다. 전체 분류명 목록은 분류 분류법 을 참조하세요. 디테일은 중첩된 복소체형입니다. 유명인 디테일은 이름, 신뢰도, 그리고 얼굴 경계 상자로 구성됩니다. 랜드마크 디테일은 이름과 신뢰 점수로 구성됩니다.
description 출력은 복잡한 유형의 단일 설명 객체로, 와 caption (문자열)confidence와 (이중)로 구성된 Text 배열 tags 로 구성됩니다.
faces 복소형으로, agegenderfaceBoundingBox 이미지 내 위치를 나타내는 네 개의 경계 상자 좌표(픽셀 단위)를 가집니다. 좌표는 , , leftwidth, 입니다. heighttop
objects 출력은 시각적 특징 객체 배열입니다. 각 객체는 복소형으로, (문자열), confidence (더블), rectangle (이미지 내 위치를 나타내는 네 개의 경계 상자 좌표 포함), 객체 이름과 신뢰도를 포함하는 a parent 로 구성됩니다 object .
tags 출력은 imageTag 객체들의 배열이며, 태그 객체는 (문자열), hint (문자열), confidence (double)로 이루어 name 진 복소형 타입입니다. 힌트가 추가되는 경우는 드뭅니다. 태그가 모호할 때만 생성됩니다. 예를 들어, "컬링"으로 태그된 이미지는 내용을 더 잘 나타내기 위해 "스포츠"라는 뜻을 살짝 넣을 수 있습니다.

샘플 스킬 정의

{
    "description": "Extract image analysis.",
    "@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
    "context": "/document/normalized_images/*",
    "defaultLanguageCode": "en",
    "visualFeatures": [
        "adult",
        "brands",
        "categories",
        "description",
        "faces",
        "objects",
        "tags"
    ],
    "inputs": [
        {
            "name": "image",
            "source": "/document/normalized_images/*"
        }
    ],
    "outputs": [
        {
            "name": "adult"
        },
        {
            "name": "brands"
        },
        {
            "name": "categories"
        },
        {
            "name": "description"
        },
        {
            "name": "faces"
        },
        {
            "name": "objects"
        },
        {
            "name": "tags"
        }
    ]
}

Sample index

단일 객체(예: adultdescription와 )의 경우, 인덱스에서 모든 객체에 대해 반환 adultdescription 출력으로 Collection(Edm.ComplexType) 구조화할 수 있습니다. 출력 함수를 인덱스 필드로 매핑하는 방법에 대한 자세한 내용은 복합 타입에서 얻은 정보 평탄화를 참조하세요.

{
    "fields": [
        {
            "name": "metadata_storage_name",
            "type": "Edm.String",
            "key": true,
            "searchable": true,
            "filterable": false,
            "facetable": false,
            "sortable": true
        },
        {
            "name": "metadata_storage_path",
            "type": "Edm.String",
            "searchable": true,
            "filterable": false,
            "facetable": false,
            "sortable": true
        },
        {
            "name": "content",
            "type": "Edm.String",
            "sortable": false,
            "searchable": true,
            "filterable": false,
            "facetable": false
        },
        {
            "name": "adult",
            "type": "Edm.ComplexType",
            "fields": [
                {
                    "name": "isAdultContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "isGoryContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "isRacyContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "adultScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "goreScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "racyScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                }
            ]
        },
        {
            "name": "brands",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "rectangle",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "x",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "y",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "w",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "h",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "categories",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "score",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "detail",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "celebrities",
                            "type": "Collection(Edm.ComplexType)",
                            "fields": [
                                {
                                    "name": "name",
                                    "type": "Edm.String",
                                    "searchable": true,
                                    "filterable": false,
                                    "facetable": false
                                },
                                {
                                    "name": "faceBoundingBox",
                                    "type": "Collection(Edm.ComplexType)",
                                    "fields": [
                                        {
                                            "name": "x",
                                            "type": "Edm.Int32",
                                            "searchable": false,
                                            "filterable": false,
                                            "facetable": false
                                        },
                                        {
                                            "name": "y",
                                            "type": "Edm.Int32",
                                            "searchable": false,
                                            "filterable": false,
                                            "facetable": false
                                        }
                                    ]
                                },
                                {
                                    "name": "confidence",
                                    "type": "Edm.Double",
                                    "searchable": false,
                                    "filterable": false,
                                    "facetable": false
                                }
                            ]
                        },
                        {
                            "name": "landmarks",
                            "type": "Collection(Edm.ComplexType)",
                            "fields": [
                                {
                                    "name": "name",
                                    "type": "Edm.String",
                                    "searchable": true,
                                    "filterable": false,
                                    "facetable": false
                                },
                                {
                                    "name": "confidence",
                                    "type": "Edm.Double",
                                    "searchable": false,
                                    "filterable": false,
                                    "facetable": false
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name": "description",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "tags",
                    "type": "Collection(Edm.String)",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "captions",
                    "type": "Collection(Edm.ComplexType)",
                    "fields": [
                        {
                            "name": "text",
                            "type": "Edm.String",
                            "searchable": true,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "confidence",
                            "type": "Edm.Double",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "faces",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "age",
                    "type": "Edm.Int32",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "gender",
                    "type": "Edm.String",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "faceBoundingBox",
                    "type": "Collection(Edm.ComplexType)",
                    "fields": [
                        {
                            "name": "top",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "left",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "width",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "height",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "objects",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "object",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "rectangle",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "x",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "y",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "w",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "h",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                },
                {
                    "name": "parent",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "object",
                            "type": "Edm.String",
                            "searchable": true,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "confidence",
                            "type": "Edm.Double",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "tags",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "hint",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                }
            ]
        }
    ]
}

샘플 출력 필드 매핑

대상 필드는 복잡한 필드나 집합일 수 있습니다. 인덱스 정의는 모든 하위 필드를 지정합니다.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/normalized_images/*/adult",
        "targetFieldName": "adult"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/brands/*",
        "targetFieldName": "brands"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/categories/*",
        "targetFieldName": "categories"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/description",
        "targetFieldName": "description"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/faces/*",
        "targetFieldName": "faces"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/objects/*",
        "targetFieldName": "objects"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/tags/*",
        "targetFieldName": "tags"
    }

출력 필드 매핑의 변형(중첩된 속성)

유명인이나 랜드마크 같은 하위 속성에 출력 필드 매핑을 정의할 수 있습니다. 이 경우에는 인덱스 스키마에 각 세부 정보를 구체적으로 담는 필드가 있는지 확인하세요.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/celebrities/*",
        "targetFieldName": "celebrities"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/landmarks/*",
        "targetFieldName": "landmarks"
    }

Sample input

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "image": {
                    "data": "BASE64 ENCODED STRING OF A JPEG IMAGE",
                    "width": 500,
                    "height": 300,
                    "originalWidth": 5000,
                    "originalHeight": 3000,
                    "rotationFromOriginal": 90,
                    "contentOffset": 500,
                    "pageNumber": 2
                }
            }
        }
    ]
}

Sample output

{
  "values": [
    {
      "recordId": "1",
      "data": {
        "categories": [
          {
            "name": "abstract_",
            "score": 0.00390625
          },
          {
            "name": "people_",
            "score": 0.83984375,
            "detail": {
              "celebrities": [
                {
                  "name": "Satya Nadella",
                  "faceBoundingBox": [
                        {
                            "x": 273,
                            "y": 309
                        },
                        {
                            "x": 395,
                            "y": 309
                        },
                        {
                            "x": 395,
                            "y": 431
                        },
                        {
                            "x": 273,
                            "y": 431
                        }
                    ],
                  "confidence": 0.999028444
                }
              ],
              "landmarks": [ ]
            }
          }
        ],
        "adult": {
          "isAdultContent": false,
          "isRacyContent": false,
          "isGoryContent": false,
          "adultScore": 0.0934349000453949,
          "racyScore": 0.068613491952419281,
          "goreScore": 0.08928389008070282
        },
        "tags": [
          {
            "name": "person",
            "confidence": 0.98979085683822632
          },
          {
            "name": "man",
            "confidence": 0.94493889808654785
          },
          {
            "name": "outdoor",
            "confidence": 0.938492476940155
          },
          {
            "name": "window",
            "confidence": 0.89513939619064331
          }
        ],
        "description": {
          "tags": [
            "person",
            "man",
            "outdoor",
            "window",
            "glasses"
          ],
          "captions": [
            {
              "text": "Satya Nadella sitting on a bench",
              "confidence": 0.48293603002174407
            }
          ]
        },
        "faces": [
          {
            "age": 44,
            "gender": "Male",
            "faceBoundingBox": [
                {
                    "x": 1601,
                    "y": 395
                },
                {
                    "x": 1653,
                    "y": 395
                },
                {
                    "x": 1653,
                    "y": 447
                },
                {
                    "x": 1601,
                    "y": 447
                }
            ]
          }
        ],
        "objects": [
          {
            "rectangle": {
              "x": 25,
              "y": 43,
              "w": 172,
              "h": 140
            },
            "object": "person",
            "confidence": 0.931
          }
        ],
        "brands":[  
           {  
              "name":"Microsoft",
              "confidence": 0.903,
              "rectangle":{  
                 "x":20,
                 "y":97,
                 "w":62,
                 "h":52
              }
           }
        ]
      }
    }
  ]
}

Error cases

다음 오류 경우에는 어떤 요소도 추출되지 않습니다.

Error Code Description
NotSupportedLanguage 제공된 문구는 지원되지 않습니다.
InvalidImageUrl 이미지 URL이 형식이 엉망이거나 접근 불가능합니다.
InvalidImageFormat 입력 데이터는 유효한 이미지가 아닙니다.
InvalidImageSize 입력 이미지가 너무 큽니다.
NotSupportedVisualFeature 지정된 특징 유형이 유효하지 않습니다.
NotSupportedImage 예를 들어, 아동 포르노 같은 근거 없는 이미지.
InvalidDetails 지원되지 않는 도메인 특화 모델.

만약 경로와 "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks"비슷한 오류가 발생하면 경로를 확인하세요. 유명인과 랜드마크 detail모두 .

"categories":[  
      {  
         "name":"building_",
         "score":0.97265625,
         "detail":{  
            "landmarks":[  
               {  
                  "name":"Forbidden City",
                  "confidence":0.92013400793075562
               }
            ]

See also