이미지 분석 스킬은 이미지 내용을 바탕으로 풍부한 시각적 특징을 추출합니다. 예를 들어, 이미지에서 캡션을 생성하거나, 태그를 생성하거나, 유명인과 랜드마크를 식별할 수 있습니다. 이 문서는 이미지 분석 스킬에 대한 참고 문서입니다. 사용 지침은 ' 이미지에서 텍스트 및 정보 추출 '을 참조하세요.
이 기술은 Foundry Tools에서 제공하는
- 이미지는 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 |
반환할 시각적 특징 유형을 나타내는 문자열 배열입니다. 유효한 시각적 특징 유형은 다음과 같습니다:
defaultLanguageCode에서 시각 특징이 지원되는 Azure 시각 영상 분석 문서를 참고하세요. |
details |
어떤 도메인 특화 세부 정보를 반환할지 나타내는 문자열 배열입니다. 유효한 시각적 특징 유형은 다음과 같습니다:
|
Skill inputs
| Input name | Description |
|---|---|
image |
Complex Type. 현재는 Azure 블롭 인덱서에서 imageAction가 none 이외의 값으로 설정되었을 때 생성되는 "/document/normalized_images" 필드에서만 작동합니다. |
Skill outputs
| Output name | Description |
|---|---|
adult |
출력은 복잡한 유형의 단일 성인 객체로, 불리언 필드(isAdultContent, isGoryContent, isRacyContent)와 이중 타입 점수(adultScore, goreScoreracyScore, )로 구성됩니다. |
brands |
출력은 브랜드 객체들의 배열이며, 객체는 (문자열)과 confidence 점수(double)로 이루어 name 진 복합 타입입니다. 또한 이미지 내 배치를 나타내는 네 개의 경계 박스 좌표(x, y, wh, , 픽셀 단위)를 반환합니다rectangle. 직사각형의 경우, x 는 y 왼쪽 상단에 위치해 있습니다. 왼쪽 아래는 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와 )의 경우, 인덱스에서 모든 객체에 대해 반환 adult 및 description 출력으로 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
}
]