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 :
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 :
|
Entrées de la compétence
Nom de l'entrée | Description |
---|---|
image |
Type complexe. Actuellement, fonctionne seulement avec le champ « /documents/normalized_images », produit par l’indexeur de blobs Azure quand imageAction est défini sur une valeur supérieure à 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
}
]