Détection des étiquettes dans une image - Amazon Rekognition

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Détection des étiquettes dans une image

Vous pouvez utiliser cette DetectLabelsopération pour détecter des étiquettes (objets et concepts) dans une image et récupérer des informations sur les propriétés de l'image. Les propriétés de l’image incluent des attributs tels que la couleur du premier plan et de l’arrière-plan, ainsi que la netteté, la luminosité et le contraste de l’image. Vous pouvez récupérer uniquement les étiquettes d’une image, uniquement les propriétés de l’image, ou les deux. Pour obtenir un exemple, consultez Analyse d’images stockées dans un compartiment Amazon S3.

Les exemples suivants utilisent various AWS SDKs et AWS CLI to callDetectLabels. Pour en savoir plus sur la réponse d’opération DetectLabels, consultez DetectLabels réponse.

Pour détecter des étiquettes dans une image
  1. Si vous ne l’avez pas déjà fait :

    1. Créez ou mettez à jour un utilisateur avec AmazonRekognitionFullAccess et autorisations AmazonS3ReadOnlyAccess. Pour de plus amples informations, veuillez consulter Étape 1 : créer un AWS compte et créer un utilisateur.

    2. Installez et configurez le AWS CLI et le AWS SDKs. Pour de plus amples informations, veuillez consulter Étape 2 : configurer le AWS CLI and AWS SDKs.

  2. Chargez une image qui contient un ou plusieurs objets - par exemple des arbres, des maisons et un bateau - dans votre compartiment S3. L’image doit être au format .jpg ou .png.

    Pour en savoir plus, consultez Chargement d’objets dans Amazon S3 dans le Guide de l’utilisateur Amazon Simple Storage Service.

  3. Utilisez les exemples suivants pour appeler l’opération DetectLabels.

    Java

    Cet exemple affiche la liste des étiquettes qui ont été détectées dans l’image d’entrée. Remplacez les valeurs de bucket et photo par le nom du compartiment Amazon S3 et le nom de l’image utilisés à l’étape 2.

    package com.amazonaws.samples; import java.util.List; import com.amazonaws.services.rekognition.model.BoundingBox; import com.amazonaws.services.rekognition.model.DetectLabelsRequest; import com.amazonaws.services.rekognition.model.DetectLabelsResult; import com.amazonaws.services.rekognition.model.Image; import com.amazonaws.services.rekognition.model.Instance; import com.amazonaws.services.rekognition.model.Label; import com.amazonaws.services.rekognition.model.Parent; import com.amazonaws.services.rekognition.model.S3Object; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.AmazonRekognitionException; public class DetectLabels { public static void main(String[] args) throws Exception { String photo = "photo"; String bucket = "bucket"; AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); DetectLabelsRequest request = new DetectLabelsRequest() .withImage(new Image().withS3Object(new S3Object().withName(photo).withBucket(bucket))) .withMaxLabels(10).withMinConfidence(75F); try { DetectLabelsResult result = rekognitionClient.detectLabels(request); List<Label> labels = result.getLabels(); System.out.println("Detected labels for " + photo + "\n"); for (Label label : labels) { System.out.println("Label: " + label.getName()); System.out.println("Confidence: " + label.getConfidence().toString() + "\n"); List<Instance> instances = label.getInstances(); System.out.println("Instances of " + label.getName()); if (instances.isEmpty()) { System.out.println(" " + "None"); } else { for (Instance instance : instances) { System.out.println(" Confidence: " + instance.getConfidence().toString()); System.out.println(" Bounding box: " + instance.getBoundingBox().toString()); } } System.out.println("Parent labels for " + label.getName() + ":"); List<Parent> parents = label.getParents(); if (parents.isEmpty()) { System.out.println(" None"); } else { for (Parent parent : parents) { System.out.println(" " + parent.getName()); } } System.out.println("--------------------"); System.out.println(); } } catch (AmazonRekognitionException e) { e.printStackTrace(); } } }
    AWS CLI

    Cet exemple affiche le JSON résultat de l'detect-labelsCLIopération. Remplacez les valeurs de bucket et photo par le nom du compartiment Amazon S3 et le nom de l’image utilisés à l’étape 2. Remplacez la valeur de profile-name par le nom de votre profil de développeur.

    aws rekognition detect-labels --image '{ "S3Object": { "Bucket": "bucket-name", "Name": "file-name" } }' \ --features GENERAL_LABELS IMAGE_PROPERTIES \ --settings '{"ImageProperties": {"MaxDominantColors":1}, {"GeneralLabels":{"LabelInclusionFilters":["Cat"]}}}' \ --profile profile-name \ --region us-east-1

    Si vous y accédez CLI sur un appareil Windows, utilisez des guillemets doubles au lieu de guillemets simples et évitez les guillemets doubles intérieurs par une barre oblique inverse (c'est-à-dire \) pour corriger les erreurs d'analyse que vous pourriez rencontrer. Pour un exemple, consultez ce qui suit :

    aws rekognition detect-labels --image "{\"S3Object\":{\"Bucket\":\"bucket-name\",\"Name\":\"file-name\"}}" --features GENERAL_LABELS IMAGE_PROPERTIES \ --settings "{\"GeneralLabels\":{\"LabelInclusionFilters\":[\"Car\"]}}" --profile profile-name --region us-east-1
    Python

    Cet exemple affiche les étiquettes qui ont été détectées dans l’image d’entrée. Dans la fonction main, remplacez les valeurs de bucket et photo par les noms du compartiment Amazon S3 et de l’image que vous avez utilisés à l’étape 2. Remplacez la valeur de profile_name dans la ligne qui crée la session de Rekognition par le nom de votre profil de développeur.

    #Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) import boto3 def detect_labels(photo, bucket): session = boto3.Session(profile_name='profile-name') client = session.client('rekognition') response = client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}}, MaxLabels=10, # Uncomment to use image properties and filtration settings #Features=["GENERAL_LABELS", "IMAGE_PROPERTIES"], #Settings={"GeneralLabels": {"LabelInclusionFilters":["Cat"]}, # "ImageProperties": {"MaxDominantColors":10}} ) print('Detected labels for ' + photo) print() for label in response['Labels']: print("Label: " + label['Name']) print("Confidence: " + str(label['Confidence'])) print("Instances:") for instance in label['Instances']: print(" Bounding box") print(" Top: " + str(instance['BoundingBox']['Top'])) print(" Left: " + str(instance['BoundingBox']['Left'])) print(" Width: " + str(instance['BoundingBox']['Width'])) print(" Height: " + str(instance['BoundingBox']['Height'])) print(" Confidence: " + str(instance['Confidence'])) print() print("Parents:") for parent in label['Parents']: print(" " + parent['Name']) print("Aliases:") for alias in label['Aliases']: print(" " + alias['Name']) print("Categories:") for category in label['Categories']: print(" " + category['Name']) print("----------") print() if "ImageProperties" in str(response): print("Background:") print(response["ImageProperties"]["Background"]) print() print("Foreground:") print(response["ImageProperties"]["Foreground"]) print() print("Quality:") print(response["ImageProperties"]["Quality"]) print() return len(response['Labels']) def main(): photo = 'photo-name' bucket = 'bucket-name' label_count = detect_labels(photo, bucket) print("Labels detected: " + str(label_count)) if __name__ == "__main__": main()
    .NET

    Cet exemple affiche la liste des étiquettes qui ont été détectées dans l’image d’entrée. Remplacez les valeurs de bucket et photo par le nom du compartiment Amazon S3 et le nom de l’image utilisés à l’étape 2.

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) using System; using Amazon.Rekognition; using Amazon.Rekognition.Model; public class DetectLabels { public static void Example() { String photo = "input.jpg"; String bucket = "bucket"; AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient(); DetectLabelsRequest detectlabelsRequest = new DetectLabelsRequest() { Image = new Image() { S3Object = new S3Object() { Name = photo, Bucket = bucket }, }, MaxLabels = 10, MinConfidence = 75F }; try { DetectLabelsResponse detectLabelsResponse = rekognitionClient.DetectLabels(detectlabelsRequest); Console.WriteLine("Detected labels for " + photo); foreach (Label label in detectLabelsResponse.Labels) Console.WriteLine("{0}: {1}", label.Name, label.Confidence); } catch (Exception e) { Console.WriteLine(e.Message); } } }
    Ruby

    Cet exemple affiche la liste des étiquettes qui ont été détectées dans l’image d’entrée. Remplacez les valeurs de bucket et photo par le nom du compartiment Amazon S3 et le nom de l’image utilisés à l’étape 2.

    # Add to your Gemfile # gem 'aws-sdk-rekognition' require 'aws-sdk-rekognition' credentials = Aws::Credentials.new( ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'] ) bucket = 'bucket' # the bucket name without s3:// photo = 'photo' # the name of file client = Aws::Rekognition::Client.new credentials: credentials attrs = { image: { s3_object: { bucket: bucket, name: photo }, }, max_labels: 10 } response = client.detect_labels attrs puts "Detected labels for: #{photo}" response.labels.each do |label| puts "Label: #{label.name}" puts "Confidence: #{label.confidence}" puts "Instances:" label['instances'].each do |instance| box = instance['bounding_box'] puts " Bounding box:" puts " Top: #{box.top}" puts " Left: #{box.left}" puts " Width: #{box.width}" puts " Height: #{box.height}" puts " Confidence: #{instance.confidence}" end puts "Parents:" label.parents.each do |parent| puts " #{parent.name}" end puts "------------" puts "" end
    Node.js

    Cet exemple affiche la liste des étiquettes qui ont été détectées dans l’image d’entrée. Remplacez les valeurs de bucket et photo par le nom du compartiment Amazon S3 et le nom de l’image utilisés à l’étape 2. Remplacez la valeur de profile_name dans la ligne qui crée la session de Rekognition par le nom de votre profil de développeur.

    Si vous utilisez des TypeScript définitions, vous devrez peut-être utiliser à la import AWS from 'aws-sdk' place deconst AWS = require('aws-sdk'), afin d'exécuter le programme avec Node.js. Vous pouvez consulter le Javascript AWS SDK pour plus de détails. Selon la façon dont vous avez configuré vos configurations, vous devrez peut-être également spécifier votre région avec AWS.config.update({region:region});.

    // Load the SDK var AWS = require('aws-sdk'); const bucket = 'bucket-name' // the bucketname without s3:// const photo = 'image-name' // the name of file var credentials = new AWS.SharedIniFileCredentials({profile: 'profile-name'}); AWS.config.credentials = credentials; AWS.config.update({region:'region-name'}); const client = new AWS.Rekognition(); const params = { Image: { S3Object: { Bucket: bucket, Name: photo }, }, MaxLabels: 10 } client.detectLabels(params, function(err, response) { if (err) { console.log(err, err.stack); // if an error occurred } else { console.log(`Detected labels for: ${photo}`) response.Labels.forEach(label => { console.log(`Label: ${label.Name}`) console.log(`Confidence: ${label.Confidence}`) console.log("Instances:") label.Instances.forEach(instance => { let box = instance.BoundingBox console.log(" Bounding box:") console.log(` Top: ${box.Top}`) console.log(` Left: ${box.Left}`) console.log(` Width: ${box.Width}`) console.log(` Height: ${box.Height}`) console.log(` Confidence: ${instance.Confidence}`) }) console.log("Parents:") label.Parents.forEach(parent => { console.log(` ${parent.Name}`) }) console.log("------------") console.log("") }) // for response.labels } // if });
    Java V2

    Ce code est extrait du GitHub référentiel d'SDKexemples de AWS documentation. Voir l’exemple complet ici.

    //snippet-start:[rekognition.java2.detect_labels.import] import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.services.rekognition.model.Image; import software.amazon.awssdk.services.rekognition.model.DetectLabelsRequest; import software.amazon.awssdk.services.rekognition.model.DetectLabelsResponse; import software.amazon.awssdk.services.rekognition.model.Label; import software.amazon.awssdk.services.rekognition.model.RekognitionException; import software.amazon.awssdk.services.rekognition.model.S3Object; import java.util.List; /** * Before running this Java V2 code example, set up your development environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class DetectLabels { public static void main(String[] args) { final String usage = "\n" + "Usage: " + " <bucket> <image>\n\n" + "Where:\n" + " bucket - The name of the Amazon S3 bucket that contains the image (for example, ,ImageBucket)." + " image - The name of the image located in the Amazon S3 bucket (for example, Lake.png). \n\n"; if (args.length != 2) { System.out.println(usage); System.exit(1); } String bucket = args[0]; String image = args[1]; Region region = Region.US_WEST_2; RekognitionClient rekClient = RekognitionClient.builder() .region(region) .credentialsProvider(ProfileCredentialsProvider.create("profile-name")) .build(); getLabelsfromImage(rekClient, bucket, image); rekClient.close(); } // snippet-start:[rekognition.java2.detect_labels_s3.main] public static void getLabelsfromImage(RekognitionClient rekClient, String bucket, String image) { try { S3Object s3Object = S3Object.builder() .bucket(bucket) .name(image) .build() ; Image myImage = Image.builder() .s3Object(s3Object) .build(); DetectLabelsRequest detectLabelsRequest = DetectLabelsRequest.builder() .image(myImage) .maxLabels(10) .build(); DetectLabelsResponse labelsResponse = rekClient.detectLabels(detectLabelsRequest); List<Label> labels = labelsResponse.labels(); System.out.println("Detected labels for the given photo"); for (Label label: labels) { System.out.println(label.name() + ": " + label.confidence().toString()); } } catch (RekognitionException e) { System.out.println(e.getMessage()); System.exit(1); } } // snippet-end:[rekognition.java2.detect_labels.main] }

DetectLabels demande d'opération

La valeur d’entrée de DetectLabel est une image. Dans cet exemple JSON d'entrée, l'image source est chargée depuis un compartiment Amazon S3. MaxLabelsest le nombre maximum d'étiquettes à renvoyer dans la réponse. MinConfidenceest le niveau de confiance minimal qu'Amazon Rekognition Image doit avoir quant à l'exactitude de l'étiquette détectée pour qu'elle soit renvoyée dans la réponse.

Fonctionnalités vous permet de spécifier une ou plusieurs caractéristiques de l’image que vous souhaitez renvoyer, en vous permettant de sélectionner GENERAL_LABELS et IMAGE_PROPERTIES. L’inclusion GENERAL_LABELS renverra les étiquettes détectées dans l’image d’entrée, tandis que l’inclusion IMAGE_PROPERTIES vous permettra d’accéder à la couleur et à la qualité de l’image.

Les paramètres vous permettent de filtrer les articles renvoyés à la fois pour les fonctionnalités GENERAL_LABELS et IMAGE_PROPERTIES. Pour les étiquettes, vous pouvez utiliser des filtres inclusifs et exclusifs. Vous pouvez également filtrer par étiquette spécifique, par étiquette individuelle ou par catégorie d’étiquette :

  • LabelInclusionFilters - Vous permet de spécifier les libellés que vous souhaitez inclure dans la réponse.

  • LabelExclusionFilters - Vous permet de spécifier les libellés que vous souhaitez exclure de la réponse.

  • LabelCategoryInclusionFilters - Vous permet de spécifier les catégories d'étiquettes que vous souhaitez inclure dans la réponse.

  • LabelCategoryExclusionFilters - Vous permet de spécifier les catégories d'étiquettes que vous souhaitez exclure de la réponse.

Vous pouvez également combiner des filtres inclusifs et exclusifs en fonction de vos besoins, en excluant certaines étiquettes ou catégories et en incluant d’autres.

IMAGE_PROPERTIES font référence aux couleurs dominantes et aux attributs de qualité d’une image tels que la netteté, la luminosité et le contraste. Lors de la détection IMAGE_PROPERTIES, vous pouvez spécifier le nombre maximum de couleurs dominantes à renvoyer (10 par défaut) à l’aide du paramètre MaxDominantColors.

{ "Image": { "S3Object": { "Bucket": "bucket", "Name": "input.jpg" } }, "MaxLabels": 10, "MinConfidence": 75, "Features": [ "GENERAL_LABELS", "IMAGE_PROPERTIES" ], "Settings": { "GeneralLabels": { "LabelInclusionFilters": [<Label(s)>], "LabelExclusionFilters": [<Label(s)>], "LabelCategoryInclusionFilters": [<Category Name(s)>], "LabelCategoryExclusionFilters": [<Category Name(s)>] }, "ImageProperties": { "MaxDominantColors":10 } } }

DetectLabels réponse

La réponse de DetectLabels est un tableau qui recense les étiquettes détectées dans l’image et qui indique le niveau de fiabilité de la détection.

Voici un exemple de réponse de DetectLabels. L'exemple de réponse ci-dessous contient divers attributs renvoyés pour GENERAL _LABELS, notamment :

  • Nom : nom de l’étiquette détectée. Dans cet exemple, l’opération a détecté un objet portant l’étiquette Téléphone portable.

  • À chaque étiquette est associé un niveau de fiabilité. Dans cet exemple, le niveau de confiance pour l’étiquette était de 99,36 %.

  • Parents : étiquettes d’ancêtres associées à une étiquette détectée. Dans cet exemple, l’étiquette Téléphone portable possède une étiquette parent nommée Téléphone.

  • Alias : informations sur les alias possibles pour l’étiquette. Dans cet exemple, l’étiquette Téléphone portable comporte un alias possible de téléphone cellulaire.

  • Catégories : catégorie d’étiquette à laquelle appartient l’étiquette détectée. Dans cet exemple, il s’agit de la technologie et de l’informatique.

La réponse pour les étiquettes d’objets courants comprend des informations de cadre de délimitation pour l’emplacement de l’étiquette sur l’image d’entrée. Par exemple, l’étiquette Personne comporte un tableau d’instances contenant deux cadres de délimitation. Il s’agit des emplacements de deux personnes détectées dans l’image.

La réponse inclut également des attributs concernant IMAGE _PROPERTIES. Les attributs présentés par la PROPERTIES fonction IMAGE _ sont les suivants :

  • Qualité : informations sur la netteté, la luminosité et le contraste de l’image d’entrée, notées entre 0 et 100. La qualité est indiquée pour l’ensemble de l’image ainsi que pour l’arrière-plan et le premier plan de l’image, si disponible. Toutefois, le contraste n’est indiqué que pour l’ensemble de l’image, tandis que la netteté et la luminosité sont également indiquées pour l’arrière-plan et le premier plan.

  • Couleur dominante : tableau des couleurs dominantes de l’image. Chaque couleur dominante est décrite par un nom de couleur simplifié, une palette de CSS couleurs, RGB des valeurs et un code hexadécimal.

  • Premier plan : informations sur les couleurs dominantes, la netteté et la luminosité du premier plan de l’image d’entrée.

  • Arrière-plan : informations sur les couleurs dominantes, la netteté et la luminosité de l’arrière-plan de l’image d’entrée.

Lorsque GENERAL _ LABELS et IMAGE _ PROPERTIES sont utilisés conjointement comme paramètres d'entrée, Amazon Rekognition Image renvoie également les couleurs dominantes des objets avec des cadres de délimitation.

Le champ LabelModelVersion contient le numéro de version du modèle de détection utilisé par DetectLabels.

{ "Labels": [ { "Name": "Mobile Phone", "Parents": [ { "Name": "Phone" } ], "Aliases": [ { "Name": "Cell Phone" } ], "Categories": [ { "Name": "Technology and Computing" } ], "Confidence": 99.9364013671875, "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567, } "Confidence": 99.9364013671875, "DominantColors": [ { "Red": 120, "Green": 137, "Blue": 132, "HexCode": "3A7432", "SimplifiedColor": "red", "CssColor": "fuscia", "PixelPercentage": 40.10 } ], } ] } ], "ImageProperties": { "Quality": { "Brightness": 40, "Sharpness": 40, "Contrast": 24, }, "DominantColors": [ { "Red": 120, "Green": 137, "Blue": 132, "HexCode": "3A7432", "SimplifiedColor": "red", "CssColor": "fuscia", "PixelPercentage": 40.10 } ], "Foreground": { "Quality": { "Brightness": 40, "Sharpness": 40, }, "DominantColors": [ { "Red": 200, "Green": 137, "Blue": 132, "HexCode": "3A7432", "CSSColor": "", "SimplifiedColor": "red", "PixelPercentage": 30.70 } ], } "Background": { "Quality": { "Brightness": 40, "Sharpness": 40, }, "DominantColors": [ { "Red": 200, "Green": 137, "Blue": 132, "HexCode": "3A7432", "CSSColor": "", "SimplifiedColor": "Red", "PixelPercentage": 10.20 } ], }, }, "LabelModelVersion": "3.0" }

Transformation de la DetectLabels réponse

Lorsque vous utilisez le DetectLabels API, vous aurez peut-être besoin de la structure de réponse pour imiter l'ancienne structure de API réponse, dans laquelle les étiquettes principales et les alias figuraient dans la même liste.

Voici un exemple de la API réponse actuelle de DetectLabels:

"Labels": [ { "Name": "Mobile Phone", "Confidence": 99.99717712402344, "Instances": [], "Parents": [ { "Name": "Phone" } ], "Aliases": [ { "Name": "Cell Phone" } ] } ]

L'exemple suivant montre la réponse précédente du DetectLabelsAPI:

"Labels": [ { "Name": "Mobile Phone", "Confidence": 99.99717712402344, "Instances": [], "Parents": [ { "Name": "Phone" } ] }, { "Name": "Cell Phone", "Confidence": 99.99717712402344, "Instances": [], "Parents": [ { "Name": "Phone" } ] }, ]

Si nécessaire, vous pouvez transformer la réponse actuelle pour qu’elle suive le format de l’ancienne réponse. Vous pouvez utiliser l'exemple de code suivant pour transformer la dernière API réponse en structure de API réponse précédente :

Python

L'exemple de code suivant montre comment transformer la réponse actuelle à partir de DetectLabels API. Dans l'exemple de code ci-dessous, vous pouvez remplacer la valeur de EXAMPLE_INFERENCE_OUTPUT avec le résultat d'une DetectLabels opération que vous avez exécutée.

from copy import deepcopy LABEL_KEY = "Labels" ALIASES_KEY = "Aliases" INSTANCE_KEY = "Instances" NAME_KEY = "Name" #Latest API response sample EXAMPLE_INFERENCE_OUTPUT = { "Labels": [ { "Name": "Mobile Phone", "Confidence": 97.530106, "Categories": [ { "Name": "Technology and Computing" } ], "Aliases": [ { "Name": "Cell Phone" } ], "Instances":[ { "BoundingBox":{ "Height":0.1549897, "Width":0.07747964, "Top":0.50858885, "Left":0.00018205095 }, "Confidence":98.401276 } ] }, { "Name": "Urban", "Confidence": 99.99982, "Categories": [ "Colors and Visual Composition" ] } ] } def expand_aliases(inferenceOutputsWithAliases): if LABEL_KEY in inferenceOutputsWithAliases: expandInferenceOutputs = [] for primaryLabelDict in inferenceOutputsWithAliases[LABEL_KEY]: if ALIASES_KEY in primaryLabelDict: for alias in primaryLabelDict[ALIASES_KEY]: aliasLabelDict = deepcopy(primaryLabelDict) aliasLabelDict[NAME_KEY] = alias[NAME_KEY] del aliasLabelDict[ALIASES_KEY] if INSTANCE_KEY in aliasLabelDict: del aliasLabelDict[INSTANCE_KEY] expandInferenceOutputs.append(aliasLabelDict) inferenceOutputsWithAliases[LABEL_KEY].extend(expandInferenceOutputs) return inferenceOutputsWithAliases if __name__ == "__main__": outputWithExpandAliases = expand_aliases(EXAMPLE_INFERENCE_OUTPUT) print(outputWithExpandAliases)

Voici un exemple de la réponse transformée :

#Output example after the transformation { "Labels": [ { "Name": "Mobile Phone", "Confidence": 97.530106, "Categories": [ { "Name": "Technology and Computing" } ], "Aliases": [ { "Name": "Cell Phone" } ], "Instances":[ { "BoundingBox":{ "Height":0.1549897, "Width":0.07747964, "Top":0.50858885, "Left":0.00018205095 }, "Confidence":98.401276 } ] }, { "Name": "Cell Phone", "Confidence": 97.530106, "Categories": [ { "Name": "Technology and Computing" } ], "Instances":[] }, { "Name": "Urban", "Confidence": 99.99982, "Categories": [ "Colors and Visual Composition" ] } ] }