Análise de Imagem Competências cognitivas

A competência Análise de Imagem extrai um conjunto rico de características visuais com base no conteúdo da imagem. Por exemplo, pode gerar uma legenda a partir de uma imagem, gerar etiquetas ou identificar celebridades e pontos de referência. Este artigo é a documentação de referência para a competência de Análise de Imagens . Consulte Extrair texto e informações das imagens para instruções de utilização.

Esta competência utiliza os modelos de aprendizagem automática fornecidos pela Azure Vision na Foundry Tools. A Análise de Imagens funciona com imagens que cumprem os seguintes requisitos:

  • A imagem deve ser apresentada em formato JPEG, PNG, GIF ou BMP
  • O tamanho do ficheiro da imagem deve ser inferior a 4 megabytes (MB)
  • As dimensões da imagem devem ser superiores a 50 x 50 píxeis

Fontes de dados suportadas para OCR e análise de imagem são blobs no Armazenamento de Blobs do Azure e Azure Data Lake Storage (ADLS) Gen2, e conteúdo de imagem no Microsoft OneLake. As imagens podem ser ficheiros autónomos ou imagens incorporadas num PDF ou outros ficheiros.

Esta competência é implementada usando a API de Análise de Imagens de IA versão 3.2. Se a sua solução exigir chamar uma versão mais recente dessa API de serviço (como a versão 4.0), considere implementar através da Web API skill ou usar a ImageAnalysisV4 power skill.

Note

Esta competência está vinculada ao Foundry Tools e requer um recurso faturável para transações que ultrapassem 20 documentos por indexador por dia. A execução das competências integradas é cobrada ao preço padrão existente da Foundry Tools.

Além disso, a extração da imagem é faturável por Pesquisa de IA do Azure.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Skill parameters

Os parâmetros são distinguíveis de maiúsculas minúsculas.

Parameter name Description
defaultLanguageCode Uma cadeia que indica a língua a devolver. O serviço devolve resultados de reconhecimento numa linguagem especificada. Se este parâmetro não for especificado, o valor padrão é "en".

As linguagens suportadas incluem um subconjunto de linguagens geralmente disponíveis do Azure Vision. Quando uma linguagem é recentemente introduzida com estatuto de disponibilidade geral no Azure Vision, espera-se um atraso até que esteja totalmente integrada nesta competência.
visualFeatures Um conjunto de cadeias que indicam os tipos de características visuais a devolver. Tipos válidos de características visuais incluem:
  • Adulto - deteta se a imagem é pornográfica (mostra nudez ou um ato sexual), sangrenta (mostra violência extrema ou sangue) ou sugestiva (também conhecida como conteúdo picante).
  • Marcas - deteta várias marcas dentro de uma imagem, incluindo a localização aproximada.
  • categorias - categoriza o conteúdo da imagem de acordo com uma taxonomia definida pela Foundry Tools.
  • Descrição - Descreve o conteúdo da imagem com uma frase completa nas línguas suportadas.
  • Rostos - deteta se há rostos presentes. Se presente, gera coordenadas, género e idade.
  • Objetos - deteta vários objetos dentro de uma imagem, incluindo a localização aproximada.
  • Tags - Etiqueta a imagem com uma lista detalhada de palavras relacionadas com o conteúdo da imagem.
Os nomes das características visuais são distintos de maiúsculas e maiúsculas. Tanto as funcionalidades visuais de cor como de imageType foram obsoletas, mas pode aceder a esta funcionalidade através de uma habilidade personalizada. Consulte a documentação Azure Vision Image Analysis em que características visuais são suportadas por cada defaultLanguageCode.
details Um array de cadeias que indicam quais os detalhes específicos do domínio a devolver. Tipos válidos de características visuais incluem:
  • Celebridades - identifica celebridades se detetadas na imagem.
  • Pontos de referência - identifica pontos de referência se detetados na imagem.

Skill inputs

Input name Description
image Complex Type. Atualmente só funciona com o campo "/document/normalized_images", produzido pelo indexador de blob Azure quando imageAction está definido para um valor diferente de none.

Skill outputs

Output name Description
adult Output é um único objeto adulto de um tipo complexo, composto por campos booleanos (isAdultContent, isGoryContent, isRacyContent) e pontuações de tipo duplo (adultScore, goreScore, racyScore).
brands A saída é um array de objetos de marca , onde o objeto é um tipo complexo composto por name (string) e uma confidence pontuação (double). Também devolve a rectangle com quatro coordenadas de caixa delimitadora (x, y, w, h, em pixels) indicando a posição dentro da imagem. Para o retângulo, x e y são o canto superior esquerdo. No canto inferior esquerdo está x, y+h. No canto superior direito é x+w, y. No canto inferior direito está x+w, y+h.
categories Output é um array de objetos de categoria , onde cada objeto de categoria é um tipo complexo composto por uma name (string), score (double) e opcional detail que contém detalhes de celebridades ou pontos de referência. Consulte a taxonomia de categorias para a lista completa dos nomes das categorias. Um detalhe é um tipo complexo aninhado. Um detalhe de celebridade consiste num nome, pontuação de confiança e caixa delimitadora facial. Um detalhe marco consiste num nome e numa pontuação de confiança.
description Output é um único objeto de descrição de um tipo complexo, consistindo em listas de tags e caption (um array composto por Text (string) e confidence (double)).
faces Tipo complexo composto por age, gender, e faceBoundingBox com quatro coordenadas de caixa delimitadora (em píxeis) que indicam a posição dentro da imagem. As coordenadas são top, left, width, height.
objects A saída é um conjunto de objetos de características visuais. Cada objeto é um tipo complexo, composto por object (string), confidence (double), rectangle (com quatro coordenadas de caixa delimitadora indicando a posição dentro da imagem) e a parent que contém um nome de objeto e confiança .
tags Output é um array de objetos imageTag , onde um objeto tag é um tipo complexo composto por name (string), hint (string) e confidence (double). A adição de uma dica é rara. Só é gerado se uma etiqueta for ambígua. Por exemplo, uma imagem marcada como "curling" pode ter um toque de "desporto" para indicar melhor o seu conteúdo.

Definição de perícia de exemplo

{
    "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"
        }
    ]
}

Sample index

Para objetos individuais (como adult e description), pode estruturá-los no índice como um Collection(Edm.ComplexType) para devolver adult e description sair para todos eles. Para mais informações sobre mapeamento de saídas para campos de índice, veja Achatamento de informação a partir de tipos complexos.

{
    "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
                }
            ]
        }
    ]
}

Mapeamento de campo de saída de exemplo

O campo alvo pode ser um campo complexo ou uma coleção. A definição de índice especifica quaisquer subcampos.

"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"
    }

Variação nos mapeamentos de campo de saída (propriedades aninhadas)

Podes definir mapeamentos de campo de saída para propriedades de nível inferior, como apenas celebridades ou pontos de referência. Neste caso, certifique-se de que o seu esquema de índice tem um campo para conter cada detalhe especificamente.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/celebrities/*",
        "targetFieldName": "celebrities"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/landmarks/*",
        "targetFieldName": "landmarks"
    }

Sample input

{
    "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
                }
            }
        }
    ]
}

Sample output

{
  "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
              }
           }
        ]
      }
    }
  ]
}

Error cases

Nos casos de erro seguintes, nenhum elemento é extraído.

Error Code Description
NotSupportedLanguage A linguagem fornecida não é suportada.
InvalidImageUrl O URL da imagem está mal formatado ou não é acessível.
InvalidImageFormat Os dados de entrada não são uma imagem válida.
InvalidImageSize A imagem de entrada é demasiado grande.
NotSupportedVisualFeature O tipo de funcionalidade especificado não é válido.
NotSupportedImage Imagem não suportada, por exemplo, pornografia infantil.
InvalidDetails Modelo específico de domínio não suportado.

Se tiveres um erro semelhante ao "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", verifica o caminho. Tanto celebridades como marcos são propriedades sob detail.

"categories":[  
      {  
         "name":"building_",
         "score":0.97265625,
         "detail":{  
            "landmarks":[  
               {  
                  "name":"Forbidden City",
                  "confidence":0.92013400793075562
               }
            ]

See also