Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Note
Recherche Azure AI est disponible via le portail Azure, les API REST et les SDK Azure. Il sous-tend également Foundry IQ, la couche de connaissances managée qui transforme le contenu d’entreprise en bases de connaissances réutilisables et prenant en charge les autorisations pour les agents dans le portail Microsoft Foundry.
La compétence 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 tags ou identifier des célébrités et des monuments. Cet article est la documentation de référence pour la compétence Analyse d’Images . Voir Extraire texte et informations à partir des images pour les instructions d’utilisation.
Cette compétence utilise les modèles d’apprentissage automatique fournis par Azure Vision dans Foundry Tools. L’analyse d’images travaille sur des images répondant aux exigences suivantes :
- L’image doit être présentée au format JPEG, PNG, GIF ou BMP
- La taille du 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
Les sources de données prises en charge pour l’OCR et l’analyse d’images sont les blobs dans Stockage Blob Azure et Azure Data Lake Storage (ADLS) Gen2, ainsi que le contenu d’images dans Microsoft OneLake. Les images peuvent être des fichiers autonomes ou des images intégrées dans un PDF ou d’autres fichiers.
Cette compétence est mise en œuvre via l’API d’analyse d’images IA version 3.2. Si votre solution nécessite d’appeler une version plus récente de cette API de service, telle que la version 4.0, envisagez d’implémenter via la compétence API web personnalisée.
Note
Cette compétence est liée à Foundry Tools et nécessite une ressource facturable pour les transactions dépassant 20 documents par indexeur et par jour. L’exécution des compétences intégrées est facturée au prix standard des outils Foundry existants.
De plus, l’extraction d’images est facturable par Recherche Azure AI.
@odata.type
Microsoft.Skills.Vision.ImageAnalysisSkill
Paramètres de compétence
Les paramètres respectent la casse.
| Nom du paramètre | Description |
|---|---|
defaultLanguageCode |
Une chaîne indiquant la langue à retourner. Le service renvoie des résultats de reconnaissance dans un langage spécifié. 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 de Azure Vision. Lorsqu’un langage est nouvellement introduit avec un statut de disponibilité générale dans Azure Vision, un délai anticipé avant qu’il ne soit pleinement intégré dans cette compétence. |
visualFeatures |
Un tableau de chaînes indiquant les types de caractéristiques visuelles à retourner. Les types de caractéristiques visuelles valides incluent :
defaultLanguageCode. |
details |
Un tableau de chaînes indiquant quels détails spécifiques au domaine retourner. Les types de caractéristiques visuelles valides incluent :
|
Données de compétences
| Nom de saisie | Description |
|---|---|
image |
Type complexe. Actuellement, il ne fonctionne qu’avec le champ « /document/normalized_images », produit par l’indexeur de blob Azure lorsque imageAction est défini à une valeur autre que none. |
Résultats des compétences
| Nom de sortie | Description |
|---|---|
adult |
Output est un objet adulte unique de type complexe, composé de champs booléens (isAdultContent, isGoryContent, isRacyContent) et de scores de double type (adultScore, goreScore, racyScore). |
brands |
La sortie est un tableau d’objets de marque , où l’objet est un type complexe composé de name (chaîne) et d’un confidence score (double). Il renvoie également a rectangle avec quatre coordonnées de boîte englobante (x, y, w, h, en pixels) indiquant la position à l’intérieur de l’image. Pour le rectangle, x et y sont en haut à gauche. En bas à gauche se trouve x, y+h. En haut à droite se trouve x+w, y. En bas à droite se trouve x+w, y+h. |
categories |
La sortie est un tableau d’objets catégories , où chaque objet catégorie est un type complexe composé d’une name (chaîne), score d’un (double), et optionnel detail contenant des détails de célébrités ou de repères. Voir la taxonomie des catégories pour la liste complète des noms de catégories. Un détail est un type complexe imbriqué. Un détail de célébrité comprend un nom, un score de confiance et une case de rebondissement facial. Un détail emblématique consiste en un nom et un score de confiance. |
description |
Output est un objet de description unique de type complexe, constitué de listes de tags et caption (un tableau composé de Text (chaîne) et confidence (double)). |
faces |
Type complexe composé de age, gender, et faceBoundingBox ayant quatre coordonnées de boîte englobante (en pixels) indiquant une position à l’intérieur de l’image. Les coordonnées sont top, left, width, height. |
objects |
La sortie est un ensemble d’objets visuels de caractéristiques. Chaque objet est de type complexe, composé de object (chaîne), confidence (double), rectangle (avec quatre coordonnées de boîte englobante indiquant la position à l’intérieur de l’image), et un parent qui contient un nom d’objet et une confiance . |
tags |
Output est un tableau d’objets imageTag , où un objet tag est un type complexe composé de name (chaîne), hint (chaîne) et confidence (double). L’ajout d’un indice est rare. Il n’est généré que si un tag est ambigu. Par exemple, une image marquée « curling » peut contenir une pointe de « sports » pour mieux indiquer son contenu. |
Définition de l’exemple de compétence
{
"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
Pour des objets uniques (comme adult et description), vous pouvez les structurer dans l’index comme un Collection(Edm.ComplexType) à retourner adult et description à sortir pour tous. Pour plus d’informations sur la correspondance des sorties vers des champs d’index, voir Aplatissement des 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 correspondance des champs de sortie
Le champ cible peut être un champ complexe ou une collection. La définition de l’indice spécifie tous les 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 des correspondances des champs de sortie (propriétés imbriquées)
Vous pouvez définir des correspondances de champs de sortie vers des propriétés de niveau inférieur, comme simplement des célébrités ou des points de repère. Dans ce cas, assurez-vous que votre schéma d’index comporte un champ contenant chaque détail spécifiquement.
"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 résultat
{
"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 |
Le langage fourni n’est pas pris en charge. |
InvalidImageUrl |
L’URL de l’image est mal formatée 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 fonctionnalité spécifié n’est pas valide. |
NotSupportedImage |
Image non étayée, par exemple, pornographie infantile. |
InvalidDetails |
Modèle spécifique au 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 monuments sont tous deux des propriétés sous detail.
"categories":[
{
"name":"building_",
"score":0.97265625,
"detail":{
"landmarks":[
{
"name":"Forbidden City",
"confidence":0.92013400793075562
}
]