Когнитивный навык анализа изображений
Навык анализа изображений извлекает набор визуальных средств на основе содержимого изображения. Например, можно создать заголовок из изображения, сформировать теги, а также определить знаменитостей и ориентиры. В этой статье приведена справочная документация по навыку анализа изображений. Дополнительные сведения см. в статье "Извлечение текста и сведений из изображений " для инструкций по использованию.
Этот навык использует модели машинного обучения, предоставляемые Azure AI Vision в службах ИИ Azure. Анализ изображений работает на изображениях, которые отвечают следующим требованиям:
- Изображение должно быть представлено в формате JPEG, PNG, GIF или BMP
- Размер файла изображения должен быть меньше 4 МБ.
- Размеры изображения должны быть больше 50 x 50 пикселей.
Этот навык реализуется с помощью API анализа изображений ИИ версии 3.2. Если решение требует вызова более новой версии API службы (например, версии 4.0), рассмотрите возможность реализации с помощью пользовательского навыка веб-API.
Примечание.
Этот навык привязан к службам ИИ Azure и требует оплачиваемого ресурса для транзакций, превышающих 20 документов на индексатор в день. За выполнение встроенных навыков взимается плата за существующие службы ИИ Azure по мере использования.
Кроме того, извлечение изображений взимается с помощью службы "Поиск ИИ Azure".
@odata.type
Microsoft.Skills.Vision.ImageAnalysisSkill
Параметры навыков
Параметры зависят от регистра.
Наименование параметра | Description |
---|---|
defaultLanguageCode |
Строка, указывающая язык для возврата данных. Служба возвращает результаты распознавания на указанном языке. Если этот параметр не указан, значение по умолчанию — en. Поддерживаемые языки включают подмножество общедоступных языков Azure AI Vision. Когда язык вновь появился с общим состоянием доступности в службе распознавания искусственного интеллекта, ожидается задержка, прежде чем они полностью интегрированы в этот навык. |
visualFeatures |
Массив строк, указывающих возвращаемые типы визуальных компонентов. Допустимые типы визуальных признаков включают:
defaultLanguageCode |
details |
Массив строк, указывающих возвращаемые сведения о домене. Допустимые типы визуальных признаков включают:
|
Входные данные навыков
Ввод имени | Description |
---|---|
image |
Сложный тип. В настоящее время используется только поле "/document/normalized_images", созданное индексатором BLOB-объектов Azure, если imageAction задано значение, отличное от none значения. |
Выходные данные навыка
Имя вывода | Description |
---|---|
adult |
Выходные данные — это один взрослый объект сложного типа, состоящий из логических полей (isAdultContent , isGoryContent , isRacyContent ) и двойных показателей типов (adultScore , goreScore , racyScore ). |
brands |
Выходные данные — это массив объектов фирменной марки , где объект является сложным типом, состоящим из name (string) и показателем confidence (double). Он также возвращает rectangle координаты с четырьмя ограничивающими прямоугольниками (x , y , w h в пикселях), указывающими размещение внутри изображения. Для прямоугольника x и y в левом верхнем углу. В левом нижнем углу x : . y+h Верхний правый : x+w , y . В правом нижнем углу x+w : y+h . |
categories |
Выходные данные — это массив объектов категорий, где каждый объект категории является сложным типом, состоящим из name (string), score (double), и необязательным detail , содержащим сведения о знаменитости или ориентире. Полный список имен категорий см. в таксономии категории. Подробности — это вложенный сложный тип. Знаменитость детали состоит из имени, оценки достоверности и ограничивающей рамки лица. Ориентир состоит из имени и оценки достоверности. |
description |
Выходные данные — это один объект описания сложного типа, состоящий из списков tags и caption (массив, состоящий из Text (string) и confidence (double)). |
faces |
Сложный тип, состоящий из age , gender и faceBoundingBox имеющий четыре ограничивающие прямоугольники координаты (в пикселях), указывающие размещение внутри изображения. Координаты : top , left width , height . |
objects |
Выходные данные — это массив объектов визуальных функций. Каждый объект представляет собой сложный тип, состоящий из object (string), confidence (double), rectangle (с четырьмя ограничивающими координатами прямоугольника, указывающими на размещение внутри изображения), а parent также тот, который содержит имя объекта и достоверность. |
tags |
Выходные данные — это массив объектов imageTag, где объект тега является сложным типом, состоящим из name (string), hint (string) и 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
}
}
]
}
}
]
}
Варианты ошибок
При указанных ниже ошибках никакие элементы не извлекаются.
Код ошибки | 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
}
]