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
Los orígenes de datos admitidos para el análisis de imágenes y OCR son blobs en Azure Blob Storage y Azure Data Lake Storage (ADLS) Gen2 y contenido de imagen en OneLake. Las imágenes pueden ser archivos independientes o imágenes incrustadas en un PDF u otros archivos.
Esta aptitud se implementa mediante ai Image Analysis API versión 3.2. Si la solución requiere llamar a una versión más reciente de esa API de servicio (como la versión 4.0), considere la posibilidad de implementar a través de una aptitud personalizada de API web.
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:
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:
|
Entradas de la aptitud
Nombre de entrada | Descripción |
---|---|
image |
Tipo complejo. Actualmente solo funciona con el campo "/document/normalized_images", generado por el indexador de blobs de Azure cuando imageAction se establece en un valor distinto de 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
}
]