Compétence cognitive Analyse d’image

La compétence d’analyse d’image extrait un ensemble riche de caractéristiques visuelles basées sur le contenu de l’image. Par exemple, vous pouvez générer une légende à partir d’une image, générer des balises ou identifier des célébrités et des paysages. Cet article constitue la documentation de référence pour la compétence Analyse d’image. Consultez Extraire du texte et des informations à partir d’images pour obtenir des instructions d’utilisation.

Cette compétence utilise les modèles d’apprentissage automatique fournis par Azure AI Vision dans les services Azure AI. Analyse d'images fonctionne sur les images qui répondent aux exigences suivantes :

  • L’image doit être au format JPEG, PNG, GIF ou BMP
  • La taille de fichier de l’image doit être inférieure à 4 mégaoctets (Mo)
  • Les dimensions de l’image doivent être supérieures à 50 x 50 pixels

Cette compétence est implémentée à l’aide de l’API IA Image Analysis version 3.2. Si votre solution nécessite d’appeler une version plus récente de cette API de service (par exemple, la version 4.0), envisagez d’implémenter via une compétence personnalisée d’API web.

Remarque

Cette compétence est liée aux services Azure AI et nécessite une ressource facturable pour les transactions qui dépassent 20 documents par indexeur et par jour. L'exécution des compétences intégrées est facturée au prix actuel du paiement à l'utilisation des services Azure AI.

En outre, l’extraction d’images est facturée par Azure AI Search.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Paramètres de la compétence

Les paramètres respectent la casse.

Nom du paramètre Description
defaultLanguageCode Chaîne indiquant la langue à retourner. Le service retourne les résultats de la reconnaissance dans une langue donnée. Si ce paramètre n’est pas spécifié, la valeur par défaut est « en ».

Les langages pris en charge incluent un sous-ensemble de langues généralement disponibles dans Azure AI Vision. Lorsqu’un langage vient d’être introduit avec l’état de disponibilité générale dans le service AI Vision, un délai est attendu avant qu’il ne soit entièrement intégré à cette compétence.
visualFeatures Tableau de chaînes qui indique les types de caractéristiques visuelles à retourner. Les types de caractéristiques visuelles valides sont les suivants :
  • adult : détecte si l’image est pornographique (nudité ou acte sexuel), sordide (violence extrême ou sang) ou suggestive (également appelé contenu incitateur).
  • brands : détecte les différentes marques sur une image, y compris leur emplacement approximatif.
  • categories : classe le contenu de l’image en fonction d’une taxonomie définie par les services Azure AI.
  • description : décrit le contenu de l’image avec une phrase complète dans les langues prises en charge.
  • faces : détecte si des visages sont présents. Si tel est le cas, génère des coordonnées, ainsi que des paramètres d’âge et de sexe.
  • objects : détecte les différents objets sur une image, y compris leur emplacement approximatif.
  • tags : balise l’image avec une liste détaillée de mots liés au contenu de l’image.
Les noms des caractéristiques visuelles respectent la casse. Les fonctionnalités visuelles color et imageType ont été dépréciées, mais vous pouvez accéder à cette fonctionnalité par le biais d’une compétence personnalisée. Reportez-vous à la documentation d’analyse d’images Azure AI Vision sur les fonctionnalités visuelles prises en charge par chaque defaultLanguageCode.
details Tableau de chaînes indiquant les détails spécifiques à un domaine à retourner. Les types de caractéristiques visuelles valides sont les suivants :
  • celebrities : identifie les célébrités éventuellement détectées dans l’image.
  • landmarks : identifie les paysages éventuellement détectés dans l’image.

Entrées de la compétence

Nom de l'entrée Description
image Type complexe. Actuellement, il fonctionne uniquement avec le champ « /document/normalized_images », produit par l’indexeur d’objets blob Azure lorsqu’il imageAction est défini sur une valeur autre que none.

Sorties de la compétence

Nom de sortie Description
adult La sortie est un objet adulte unique d’un type complexe, constitué de champs booléens (isAdultContent, isGoryContent, isRacyContent) et de scores de type double (adultScore, goreScore, racyScore).
brands La sortie est un tableau d’objets brand, où l’objet est un type complexe composé de name (chaîne) et d’un score confidence (double). Elle retourne également un rectangle avec quatre coordonnées de cadre englobant (x, y, w, h en pixels) indiquant le positionnement à l’intérieur de l’image. Pour le rectangle, x et y correspondent au coin supérieur gauche. Le coin inférieur gauche est x, y+h. Le coin supérieur droit est x+w, y. Le coin inférieur droit est x+w, y+h.
categories La sortie est un tableau d’objets category, où chaque objet category est un type complexe composé d’un name (chaîne), d’un score (double) et d’un detail facultatif qui contient des détails de célébrité ou de point de repère. Consultez la taxonomie des catégories pour obtenir la liste complète des noms de catégories. Un détail est un type complexe imbriqué. Un détail de célébrité se compose d’un nom, d’un score de confiance et d’un cadre englobant visage. Un détail de point de repère se compose d’un nom et d’un score de confiance.
description La sortie est un objet description unique d’un type complexe, constitué de listes de tags et caption (un tableau composé de Text (chaîne) et de confidence (double)).
faces Type complexe composé de age, gender et faceBoundingBox ayant quatre coordonnées de cadre englobant (en pixels) indiquant le positionnement à l’intérieur de l’image. Les coordonnées sont top, left, width, height.
objects La sortie est un tableau d’objets de fonctionnalités visuelles. Chaque objet est un type complexe composé de object (chaîne), confidence (double), rectangle (avec quatre coordonnées de cadre englobant indiquant le placement à l’intérieur de l’image) et d’un parent qui contient un nom d’objet et une confiance.
tags La sortie est un tableau d’objets imageTag, où un objet d’étiquette est un type complexe composé de name (chaîne), hint (chaîne) et confidence (double). L’ajout d’un indicateur (hint) est rare. Il est généré uniquement si une étiquette est ambiguë. Par exemple, une image étiquetée « curling » peut avoir un indicateur « sports » afin de mieux préciser son contenu.

Exemple de définition de qualification

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

Exemple d'index

Vous pouvez structurer les objets uniques (tels que adult et description) dans l’index en tant que Collection(Edm.ComplexType) pour retourner une sortie adult et description pour tous ces objets. Pour plus d’informations sur le mappage des sorties à des champs d’index, consultez Aplatissement d’informations à partir de types complexes.

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

Exemple de mappage de champs de sortie

Le champ cible peut être un champ ou une collection complexe. La définition d’index spécifie les éventuels sous-champs.

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

Variation sur les mappages de champs de sortie (propriétés imbriquées)

Vous pouvez définir des mappages de champs de sortie sur des propriétés de niveau inférieur, comme simplement les célébrités ou les points de repère. Dans ce cas, veillez à ce que votre schéma d’index ait un champ destiné à contenir spécifiquement chaque détail.

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

Exemple d’entrée

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

Exemple de sortie

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

Cas d’erreur

Dans les cas d’erreur suivants, aucun élément n’est extrait.

Code d’erreur Description
NotSupportedLanguage La langue fournie n’est pas prise en charge.
InvalidImageUrl L’URL de l’image est incorrecte ou inaccessible.
InvalidImageFormat Les données d’entrée ne sont pas une image valide.
InvalidImageSize L’image d’entrée est trop grande.
NotSupportedVisualFeature Le type de caractéristique spécifié n’est pas valide.
NotSupportedImage Image non prise en charge, par exemple, pornographie enfantine.
InvalidDetails Modèle spécifique à un domaine non pris en charge.

Si vous obtenez une erreur similaire à "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", vérifiez le chemin. Les célébrités et les points de repère sont des propriétés sous detail.

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

Voir aussi