Когнитивный навык анализа изображений

Навык анализа изображений извлекает набор визуальных средств на основе содержимого изображения. Например, можно создать заголовок из изображения, сформировать теги, а также определить знаменитостей и ориентиры. В этой статье приведена справочная документация по навыку анализа изображений. Дополнительные сведения см. в статье "Извлечение текста и сведений из изображений " для инструкций по использованию.

Этот навык использует модели машинного обучения, предоставляемые 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 Массив строк, указывающих возвращаемые типы визуальных компонентов. Допустимые типы визуальных признаков включают:
  • взрослый - обнаруживает, является ли изображение порнографичным (изображает наготу или сексуальный акт), гори (изображает крайнее насилие или кровь) или предложение (также известное как христое содержимое).
  • бренды — обнаруживает различные бренды на изображении, включая приблизительное местоположение.
  • Категории — классифицирует содержимое изображения в соответствии с таксономией, определенной службами ИИ Azure.
  • description — описывает содержимое изображения полным предложением на поддерживаемых языках.
  • faces — определяет наличие лиц. Если присутствует, генерирует координаты, пол и возраст.
  • objects — обнаруживает различные объекты на изображении, в том числе их приблизительное местоположение.
  • tags — помечает изображение подробным списком слов, связанных с содержимым изображения.
Имена визуальных компонентов зависят от регистра. Визуальные функции цвета и imageType устарели, но вы можете получить доступ к этой функции с помощью пользовательского навыка. Ознакомьтесь с документацией по анализу изображений визуального распознавания Azure, в которой поддерживаются визуальные функции.defaultLanguageCode
details Массив строк, указывающих возвращаемые сведения о домене. Допустимые типы визуальных признаков включают:
  • celebrities — идентифицирует знаменитостей, если они обнаружены на изображении.
  • landmarks — определяет ориентиры, если они обнаружены на изображении.

Входные данные навыков

Ввод имени 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, whв пикселях), указывающими размещение внутри изображения. Для прямоугольника 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, leftwidth, 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
               }
            ]

См. также