Aptitud cognitiva de análisis de imágenes

La aptitud de Análisis de imágenes extrae un amplio conjunto de características visuales en función del contenido de la imagen. Por ejemplo, puede generar una leyenda a partir de una imagen, generar etiquetas o identificar celebridades y lugares de referencia. Este artículo es la documentación de referencia de la aptitud de análisis de imágenes. Consulte Extracción de texto e información de imágenes para obtener instrucciones de uso.

Esta aptitud utiliza los modelos de aprendizaje automático proporcionados por Azure AI Vision en los servicios de Azure AI. Image Analysis funciona con imágenes que cumplen los requisitos siguientes:

  • La imagen debe estar en formato JPEG, PNG, GIF o BMP.
  • El tamaño de archivo de la imagen debe ser inferior a 4 megabytes (MB)
  • Las dimensiones de la imagen deben ser mayores que 50 x 50 píxeles

Nota:

Esta aptitud está enlazada a los servicios de Azure AI y necesita un recurso facturable para las transacciones que superan los 20 documentos por indexador al día. La ejecución de aptitudes integradas se carga al actual precio de pago por uso de los servicios de Azure AI.

Además, la extracción de imágenes se puede facturar mediante Azure AI Search.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Parámetros de la aptitud

Los parámetros distinguen mayúsculas de minúsculas.

Nombre de parámetro Descripción
defaultLanguageCode Cadena que indica el idioma que se devolverá. Este servicio devuelve los resultados de reconocimiento en un idioma concreto. Si no se especifica este parámetro, se usa el valor predeterminado "en".

Los idiomas admitidos incluyen un subconjunto de idiomas disponibles con carácter general de Azure AI Vision. Cuando un idioma se introduce recientemente con el estado de disponibilidad general en el servicio AI Vision, se espera un retraso antes de que se integren completamente dentro de esta aptitud.
visualFeatures Matriz de cadenas que indica los tipos de características visual que se devolverán. Los tipos de características visuales válidos incluyen:
  • adult: detecta si la imagen es pornográfica (representa desnudez o un acto sexual), cruenta (muestra sangre o violencia extrema) o provocativa (también denominada "subida de tono").
  • brands: detecta varias marcas en una imagen, incluida la ubicación aproximada.
  • categories: clasifica el contenido de la imagen según una taxonomía definida en los servicios de Azure AI.
  • description: describe el contenido de la imagen con una oración completa en los idiomas que se admiten.
  • faces: detecta si hay caras presentes. Si las hay, indica las coordenadas, el género y la edad.
  • objects: detecta varios objetos en una imagen, incluida la ubicación aproximada.
  • Etiquetas: etiquetas de la imagen con una lista detallada de palabras relacionadas con el contenido de la imagen.
Los nombres de las características visuales distinguen entre mayúsculas y minúsculas. Las características visuales color e imageType han quedado en desuso, pero puede acceder a esta funcionalidad a través de una aptitud personalizada. Consulta la documentación de análisis de imágenes de Visión de Azure AI en la que se admiten las características visuales con cada defaultLanguageCode.
details Matriz de cadenas que indica qué detalles específicos del dominio que se devolverán. Los tipos de características visuales válidos incluyen:
  • celebrities: identifica celebridades si se detectan en la imagen.
  • landmarks: identifica puntos de referencia si se detectan en la imagen.

Entradas de la aptitud

Nombre de entrada Descripción
image Tipo complejo. Actualmente, solo funciona con el campo "/document/normalized_images", que crea el indexador de Azure Blob cuando imageAction está establecido en un valor diferente a none.

Salidas de la aptitud

Nombre de salida Descripción
adult La salida es un solo objeto adult de un tipo complejo, que consta de campos booleanos (isAdultContent, isGoryContent, isRacyContent) y puntuaciones de tipo doble (adultScore, goreScore, racyScore).
brands La salida es una matriz de objetos brand, donde el objeto es un tipo complejo que consta de name (cadena) y una puntuación confidence (doble). También devuelve un objeto rectangle con las cuatro coordenadas de un rectángulo delimitador (x, y, w y h, en píxeles) que indican la colocación dentro de la imagen. Para el rectángulo, x y y son la parte superior izquierda. La parte inferior izquierda es x, y+h. La parte superior derecha es x+w, y. La parte inferior derecha es x+w, y+h.
categories La salida es una matriz de objetos category, donde cada objeto de categoría es un tipo complejo que consta de name (cadena), score (doble) y un valor detail opcional que contiene detalles de celebridad o de punto de referencia. Consulte la taxonomía de categorías para obtener la lista completa de nombres de categorías. Un detalle es un tipo complejo anidado. Un detalle de celebridad consta de un nombre, una puntuación de confianza y un rectángulo delimitador facial. Un detalle de punto de referencia consta de un nombre y una puntuación de confianza.
description La salida es un único objeto description de un tipo complejo, que consta de listas de tags y caption (una matriz formada por Text [cadena] y confidence [doble]).
faces Tipo complejo que consta de age, gender y faceBoundingBox con cuatro coordenadas de rectángulo delimitador (en píxeles) que indican la colocación dentro de la imagen. Las coordenadas son top, left, width y height.
objects La salida es una matriz de objetos de características visuales. Cada objeto es un tipo complejo, que consta de object (cadena), confidence (doble), rectangle (con cuatro coordenadas de rectángulo delimitador que indican la colocación dentro de la imagen) y un valor parent que contiene un nombre de objeto y la confianza.
tags La salida es una matriz de objetos imageTag, donde un objeto de etiqueta es un tipo complejo que consta de name (cadena), hint (cadena) y confidence (doble). Es poco frecuente agregar una sugerencia. Solo se genera si una etiqueta es ambigua. Por ejemplo, una imagen etiquetada como "curling" podría incluir la sugerencia "sports" para indicar mejor su contenido.

Ejemplo de definición de la aptitud

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

Índice de ejemplo

En el caso de objetos únicos (como adult y description), puede estructurarlos en el índice como Collection(Edm.ComplexType) para devolver una salida adult y description para todos ellos. Para obtener más información sobre la asignación de salidas a campos de índice, consulte Reducción de la información de tipos complejos.

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

Asignación de campos de salida de ejemplo

El campo de destino puede ser un campo o una colección complejos. La definición del índice especifica los 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"
    }

Variación en las asignaciones de campos de salida (propiedades anidadas)

Puede definir asignaciones de campos de salida para propiedades de nivel inferior, como celebridades o puntos de referencia. En este caso, asegúrese de que el esquema de índice tiene un campo para contener cada detalle específicamente.

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

Entrada de ejemplo

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

Salida de ejemplo

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

Casos de error

En los siguientes casos de error, no se extrae ningún elemento.

Código de error Descripción
NotSupportedLanguage No se admite el idioma proporcionado.
InvalidImageUrl La dirección URL de la imagen tiene un formato que no se admite o no es accesible.
InvalidImageFormat Los datos de entrada no son una imagen válida.
InvalidImageSize La imagen de entrada es demasiado grande.
NotSupportedVisualFeature El tipo de característica especificado no es válido.
NotSupportedImage La imagen no se admite como, por ejemplo, pornografía infantil.
InvalidDetails El modelo específico del dominio no se admite.

Si recibe el error similar a "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", compruebe la ruta de acceso. Tanto las celebridades como los puntos de referencia son propiedades en detail.

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

Consulte también