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

Note

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе IQ Foundry, управляемого уровня знаний, который преобразует корпоративное содержимое в многократно используемые базы знаний с поддержкой разрешений для агентов на портале Foundry Microsoft.

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

Этот навык использует модели машинного обучения, предоставленные Azure Vision in Foundry Tools. Image Analysis работает с изображениями, соответствующими следующим требованиям:

  • Изображение должно быть представлено в форматах JPEG, PNG, GIF или BMP
  • Размер файла изображения должен быть меньше 4 мегабайт (МБ)
  • Размеры изображения должны превышать 50 x 50 пикселей

Поддерживаемые источники данных для OCR и анализа изображений — это blobs в Хранилище BLOB-объектов Azure и Azure Data Lake Storage (ADLS) Gen2, а также содержимое изображений в Microsoft OneLake. Изображения могут быть отдельными файлами или встроенными изображениями в PDF или другие файлы.

Этот навык реализован с помощью AI Image Analysis API версии 3.2. Если для решения требуется вызвать более новую версию API службы, например версии 4.0, рассмотрите возможность реализации с помощью навыка пользовательского веб-API.

Note

Этот навык связан с Foundry Tools и требует оплачиваемого ресурса для транзакций, превышающих 20 документов на индексатор в день. Выполнение встроенных навыков взимается по существующей цене средств Foundry Standard.

Кроме того, извлечение изображений оплачивается по Поиск с использованием ИИ Azure.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Параметры навыков

Параметры чувствительны к регистру.

Имя параметра Description
defaultLanguageCode Строка, указывающая язык для возврата. Сервис возвращает результаты распознавания в заданном языке. Если этот параметр не указан, значение по умолчанию — «en».

Поддерживаемые языки включают подмножество общедоступных языков Azure Vision. Когда язык вводится в Azure Vision с статусом общего доступа, ожидается задержка до полной интеграции в этот навык.
visualFeatures Массив строк, указывающих типы визуальных признаков для возврата. Допустимые типы визуальных признаков включают:
  • взрослый — определяет, является ли изображение порнографическим (изображает наготу или сексуальный акт), кровавым (изображает экстремальное насилие или кровь) или намекающим (также известно как провокационный контент).
  • brands — определяет различные бренды внутри изображения, включая приблизительное местоположение.
  • категории — классифицирует содержимое изображений согласно таксономии , определённой Foundry Tools.
  • Описание — описывает содержимое изображения полным предложением на поддерживаемых языках.
  • Лица — определяет, есть ли лица. Если он присутствует, генерирует координаты, пол и возраст.
  • Объекты — обнаруживает различные объекты внутри изображения, включая приблизительное местоположение.
  • Теги — отмечает изображение подробным списком слов, связанных с содержимым изображения.
Названия визуальных признаков зависят от регистра. Визуальные функции цвета и imageType устарели, но вы можете получить доступ к этой функции через кастомный навык. Обратитесь к документации Azure Vision Image Analysis о том, какие визуальные признаки поддерживаются с каждым defaultLanguageCode.
details Массив строк, указывающих, какие детали, специфичные для домена, возвращать. Допустимые типы визуальных признаков включают:
  • Знаменитости — идентифицирует знаменитостей, если они обнаружены на изображении.
  • Ориентиры — определяет ориентиры, если они обнаружены на изображении.

Входные параметры навыков

Введите имя Description
image Сложный тип. В настоящее время работает только с полем "/document/normalized_images", которое создаётся индексатором Azure blob, когда imageAction устанавливается на значение, отличное от none.

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

Имя результата Description
adult Выход — это один взрослый объект сложного типа, состоящий из булевых полей (isAdultContent, isGoryContent, isRacyContent) и двойных типов оценок (adultScore, goreScore, ). racyScore
brands Выход — это массив брендовых объектов, где объект представляет собой сложный тип, состоящий из name (строка) и confidence партитура (двойной). Также он возвращает a rectangle с четырьмя ограничивающими рамками координатами (x, y, wh, в пикселях), указывающими на расположение внутри изображения. Для прямоугольника x и y — это верхний левый угол. Внизу слева — x. y+h Верхний правый угол — x+w. y Внизу справа — x+w, y+h.
categories Output — это массив объектов категорий , где каждый объект категории представляет собой комплексный тип, состоящий из name (строки), score (двойной) и опционального detail варианта, содержащий детали знаменитостей или знаковых объектов. См. таксономию категорий для полного списка названий категорий. Деталь — это вложенный комплексный тип. Деталь знаменитости состоит из имени, рейтинга уверенности и рамки с лицом. Ключевой деталь состоит из имени и оценки уверенности.
description Выход — это один объект описания сложного типа, состоящий из списков и tagscaption (массив из Text (строка) и confidence (двойный)).
faces Комплексный тип, состоящий из age, genderи faceBoundingBox имеющий четыре ограничивающих квадратных координаты (в пикселях), указывающие на расположение внутри изображения. Координаты: top, left, width, height.
objects Выход — это массив визуальных объектов признаков. Каждый объект — это комплексный тип, состоящий из object (строка), confidence (двойной), rectangle (с четырьмя координатами ограничивающих рамок, указывающих на расположение внутри изображения) и , parent содержащий имя объекта и уверенность .
tags Выход — это массив объектов imageTag , где объект тегов представляет собой сложный тип, состоящий из name (строка), hint (строка) и confidence (двойной). Добавление подсказки — редкость. Он генерируется только если тег неоднозначен. Например, изображение с тегом «кёрлинг» может содержать намёк на «спорт», чтобы лучше обозначить его содержание.

Примерное определение навыка

{
    "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), вы можете структурировать их в индексе как a 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
               }
            ]

См. также