Поделиться через


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

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

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

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

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

Этот навык реализуется с помощью API анализа изображений ИИ версии 3.2. Если решение требует вызова более новой версии ЭТОГО API службы (например, версии 4.0), рассмотрите возможность реализации с помощью пользовательского навыка веб-API или использования навыка питания ImageAnalysisV4.

Примечание.

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

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

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

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

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

Наименование параметра Описание
defaultLanguageCode Строка, указывающая язык для возврата данных. Служба возвращает результаты распознавания на указанном языке. Если этот параметр не указан, значение по умолчанию — en.

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

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

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

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

Имя вывода Описание
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
              }
           }
        ]
      }
    }
  ]
}

Варианты ошибок

При указанных ниже ошибках никакие элементы не извлекаются.

Код ошибки Описание
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
               }
            ]

См. также