画像分析スキルでは、画像の内容に基づいて、さまざまな視覚的特徴のセットを抽出できます。 たとえば、イメージからキャプションを生成したり、タグを生成したり、セレブリティやランドマークを特定したりできます。 この記事は、画像分析スキルのリファレンス ドキュメントです。 使用手順については、画像からのテキストや情報の抽出に関する記事を参照してください。
このスキルでは、Azure AI サービスの Azure AI Vision によって提供される機械学習モデルが使用されます。 画像分析は、次の要件を満たす画像で動作します。
- 画像は、JPEG、PNG、GIF、または BMP 形式で表示されている
- イメージのファイル サイズが 4 メガバイト (MB) 未満である
- イメージのディメンションが 50 x 50 ピクセルよりも大きい値である
OCR と画像分析でサポートされているデータ ソースは、Azure Blob Storage と Azure Data Lake Storage (ADLS) Gen2 の BLOB と OneLake の画像コンテンツです。 画像は、スタンドアロン ファイルまたは PDF またはその他のファイルに埋め込まれた画像にすることができます。
このスキルは、 AI Image Analysis API バージョン 3.2 を使用して実装されます。 ソリューションで新しいバージョンのサービス API (バージョン 4.0 など) を呼び出す必要がある場合は、 Web API カスタム スキルを使用して実装することを検討してください。
注
このスキルは Azure AI サービスにバインドされており、1 日にインデクサーあたり 20 ドキュメントを超えるトランザクションには課金対象リソースが必要です。 組み込みスキルの実行は、既存の Azure AI サービス Standard 価格で課金されます。
さらに、画像抽出は Azure AI Searchによって課金。
@odata.type
Microsoft.Skills.Vision.ImageAnalysisSkill
スキルのパラメーター
パラメーターの大文字と小文字は区別されます。
パラメーター名 | 説明 |
---|---|
defaultLanguageCode |
結果を返す言語を示す文字列。 サービスは、指定された言語で認識結果を返します。 このプロパティが指定されていない場合の既定値は "en" です。 サポートされている言語には、Azure AI Vision の 一部の言語 が含まれます。 AI Vision サービスに一般提供状態の言語が新しく導入されると、このスキル内で完全に統合されるまでに遅延が予想されます。 |
visualFeatures |
結果として返すビジュアル フィーチャー型を示す文字列の並び。 有効なビジュアル フィーチャー型には以下があります。
defaultLanguageCode を参照してください。 |
details |
結果として返すドメイン固有の詳細を示す文字列の並び. 有効なビジュアル フィーチャー型には以下があります。
|
スキルの入力
入力名 | 説明 |
---|---|
image |
複合型。 現在は "/document/normalized_images" フィールドでのみ機能し、imageAction が none 以外の値に設定されている場合に、Azure BLOB インデクサーによって生成されます。 |
スキルの出力
出力名 | 説明 |
---|---|
adult |
出力は、単一の adult オブジェクトです。複合型のオブジェクトで、ブール型のフィールド (isAdultContent 、isGoryContent 、isRacyContent ) と double 型のスコア (adultScore 、goreScore 、racyScore ) から成ります。 |
brands |
出力は brand オブジェクトの配列で、オブジェクトは、name (文字列) と confidence スコア (double) から成る複合型になっています。 また、画像内における境界ボックスの配置を示す 4 つの座標 (ピクセル単位の rectangle 、x 、y 、w ) と共に h が返されます。 四角形の場合、x , y が左上です。 左下は x , y+h です。 右上は x+w , y です。 右下は x+w , y+h です。 |
categories |
出力は category オブジェクトの配列で、各 category オブジェクトは、name (文字列)、score (double)、オプションの detail (著名人またはランドマークの詳細を含む) から成る複合型になっています。 カテゴリ名の全一覧については、カテゴリの分類に関する記事を参照してください。 detail は入れ子になった複合型です。 著名人の詳細は、名前、信頼度スコア、顔の境界ボックスから成ります。 ランドマークの詳細は、名前と信頼度スコアから成ります。 |
description |
出力は、複合型の単一の説明オブジェクトで、tags (caption (文字列) と Text (double) から成る配列) と confidence のリストから成ります。 |
faces |
age と gender 、そして画像内における境界ボックスの配置を示す 4 つの座標 (ピクセル) を含む faceBoundingBox から成る複合型です。 座標は top 、left 、width 、height です。 |
objects |
出力は、ビジュアル フィーチャー オブジェクトの配列です。 各オブジェクトは複合型であり、object (文字列)、confidence (double)、rectangle (境界ボックスの 4 つの座標によって画像内における配置が示されます)、そしてオブジェクトの名前と信頼度を含む parent から成ります。 |
tags |
出力は imageTag オブジェクトの配列で、タグ オブジェクトは name (文字列)、hint (文字列)、confidence (double) から成る複合型です。 ヒントが追加されるのはまれです。 タグがあいまいである場合にのみ生成されます。 たとえば、"カーリング" としてタグ付けされた画像には、その内容がわかりやすいよう "スポーツ" というヒントが割り当てられます。 |
サンプル スキル定義
{
"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"
}
]
}
サンプルのインデックス
単一のオブジェクト (adult
、description
など) について、それらをインデックス内の Collection(Edm.ComplexType)
として構造化することで、そのすべての adult
と description
の出力を取得できます。 インデックスのフィールドへの出力のマッピングについて詳しくは、「複合型から情報をフラット化する」を参照してください。
{
"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"
}
サンプル入力
{
"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
}
}
}
]
}
サンプル出力
{
"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
}
}
]
}
}
]
}
エラーになる場合
次のエラーが発生した場合、要素は抽出されません。
エラー コード | 説明 |
---|---|
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
}
]