你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注释
Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它还支持 Foundry IQ,该知识层将企业内容转换为 Microsoft Foundry 门户中代理的可重用权限感知知识库。
图像分析技能基于图像内容提取丰富的视觉特征。 例如,你可以从图片生成说明,生成标签,或识别名人和地标。 本文为 图像分析 技能的参考文档。 请参阅“ 从图片中提取文本和信息 ”的使用说明。
该技能使用了 Foundry Tools 中
- 图片必须以JPEG、PNG、GIF或BMP格式呈现
- 映像的文件大小必须小于 4 MB(MB)
- 图像尺寸必须大于50 x 50像素
支持的OCR和图像分析数据源包括Azure Blob 存储和Azure Data Lake Storage (ADLS) Gen2中的blobs,以及Microsoft OneLake中的图像内容。 图片可以是独立文件,也可以是PDF或其他文件中的嵌入图片。
该技能通过 AI 图像分析 API 3.2 版本实现。 如果解决方案需要调用较新版本的服务 API(如版本 4.0),请考虑通过 自定义 Web API 技能实现。
注释
这项技能依赖于 Foundry Tools,并且需要 一个可计费的资源 来处理每个索引器每天超过 20 份文档的交易。 执行内置技能按现有的 Foundry 工具标准价格收费。
此外,图像提取按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 (字符串)和 confidence 一个分数(双倍)组成。 它还返回带有四个包围框坐标(rectangle像素xyw单位)的 ah,表示图像中的位置。 对于矩形, 和 xy 是左上角。 左下角为 x, y+h。 右上角是 x+w, y。 右下角是 x+w, y+h。 |
categories |
输出是一个 类别 对象数组,每个类别对象是一个复类型,由 name 包含名人或里程碑细节的(字符串)、 score (双重)和可选 detail 组成。 完整类别名称列表请参见 分类分类法 。 细节是嵌套复类型。 名人详情包括姓名、信心分数和面部边界框。 一个标志性细节包括姓名和信心评分。 |
description |
输出是一个复杂类型的单一描述对象,由 和 tags 的列表caption组成(由 (字符串) 和 Text (double) 组成的数组confidence)。 |
faces |
复杂类型, age由 、 gender、 组成,并 faceBoundingBox 具有四个边界框坐标(以像素为单位),表示图像中的位置。 坐标为 top, , leftwidth, height, 。 |
objects |
输出是一组 可视化特征对象。 每个对象是一个复类型,由(字符串)、 object (双重)、 confidence (带有四个边界框坐标表示图像中的位置)和包含对象名称和置信度的arectangle组成parent。 |
tags |
输出是 imageTag 对象数组,其中标签对象是一个复类型,由 name (字符串)、 hint (字符串)和 confidence (重复) 组成。 加入提示的做法很少见。 只有当标签不明确时才会生成。 例如,标注为“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) 返回 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
}
}
]
}
}
]
}
错误案例
以下错误情况下,不会提取任何元素。
| 错误代码 | 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
}
]