Note
Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。
影像分析技能會根據影像內容提取豐富的視覺特徵。 例如,你可以從圖片生成說明文字、產生標籤,或辨識名人與地標。 本文為 影像分析 技能的參考文件。 請參閱「 從影像中擷取文字與資訊 」的使用說明。
此技能使用了 Foundry Tools 中
- 圖片必須以 JPEG、PNG、GIF 或 BMP 格式呈現
- 影像檔案大小必須小於4兆位元組(MB)
- 影像尺寸必須大於50 x 50像素
支援用於 OCR 與影像分析的資料來源包括 Azure Blob 儲存體 與 Azure Data Lake Storage (ADLS) Gen2 中的 blobs,以及 Microsoft OneLake 中的影像內容。 圖片可以是獨立檔案,也可以是嵌入在 PDF 或其他檔案中的圖片。
此技能是透過 AI 影像分析 API 3.2 版本實作的。 如果你的解決方案需要呼叫該服務 API 的更新版本,例如 4.0 版本,請考慮透過 自訂網頁 API 技能來實作。
Note
此技能綁定於 Foundry Tools,且每日每位索引器處理超過 20 份文件的交易,需 提供可計費資源 。 內建技能的執行依現有 的 Foundry Tools 標準價格收費。
此外,影像擷取可計費Azure AI 搜尋服務。
@odata.type
Microsoft.Skills.Vision.ImageAnalysisSkill
技能參數
參數依大小寫區分。
| 參數名稱 | Description |
|---|---|
defaultLanguageCode |
一個字串指示要回傳的語言。 服務回傳識別結果為指定的語言。 如果沒有指定這個參數,預設值就是「en」。 支援的語言包括 Azure Vision 的部分 普遍可用語言。 當語言以一般可用性狀態新引入 Azure Vision 時,預期會延遲才能完全整合進這項技能。 |
visualFeatures |
一組字串表示要回傳的視覺特徵類型。 有效的視覺特徵類型包括:
defaultLanguageCode 都支援視覺特徵。 |
details |
一組字串陣列指示要回傳哪些領域特定的細節。 有效的視覺特徵類型包括:
|
技能輸入
| 輸入名稱 | Description |
|---|---|
image |
複雜類型。 目前只能用「/document/normalized_images」欄位,該欄位由 Azure blob 索引器產生,當 imageAction 設定為非 none 時。 |
技能產出
| 輸出名稱 | Description |
|---|---|
adult |
輸出是一個複數型別的單一成人物件,包含布林欄位(isAdultContent, isGoryContent, isRacyContent) 和雙重型別分數(adultScore, goreScoreracyScore, )。 |
brands |
輸出是一個品牌物件陣列,物件為由(字串)和name分數(double)組成confidence的複型態。 它還會回傳一個帶有四個包圍框座標(rectangle像素xyw單位)的 ah,表示影像中的位置。 對於矩形, 和 xy 是左上角。 左下角為 x, y+h。 右上角為 x+w, y。 右下角為 x+w, y+h。 |
categories |
輸出是一個 類別 物件陣列,每個類別物件是一個複雜型態,包含 name 一個(字串)、 score (雙重)和可選 detail 物件,包含名人或地標細節。 完整分類名稱清單請參閱 分類分類法 。 細節是一種巢狀複數類型。 名人細節包含姓名、信心分數和臉部框框。 一個里程碑細節包括姓名和信心分數。 |
description |
輸出是一個複雜型別的單一描述物件,由與tags的列表組成(由(字串)和caption(雙重)組成Text的陣列confidence)。 |
faces |
複數型態由 age、 gender、 組成,並 faceBoundingBox 有四個包圍框座標(以像素計)表示影像中的位置。 座標為 top, left, width, height。 |
objects |
輸出是一個 視覺特徵物件陣列。 每個物件都是複數類型,由 object (字串)、 confidence (雙重)、 rectangle (含四個邊界框座標表示影像中的位置)以及包含物件名稱與信心的 a parent 組成。 |
tags |
輸出是一個 imageTag 物件陣列,其中標籤物件是一個複型態,由 name (string)、 hint (string) 和 confidence (double) 組成。 加入提示的情況很少見。 只有當標籤不明確時才會產生。 例如,標註為「curling」的圖片可能會帶有「sports」的暗示,以更好地標示內容。 |
範例技能定義
{
"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) to, adult return 和 description output,對所有物件進行。 欲了解更多關於將輸出映射到索引欄位的資訊,請參閱 「從複雜型態中平面化資訊」。
{
"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
}
}
]
}
}
]
}
錯誤案例
以下錯誤情況下,不會提取任何元素。
| 錯誤碼 | Description |
|---|---|
NotSupportedLanguage |
所提供的語言不被支援。 |
InvalidImageUrl |
圖片網址格式錯誤或無法存取。 |
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
}
]