

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.

# Utilisation d'un fichier manifeste pour importer des images
<a name="md-create-dataset-ground-truth"></a>

Vous pouvez créer un ensemble de données à l'aide d'un fichier manifeste au format Amazon SageMaker AI Ground Truth. Vous pouvez utiliser le fichier manifeste d'une tâche Amazon SageMaker AI Ground Truth. Si vos images et vos étiquettes ne sont pas au format d'un fichier manifeste SageMaker AI Ground Truth, vous pouvez créer un fichier manifeste au format SageMaker AI et l'utiliser pour importer vos images étiquetées. 

L'`CreateDataset`opération est mise à jour pour vous permettre de spécifier éventuellement des balises lors de la création d'un nouvel ensemble de données. Les balises sont des paires clé-valeur que vous pouvez utiliser pour classer et gérer vos ressources. 

**Topics**
+ [Création d'un ensemble de données à l'aide d'un fichier manifeste SageMaker AI Ground Truth (console)](#md-create-dataset-ground-truth-console)
+ [Création d'un ensemble de données à l'aide d'un fichier manifeste (SDK) SageMaker AI Ground Truth](#md-create-dataset-ground-truth-sdk)
+ [Créer une demande de jeu de données](#create-dataset-ground-truth-request)
+ [Étiqueter des images avec une tâche Amazon SageMaker AI Ground Truth](md-create-dataset-ground-truth-job.md)
+ [Création d’un fichier manifeste](md-create-manifest-file.md)
+ [Importation d'étiquettes au niveau de l'image dans des fichiers manifestes](md-create-manifest-file-classification.md)
+ [Localisation d’objets dans les fichiers manifestes](md-create-manifest-file-object-detection.md)
+ [Règles de validation des fichiers manifestes](md-create-manifest-file-validation-rules.md)
+ [Conversion d’autres formats de jeu de données en fichier manifeste](md-converting-to-sm-format.md)

## Création d'un ensemble de données à l'aide d'un fichier manifeste SageMaker AI Ground Truth (console)
<a name="md-create-dataset-ground-truth-console"></a>

La procédure suivante explique comment créer un ensemble de données à l'aide d'un fichier manifeste au format SageMaker AI Ground Truth. 

1. Pour créer un fichier manifeste pour le jeu de données d’entraînement, effectuez l’une des actions suivantes :
   + Créez un fichier manifeste avec un SageMaker AI GroundTruth Job en suivant les instructions de[Étiqueter des images avec une tâche Amazon SageMaker AI Ground Truth](md-create-dataset-ground-truth-job.md). 
   + Créez votre propre fichier manifeste en suivant les instructions sous [Création d’un fichier manifeste](md-create-manifest-file.md). 

   Si vous souhaitez créer un jeu de données de test, répétez l’étape 1.

1. Ouvrez la console Amazon Rekognition à l'adresse. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)

1. Choisissez **Utiliser Custom Labels**.

1. Choisissez **Démarrer**. 

1. Dans le volet de navigation de gauche, choisissez **Projets**.

1. Sur la page **Projets**, choisissez le projet auquel vous souhaitez ajouter un jeu de données. La page de détails de ce projet s’affiche.

1. Choisissez **Créer un jeu de données**. La page **Créer un jeu de données** s’affiche.

1. Dans **Démarrage de la configuration**, choisissez **Démarrer avec un seul jeu de données** ou **Démarrer avec un jeu de données d’entraînement**. Pour créer un modèle de meilleure qualité, nous vous recommandons de commencer par un jeu de données d’entraînement et un jeu de données de test distincts.

------
#### [ Single dataset ]

   1. Dans la section des **détails du jeu de données d'entraînement**, choisissez **Importer des images étiquetées par SageMaker Ground Truth**.

   1. Dans **Emplacement du fichier .manifest**, entrez l’emplacement du fichier manifeste que vous avez créé à l’étape 1.

   1. Choisissez **Créer un jeu de données**. La page des jeux de données de votre projet s’ouvre.

------
#### [ Separate training and test datasets ]

   1. Dans la section des **détails du jeu de données d'entraînement**, choisissez **Importer des images étiquetées par SageMaker Ground Truth**.

   1. Dans **Emplacement du fichier .manifest**, entrez l’emplacement du fichier manifeste que vous avez créé à l’étape 1 pour le jeu de données d’entraînement.

   1. Dans la section **Détails du jeu de données de test**, choisissez **Importer des images étiquetées par SageMaker Ground Truth**.
**Note**  
Le jeu de données d’entraînement et le jeu de données de test peuvent avoir différentes sources d’images.

   1. Dans **Emplacement du fichier .manifest**, entrez l’emplacement du fichier manifeste que vous avez créé à l’étape 1 pour le jeu de données de test.

   1. Choisissez **Créer des jeux de données**. La page des jeux de données de votre projet s’ouvre.

------

1. Si vous devez ajouter ou modifier des étiquettes, effectuez les actions indiquées dans [Étiquetage des images](md-labeling-images.md).

1. Suivez les étapes décrites dans [Entraînement d’un modèle (console)](training-model.md#tm-console) pour entraîner le modèle.

## Création d'un ensemble de données à l'aide d'un fichier manifeste (SDK) SageMaker AI Ground Truth
<a name="md-create-dataset-ground-truth-sdk"></a>

La procédure suivante explique comment créer des ensembles de données d'entraînement ou de test à partir d'un fichier manifeste à l'aide de l'[CreateDataset](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateDataset)API.

Vous pouvez utiliser un fichier manifeste existant, tel que le résultat d'une [tâche SageMaker AI Ground Truth](md-create-dataset-ground-truth-job.md), ou créer votre propre [fichier manifeste](md-create-manifest-file.md). 

1. Si ce n'est pas déjà fait, installez et configurez le AWS CLI et le AWS SDKs. Pour de plus amples informations, veuillez consulter [Étape 4 : configurer le AWS CLI et AWS SDKs](su-awscli-sdk.md).

1. Pour créer un fichier manifeste pour le jeu de données d’entraînement, effectuez l’une des actions suivantes :
   + Créez un fichier manifeste avec un SageMaker AI GroundTruth Job en suivant les instructions de[Étiqueter des images avec une tâche Amazon SageMaker AI Ground Truth](md-create-dataset-ground-truth-job.md). 
   + Créez votre propre fichier manifeste en suivant les instructions sous [Création d’un fichier manifeste](md-create-manifest-file.md). 

   Si vous souhaitez créer un jeu de données de test, répétez l’étape 2.

1. Utilisez l’exemple de code suivant pour créer le jeu de données d’entraînement et de test.

------
#### [ AWS CLI ]

   Utilisez le code suivant pour créer un jeu de données. Remplacez les éléments suivants :
   + `project_arn` : ARN du projet que vous souhaitez ajouter au jeu de données de test.
   + `type` : type de jeu de données que vous souhaitez créer (TRAIN pour « entraînement » ou TEST).
   + `bucket` : compartiment qui contient le fichier manifeste correspondant au jeu de données.
   + `manifest_file` : nom de fichier et chemin d’accès du fichier manifeste.

   ```
   aws rekognition create-dataset --project-arn project_arn \
     --dataset-type type \
     --dataset-source '{ "GroundTruthManifest": { "S3Object": { "Bucket": "bucket", "Name": "manifest_file" } } }' \
     --profile custom-labels-access
     --tags '{"key1": "value1", "key2": "value2"}'
   ```

------
#### [ Python ]

   Utilisez les valeurs suivantes pour créer un jeu de données. Fournissez les paramètres de ligne de commande suivants :
   + `project_arn` : ARN du projet que vous souhaitez ajouter au jeu de données de test.
   + `dataset_type` : type de jeu de données que vous souhaitez créer (`train` ou `test`).
   + `bucket` : compartiment qui contient le fichier manifeste correspondant au jeu de données.
   + `manifest_file` : nom de fichier et chemin d’accès du fichier manifeste.

   ```
   #Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   
   import argparse
   import logging
   import time
   import json
   import boto3
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   def create_dataset(rek_client, project_arn, dataset_type, bucket, manifest_file):
       """
       Creates an Amazon Rekognition Custom Labels dataset.
       :param rek_client: The Amazon Rekognition Custom Labels Boto3 client.
       :param project_arn: The ARN of the project in which you want to create a dataset.
       :param dataset_type: The type of the dataset that you want to create (train or test).
       :param bucket: The S3 bucket that contains the manifest file.
       :param manifest_file: The path and filename of the manifest file.
       """
   
       try:
           #Create the project
           logger.info("Creating %s dataset for project %s",dataset_type, project_arn)
   
           dataset_type = dataset_type.upper()
   
           dataset_source = json.loads(
               '{ "GroundTruthManifest": { "S3Object": { "Bucket": "'
               + bucket
               + '", "Name": "'
               + manifest_file
               + '" } } }'
           )
   
           response = rek_client.create_dataset(
               ProjectArn=project_arn, DatasetType=dataset_type, DatasetSource=dataset_source
           )
   
           dataset_arn=response['DatasetArn']
   
           logger.info("dataset ARN: %s",dataset_arn)
   
           finished=False
           while finished is False:
   
               dataset=rek_client.describe_dataset(DatasetArn=dataset_arn)
   
               status=dataset['DatasetDescription']['Status']
               
               if status == "CREATE_IN_PROGRESS":
                   logger.info("Creating dataset: %s ",dataset_arn)
                   time.sleep(5)
                   continue
   
               if status == "CREATE_COMPLETE":
                   logger.info("Dataset created: %s", dataset_arn)
                   finished=True
                   continue
   
               if status == "CREATE_FAILED":
                   error_message = f"Dataset creation failed: {status} : {dataset_arn}"
                   logger.exception(error_message)
                   raise Exception (error_message)
                   
               error_message = f"Failed. Unexpected state for dataset creation: {status} : {dataset_arn}"
               logger.exception(error_message)
               raise Exception(error_message)
               
           return dataset_arn
      
       
       except ClientError as err:
           logger.exception("Couldn't create dataset: %s",err.response['Error']['Message'])
           raise
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "project_arn", help="The ARN of the project in which you want to create the dataset."
       )
   
       parser.add_argument(
           "dataset_type", help="The type of the dataset that you want to create (train or test)."
       )
   
       parser.add_argument(
           "bucket", help="The S3 bucket that contains the manifest file."
       )
       
       parser.add_argument(
           "manifest_file", help="The path and filename of the manifest file."
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
   
       try:
   
           #Get command line arguments.
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           print(f"Creating {args.dataset_type} dataset for project {args.project_arn}")
   
           #Create the dataset.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           dataset_arn=create_dataset(rekognition_client, 
               args.project_arn,
               args.dataset_type,
               args.bucket,
               args.manifest_file)
   
           print(f"Finished creating dataset: {dataset_arn}")
   
   
       except ClientError as err:
           logger.exception("Problem creating dataset: %s", err)
           print(f"Problem creating dataset: {err}")
   
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   Utilisez les valeurs suivantes pour créer un jeu de données. Fournissez les paramètres de ligne de commande suivants :
   + `project_arn` : ARN du projet que vous souhaitez ajouter au jeu de données de test.
   + `dataset_type` : type de jeu de données que vous souhaitez créer (`train` ou `test`).
   + `bucket` : compartiment qui contient le fichier manifeste correspondant au jeu de données.
   + `manifest_file` : nom de fichier et chemin d’accès du fichier manifeste.

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   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.CreateDatasetRequest;
   import software.amazon.awssdk.services.rekognition.model.CreateDatasetResponse;
   import software.amazon.awssdk.services.rekognition.model.DatasetDescription;
   import software.amazon.awssdk.services.rekognition.model.DatasetSource;
   import software.amazon.awssdk.services.rekognition.model.DatasetStatus;
   import software.amazon.awssdk.services.rekognition.model.DatasetType;
   import software.amazon.awssdk.services.rekognition.model.DescribeDatasetRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeDatasetResponse;
   import software.amazon.awssdk.services.rekognition.model.GroundTruthManifest;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.model.S3Object;
   
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class CreateDatasetManifestFiles {
   
       public static final Logger logger = Logger.getLogger(CreateDatasetManifestFiles.class.getName());
   
       public static String createMyDataset(RekognitionClient rekClient, String projectArn, String datasetType,
               String bucket, String name) throws Exception, RekognitionException {
   
           try {
   
               logger.log(Level.INFO, "Creating {0} dataset for project : {1} from s3://{2}/{3} ",
                       new Object[] { datasetType, projectArn, bucket, name });
   
               DatasetType requestDatasetType = null;
   
               switch (datasetType) {
               case "train":
                   requestDatasetType = DatasetType.TRAIN;
                   break;
               case "test":
                   requestDatasetType = DatasetType.TEST;
                   break;
               default:
                   logger.log(Level.SEVERE, "Could not create dataset. Unrecognized dataset type: {0}", datasetType);
                   throw new Exception("Could not create dataset. Unrecognized dataset type: " + datasetType);
   
               }
   
               GroundTruthManifest groundTruthManifest = GroundTruthManifest.builder()
                       .s3Object(S3Object.builder().bucket(bucket).name(name).build()).build();
   
               DatasetSource datasetSource = DatasetSource.builder().groundTruthManifest(groundTruthManifest).build();
   
               CreateDatasetRequest createDatasetRequest = CreateDatasetRequest.builder().projectArn(projectArn)
                       .datasetType(requestDatasetType).datasetSource(datasetSource).build();
   
               CreateDatasetResponse response = rekClient.createDataset(createDatasetRequest);
   
               boolean created = false;
   
               do {
   
                   DescribeDatasetRequest describeDatasetRequest = DescribeDatasetRequest.builder()
                           .datasetArn(response.datasetArn()).build();
                   DescribeDatasetResponse describeDatasetResponse = rekClient.describeDataset(describeDatasetRequest);
   
                   DatasetDescription datasetDescription = describeDatasetResponse.datasetDescription();
   
                   DatasetStatus status = datasetDescription.status();
   
                   logger.log(Level.INFO, "Creating dataset ARN: {0} ", response.datasetArn());
   
                   switch (status) {
   
                   case CREATE_COMPLETE:
                       logger.log(Level.INFO, "Dataset created");
                       created = true;
                       break;
   
                   case CREATE_IN_PROGRESS:
                       Thread.sleep(5000);
                       break;
   
                   case CREATE_FAILED:
                       String error = "Dataset creation failed: " + datasetDescription.statusAsString() + " "
                               + datasetDescription.statusMessage() + " " + response.datasetArn();
                       logger.log(Level.SEVERE, error);
                       throw new Exception(error);
   
                   default:
                       String unexpectedError = "Unexpected creation state: " + datasetDescription.statusAsString() + " "
                               + datasetDescription.statusMessage() + " " + response.datasetArn();
                       logger.log(Level.SEVERE, unexpectedError);
                       throw new Exception(unexpectedError);
                   }
   
               } while (created == false);
   
               return response.datasetArn();
   
           } catch (RekognitionException e) {
               logger.log(Level.SEVERE, "Could not create dataset: {0}", e.getMessage());
               throw e;
           }
   
       }
   
       public static void main(String[] args) {
   
           String datasetType = null;
           String bucket = null;
           String name = null;
           String projectArn = null;
           String datasetArn = null;
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <dataset_type> <dataset_arn>\n\n" + "Where:\n"
                   + "   project_arn - the ARN of the project that you want to add copy the datast to.\n\n"
                   + "   dataset_type - the type of the dataset that you want to create (train or test).\n\n"
                   + "   bucket - the S3 bucket that contains the manifest file.\n\n"
                   + "   name - the location and name of the manifest file within the bucket.\n\n";
   
           if (args.length != 4) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
           datasetType = args[1];
           bucket = args[2];
           name = args[3];
   
           try {
   
               // Get the Rekognition client
               RekognitionClient rekClient = RekognitionClient.builder()
                   .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
                   .region(Region.US_WEST_2)
                   .build();
   
   
                // Create the dataset
               datasetArn = createMyDataset(rekClient, projectArn, datasetType, bucket, name);
   
               System.out.println(String.format("Created dataset: %s", datasetArn));
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           } catch (Exception rekError) {
               logger.log(Level.SEVERE, "Error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

1. Si vous devez ajouter ou modifier des étiquettes, consultez [Gestion des étiquettes (kit SDK)](md-labels.md#md-labels-sdk).

1. Suivez les étapes décrites dans [Entraînement d’un modèle (kit SDK)](training-model.md#tm-sdk) pour entraîner le modèle.

## Créer une demande de jeu de données
<a name="create-dataset-ground-truth-request"></a>

 Le format de la demande d' CreateDataset opération est le suivant : 

```
{
"DatasetSource": {
"DatasetArn": "string",
"GroundTruthManifest": {
"S3Object": {
"Bucket": "string",
"Name": "string",
"Version": "string"
}
}
},
"DatasetType": "string",
"ProjectArn": "string",
"Tags": {
"string": "string"
}
}
```

# Étiqueter des images avec une tâche Amazon SageMaker AI Ground Truth
<a name="md-create-dataset-ground-truth-job"></a>

Avec Amazon SageMaker AI Ground Truth, vous pouvez faire appel à des employés d'Amazon Mechanical Turk, un fournisseur de votre choix, ou à une main-d'œuvre interne du secteur privé, ainsi qu'à un apprentissage automatique qui vous permet de créer un ensemble d'images étiquetées. Amazon Rekognition Custom Labels importe les fichiers manifestes SageMaker AI Ground Truth à partir d'un compartiment Amazon S3 que vous spécifiez.

Les étiquettes personnalisées Amazon Rekognition prennent en charge les tâches SageMaker AI Ground Truth suivantes.
+ [Classification d’images](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-image-classification.html)
+ [Cadre de délimitation](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-bounding-box.html)

Les fichiers que vous importez sont les images et un fichier manifeste. Le fichier manifeste contient les informations relatives aux étiquettes et aux cadres de délimitation des images que vous importez.

Amazon Rekognition a besoin d’autorisations pour accéder au compartiment Amazon S3 dans lequel vos images sont stockées. Si vous utilisez le compartiment de la console configuré pour vous par Étiquettes personnalisées Amazon Rekognition, les autorisations requises sont déjà configurées. Si vous n’utilisez pas le compartiment de la console, consultez [Accès à des compartiments Amazon S3 externes](su-console-policy.md#su-external-buckets).

## Création d'un fichier manifeste avec une tâche SageMaker AI Ground Truth (Console)
<a name="md-create-dataset-ground-truth-job-console"></a>

La procédure suivante explique comment créer un ensemble de données à l'aide d'images étiquetées par une tâche SageMaker AI Ground Truth. Les fichiers de sortie des tâches sont stockés dans le compartiment de la console Étiquettes personnalisées Amazon Rekognition.<a name="create-dataset-procedure-ground-truth"></a>

**Pour créer un ensemble de données à l'aide d'images étiquetées par une tâche SageMaker AI Ground Truth (console)**

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans le compartiment de la console, [créez un dossier](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-folder.html) destiné à vos images d’entraînement. 
**Note**  
Le bucket de console est créé lorsque vous ouvrez pour la première fois la console Amazon Rekognition Custom Labels dans une région. AWS Pour de plus amples informations, veuillez consulter [Gestion d’un projet Étiquettes personnalisées Amazon Rekognition](managing-project.md).

1. [Chargez vos images](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) dans le dossier que vous venez de créer.

1. Dans le compartiment de la console, créez un dossier destiné à la sortie de la tâche Ground Truth.

1. Ouvrez la console SageMaker AI à l'adresse [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Créez une tâche d’étiquetage Ground Truth. Vous aurez besoin de l'Amazon S3 URLs pour les dossiers que vous avez créés aux étapes 2 et 4. Pour plus d'informations, consultez [Utiliser Amazon SageMaker Ground Truth pour l'étiquetage des données](https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html). 

1. Notez l’emplacement du fichier `output.manifest` dans le dossier que vous avez créé à l’étape 4. Il devrait se trouver dans le sous-dossier `Ground-Truth-Job-Name/manifests/output`.

1. Suivez les instructions sous [Création d'un ensemble de données à l'aide d'un fichier manifeste SageMaker AI Ground Truth (console)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) pour créer un jeu de données avec le fichier manifeste chargé. Pour l’étape 8, dans **Emplacement du fichier .manifest**, entrez l’URL Amazon S3 correspondant à l’emplacement indiqué à l’étape précédente. Si vous utilisez le AWS SDK, faites-le[Création d'un ensemble de données à l'aide d'un fichier manifeste (SDK) SageMaker AI Ground Truth](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).

1. Répétez les étapes 1 à 6 pour créer une tâche SageMaker AI Ground Truth pour votre ensemble de données de test.

# Création d’un fichier manifeste
<a name="md-create-manifest-file"></a>

Vous pouvez créer un ensemble de données de test ou d'entraînement en important un fichier manifeste au format SageMaker AI Ground Truth. Si vos images sont étiquetées dans un format autre qu'un fichier manifeste SageMaker AI Ground Truth, utilisez les informations suivantes pour créer un fichier manifeste au format SageMaker AI Ground Truth. 

Les fichiers manifestes sont au format de [lignes JSON](http://jsonlines.org) où chaque ligne est un objet JSON complet représentant les informations d’étiquetage d’une image. Les étiquettes personnalisées Amazon Rekognition prennent en charge les manifestes SageMaker AI Ground Truth contenant des lignes JSON dans les formats suivants :
+ [Sortie de la tâche de classification](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-class) : à utiliser pour ajouter des étiquettes au niveau de l’image à une image. Une étiquette au niveau de l’image définit la classe de scène, de concept ou d’objet (si les informations d’emplacement d’objets ne sont pas nécessaires) figurant sur une image. Une image peut avoir plusieurs étiquettes au niveau de l’image. Pour plus d’informations, consultez [Importation d'étiquettes au niveau de l'image dans des fichiers manifestes](md-create-manifest-file-classification.md).
+ [Sortie de la tâche de cadre de délimitation](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-box) : à utiliser pour étiqueter la classe et l’emplacement d’un ou de plusieurs objets sur une image. Pour plus d’informations, consultez [Localisation d’objets dans les fichiers manifestes](md-create-manifest-file-object-detection.md).

Les lignes JSON au niveau de l’image et de localisation (cadre de délimitation) peuvent être enchaînées les unes aux autres dans le même fichier manifeste. 

**Note**  
La mise en forme des exemples de lignes JSON présentés dans cette section a été modifiée pour une meilleure lisibilité. 

Lorsque vous importez un fichier manifeste, Étiquettes personnalisées Amazon Rekognition applique des règles de validation pour les limites, la syntaxe et la sémantique. Pour plus d’informations, consultez [Règles de validation des fichiers manifestes](md-create-manifest-file-validation-rules.md). 

Les images référencées par un fichier manifeste doivent se trouver dans le même compartiment Amazon S3. Le fichier manifeste peut se trouver dans un compartiment Amazon S3 différent du compartiment Amazon S3 qui stocke les images. Vous spécifiez l’emplacement d’une image dans le champ `source-ref` d’une ligne JSON. 

Amazon Rekognition a besoin d’autorisations pour accéder au compartiment Amazon S3 dans lequel vos images sont stockées. Si vous utilisez le compartiment de la console configuré pour vous par Étiquettes personnalisées Amazon Rekognition, les autorisations requises sont déjà configurées. Si vous n’utilisez pas le compartiment de la console, consultez [Accès à des compartiments Amazon S3 externes](su-console-policy.md#su-external-buckets).

**Topics**
+ [Création d’un fichier manifeste](#md-create-manifest-file-console)

## Création d’un fichier manifeste
<a name="md-create-manifest-file-console"></a>

La procédure suivante crée un projet avec un jeu de données d’entraînement et de test. Les jeux de données sont générés à partir des fichiers manifestes d’entraînement et de test que vous créez.

<a name="create-dataset-procedure-manifest-file"></a>

**Pour créer un ensemble de données à l'aide d'un fichier manifeste au format SageMaker AI Ground Truth (console)**

1. Dans le compartiment de la console, [créez un dossier](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-folder.html) destiné à vos fichiers manifestes. 

1. Dans le compartiment de la console, créez un dossier destiné à vos images.

1. Chargez vos images dans le dossier que vous venez de créer.

1. Créez un fichier manifeste au format SageMaker AI Ground Truth pour votre ensemble de données d'entraînement. Pour plus d’informations, consultez [Importation d'étiquettes au niveau de l'image dans des fichiers manifestes](md-create-manifest-file-classification.md) et [Localisation d’objets dans les fichiers manifestes](md-create-manifest-file-object-detection.md).
**Important**  
La valeur du champ `source-ref` dans chaque ligne JSON doit correspondre à une image que vous avez chargée.

1. Créez un fichier manifeste au format SageMaker AI Ground Truth pour votre ensemble de données de test. 

1. [Chargez vos fichiers manifestes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) dans le dossier que vous venez de créer.

1. Notez l’emplacement du fichier manifeste.

1. Suivez les instructions sous [Création d'un ensemble de données à l'aide d'un fichier manifeste SageMaker AI Ground Truth (console)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) pour créer un jeu de données avec le fichier manifeste chargé. Pour l’étape 8, dans **Emplacement du fichier .manifest**, entrez l’URL Amazon S3 correspondant à l’emplacement indiqué à l’étape précédente. Si vous utilisez le AWS SDK, faites-le[Création d'un ensemble de données à l'aide d'un fichier manifeste (SDK) SageMaker AI Ground Truth](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).

# Importation d'étiquettes au niveau de l'image dans des fichiers manifestes
<a name="md-create-manifest-file-classification"></a>

Pour importer des étiquettes au niveau des images (images étiquetées avec des scènes, des concepts ou des objets ne nécessitant pas d'informations de localisation), vous devez ajouter des lignes JSON au format SageMaker AI Ground Truth [Classification Job Output](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-class) à un fichier manifeste. Un fichier manifeste est composé d’une ou de plusieurs lignes JSON, une pour chaque image que vous souhaitez importer. 

**Astuce**  
Pour simplifier la création d’un fichier manifeste, nous fournissons un script Python qui crée un fichier manifeste à partir d’un fichier CSV. Pour plus d’informations, consultez [Création d’un fichier manifeste à partir d’un fichier CSV](ex-csv-manifest.md).

**Pour créer un fichier manifeste pour des étiquettes au niveau de l’image**

1. Créez un fichier texte vide.

1. Ajoutez une ligne JSON pour chaque image que vous souhaitez importer. Chaque ligne JSON doit ressembler à ce qui suit.

   ```
   {"source-ref":"s3://custom-labels-console-us-east-1-nnnnnnnnnn/gt-job/manifest/IMG_1133.png","TestCLConsoleBucket":0,"TestCLConsoleBucket-metadata":{"confidence":0.95,"job-name":"labeling-job/testclconsolebucket","class-name":"Echo Dot","human-annotated":"yes","creation-date":"2020-04-15T20:17:23.433061","type":"groundtruth/image-classification"}}
   ```

1. Enregistrez le fichier. Vous pouvez utiliser l’extension `.manifest`, mais cela n’est pas obligatoire. 

1. Créez un jeu de données à l’aide du fichier manifeste que vous avez créé. Pour plus d’informations, consultez [Pour créer un ensemble de données à l'aide d'un fichier manifeste au format SageMaker AI Ground Truth (console)](md-create-manifest-file.md#create-dataset-procedure-manifest-file). 

 

## Lignes JSON au niveau de l’image
<a name="md-manifest-classification-json"></a>

Dans cette section, nous vous expliquons comment créer une ligne JSON pour une image unique. Examinez l’image suivante. Une scène pour l’image suivante pourrait s’appeler *Sunrise*.

![\[Coucher de soleil sur un lac avec un quai et de petits bateaux, entouré de montagnes.\]](http://docs.aws.amazon.com/fr_fr/rekognition/latest/customlabels-dg/images/sunrise.png)


La ligne JSON de l’image précédente, avec la scène *Sunrise*, pourrait être la suivante. 

```
{
    "source-ref": "s3://bucket/images/sunrise.png",
    "testdataset-classification_Sunrise": 1,
    "testdataset-classification_Sunrise-metadata": {
        "confidence": 1,
        "job-name": "labeling-job/testdataset-classification_Sunrise",
        "class-name": "Sunrise",
        "human-annotated": "yes",
        "creation-date": "2020-03-06T17:46:39.176",
        "type": "groundtruth/image-classification"
    }
}
```

Notez les informations suivantes.

### source-ref
<a name="w2aac20c17c25c27c19c11c13"></a>

(Obligatoire) Emplacement Amazon S3 de l’image. Le format est `"s3://BUCKET/OBJECT_PATH"`. Les images d’un jeu de données importé doivent être stockées dans le même compartiment Amazon S3. 

### *testdataset-classification\$1Sunrise*
<a name="w2aac20c17c25c27c19c11c15"></a>

(Obligatoire) Attribut de l’étiquette. Vous choisissez le nom du champ. La valeur du champ (1 dans l’exemple précédent) est un identifiant d’attribut d’étiquette. Elle n’est pas utilisée par Étiquettes personnalisées Amazon Rekognition et peut être n’importe quelle valeur entière. Les métadonnées correspondantes doivent être identifiées par le nom du champ, nom auquel vous devez ajouter *-metadata*. Par exemple, `"testdataset-classification_Sunrise-metadata"`. 

### *testdataset-classification\$1Sunrise*-métadonnées
<a name="w2aac20c17c25c27c19c11c17"></a>

(Obligatoire) Métadonnées relatives à l’attribut de l’étiquette. Le nom du champ doit être identique à celui de l’attribut de l’étiquette. La mention *-metadata* doit être ajoutée à la fin du nom. 

*confidence*  
(Obligatoire) Pas utilisé actuellement par Étiquettes personnalisées Amazon Rekognition, mais une valeur comprise entre 0 et 1 doit être fournie. 

*job-name*  
(Facultatif) Nom que vous choisissez pour la tâche qui traitera l’image. 

*class-name*  
(Obligatoire) Nom de classe que vous choisissez pour la scène ou le concept qui s’applique à l’image. Par exemple, `"Sunrise"`. 

*human-annotated*  
(Obligatoire) Spécifiez `"yes"` si l’annotation a été complétée par un humain. Sinon, spécifiez `"no"`. 

*creation-date*   
(Obligatoire) Date et heure UTC (Coordinated Universal Time) de création de l’étiquette. 

*type*  
(Obligatoire) Type de traitement à appliquer à l’image. Pour les étiquettes au niveau de l’image, la valeur est `"groundtruth/image-classification"`. 

### Ajout de plusieurs étiquettes au niveau de l’image à une image
<a name="md-dataset-purpose-classification-multiple-labels"></a>

Vous pouvez ajouter plusieurs étiquettes à une image. Par exemple, le code JSON suivant ajoute deux étiquettes, *football* et *ball*, à une seule image. 

```
{
    "source-ref": "S3 bucket location", 
    "sport0":0, # FIRST label
    "sport0-metadata": { 
        "class-name": "football", 
        "confidence": 0.8, 
        "type":"groundtruth/image-classification", 
        "job-name": "identify-sport", 
        "human-annotated": "yes", 
        "creation-date": "2018-10-18T22:18:13.527256" 
    },
    "sport1":1, # SECOND label
    "sport1-metadata": { 
        "class-name": "ball", 
        "confidence": 0.8, 
        "type":"groundtruth/image-classification", 
        "job-name": "identify-sport", 
        "human-annotated": "yes", 
        "creation-date": "2018-10-18T22:18:13.527256" 
    }
}  # end of annotations for 1 image
```

# Localisation d’objets dans les fichiers manifestes
<a name="md-create-manifest-file-object-detection"></a>

Vous pouvez importer des images étiquetées avec des informations de localisation d'objets en ajoutant des lignes JSON au format SageMaker AI Ground Truth [Bounding Box Job Output](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html#sms-output-box) à un fichier manifeste. 

Les informations de localisation représentent l’emplacement d’un objet sur une image. L’emplacement est représenté par un cadre de délimitation qui entoure l’objet en question. La structure du cadre de délimitation contient les coordonnées en haut à gauche du cadre de délimitation ainsi que la largeur et la hauteur de ce dernier. Une ligne JSON au format de cadre de délimitation comprend des cadres de délimitation indiquant les emplacements d’un ou de plusieurs objets sur une image et la classe de chaque objet sur l’image. 

Un fichier manifeste est composé d’une ou de plusieurs lignes JSON, chaque ligne contenant les informations relatives à une seule image.

**Pour créer un fichier manifeste pour la localisation d’objets**

1. Créez un fichier texte vide.

1. Ajoutez une ligne JSON pour chaque image que vous souhaitez importer. Chaque ligne JSON doit ressembler à ce qui suit.

   ```
   {"source-ref": "s3://bucket/images/IMG_1186.png", "bounding-box": {"image_size": [{"width": 640, "height": 480, "depth": 3}], "annotations": [{ "class_id": 1,	"top": 251,	"left": 399, "width": 155, "height": 101}, {"class_id": 0, "top": 65, "left": 86, "width": 220,	"height": 334}]}, "bounding-box-metadata": {"objects": [{ "confidence": 1}, {"confidence": 1}],	"class-map": {"0": "Echo",	"1": "Echo Dot"}, "type": "groundtruth/object-detection", "human-annotated": "yes",	"creation-date": "2013-11-18T02:53:27", "job-name": "my job"}}
   ```

1. Enregistrez le fichier. Vous pouvez utiliser l’extension `.manifest`, mais cela n’est pas obligatoire. 

1. Créez un jeu de données à l’aide du fichier que vous venez de créer. Pour plus d’informations, consultez [Pour créer un ensemble de données à l'aide d'un fichier manifeste au format SageMaker AI Ground Truth (console)](md-create-manifest-file.md#create-dataset-procedure-manifest-file). 



## Lignes JSON du cadre de délimitation des objets
<a name="md-manifest-object-localization-json"></a>

Dans cette section, nous vous expliquons comment créer une ligne JSON pour une image unique. L’image suivante affiche des cadres de délimitation autour des appareils Amazon Echo et Amazon Echo Dot.

![\[Deux haut-parleurs intelligents Amazon, l'un avec boîtier de délimitation vert et l'autre avec boîtier de délimitation bleu, sur une surface en bois.\]](http://docs.aws.amazon.com/fr_fr/rekognition/latest/customlabels-dg/images/echos.png)


Voici la ligne JSON des cadres de délimitation correspondant à l’image précédente. 

```
{
	"source-ref": "s3://custom-labels-bucket/images/IMG_1186.png",
	"bounding-box": {
		"image_size": [{
			"width": 640,
			"height": 480,
			"depth": 3
		}],
		"annotations": [{
			"class_id": 1,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}, {
			"class_id": 0,
			"top": 65,
			"left": 86,
			"width": 220,
			"height": 334
		}]
	},
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
		"class-map": {
			"0": "Echo",
			"1": "Echo Dot"
		},
		"type": "groundtruth/object-detection",
		"human-annotated": "yes",
		"creation-date": "2013-11-18T02:53:27",
		"job-name": "my job"
	}
}
```

Notez les informations suivantes.

### source-ref
<a name="cd-manifest-source-ref"></a>

(Obligatoire) Emplacement Amazon S3 de l’image. Le format est `"s3://BUCKET/OBJECT_PATH"`. Les images d’un jeu de données importé doivent être stockées dans le même compartiment Amazon S3. 

### *bounding-box*
<a name="md-manifest-source-bounding-box"></a>

(Obligatoire) Attribut de l’étiquette. Vous choisissez le nom du champ. Contient la taille de l’image et des cadres de délimitation pour chaque objet détecté dans l’image. Les métadonnées correspondantes doivent être identifiées par le nom du champ, nom auquel vous devez ajouter *-metadata*. Par exemple, `"bounding-box-metadata"`. 

*image\$1size*  
(Obligatoire) Tableau à élément unique contenant la taille de l’image en pixels.   
+ *height* : (obligatoire) hauteur de l’image, en pixels. 
+ *width* : (obligatoire) profondeur de l’image en pixels. 
+ *depth* : (obligatoire) nombre de canaux dans l’image. Pour les images RVB, la valeur est 3. Pas utilisé actuellement par Étiquettes personnalisées Amazon Rekognition, mais une valeur doit être fournie. 

*annotations*  
(Obligatoire) Tableau d’informations relatives au cadre de délimitation pour chaque objet détecté dans l’image.  
+ *class\$1id* : (obligatoire) correspond à l’étiquette dans *class-map*. Dans l’exemple précédent, l’objet avec la valeur `1` comme *class\$1id* est l’appareil Echo Dot sur l’image. 
+ *top* : (obligatoire) distance entre le haut de l’image et le haut du cadre de délimitation, en pixels. 
+ *left* : (obligatoire) distance entre la gauche de l’image et la gauche du cadre de délimitation, en pixels. 
+ *width* : (obligatoire) largeur du cadre de délimitation, en pixels. 
+ *height* : (obligatoire) hauteur du cadre de délimitation, en pixels. 

### *bounding-box*-métadonnées
<a name="md-manifest-source-bounding-box-metadata"></a>

(Obligatoire) Métadonnées relatives à l’attribut de l’étiquette. Le nom du champ doit être identique à celui de l’attribut de l’étiquette. La mention *-metadata* doit être ajoutée à la fin du nom. Tableau d’informations relatives au cadre de délimitation pour chaque objet détecté dans l’image.

*Objets*  
(Obligatoire) Tableau d’objets qui se trouvent dans l’image. Correspond au tableau *annotations* par index. L’attribut de confiance n’est pas utilisé par Étiquettes personnalisées Amazon Rekognition. 

*class-map*  
(Obligatoire) Mappage des classes qui s’appliquent aux objets détectés dans l’image. 

*type*  
(Obligatoire) Type de tâche de classification. `"groundtruth/object-detection"` identifie la tâche en tant que détection d’objets. 

*creation-date*   
(Obligatoire) Date et heure UTC (Coordinated Universal Time) de création de l’étiquette. 

*human-annotated*  
(Obligatoire) Spécifiez `"yes"` si l’annotation a été complétée par un humain. Sinon, spécifiez `"no"`. 

*job-name*  
(Facultatif) Nom de la tâche qui traitera l’image. 

# Règles de validation des fichiers manifestes
<a name="md-create-manifest-file-validation-rules"></a>

 Lorsque vous importez un fichier manifeste, Étiquettes personnalisées Amazon Rekognition applique des règles de validation pour les limites, la syntaxe et la sémantique. Le schéma SageMaker AI Ground Truth impose la validation syntaxique. Pour plus d’informations, consultez [Sorties](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-data-output.html). Vous trouverez ci-dessous les règles de validation des limites et de la sémantique.

**Note**  
Les règles de non-validité de 20 % s’appliquent cumulativement à toutes les règles de validation. Si l’importation dépasse la limite de 20 % en raison d’une combinaison quelconque, telle que 15 % de code JSON non valide et 15 % d’images non valides, l’importation échoue. 
Chaque objet de jeu de données est une ligne dans le manifeste. Les lignes vierges/non valides sont également considérées comme des objets de jeu de données.
Les chevauchements correspondent aux (étiquettes communes entre le test et l’entraînement)/(étiquettes d’entraînement).

**Topics**
+ [Restrictions](#md-validation-rules-limits)
+ [Sémantique](#md-validation-rules-semantics)

## Restrictions
<a name="md-validation-rules-limits"></a>


| Validation | Limite | Erreur signalée | 
| --- | --- | --- | 
|  Taille du fichier manifeste  |  1 Go maximum  |  Erreur  | 
|  Nombre maximal de lignes pour un fichier manifeste  |  Maximum de 250 000 objets de jeu de données sous forme de lignes dans un manifeste.   |  Erreur  | 
|  Limite inférieure du nombre total d’objets de jeu de données valides par étiquette   |  >=1  |  Erreur  | 
|  Limite inférieure au niveau des étiquettes  |  >=2  |  Erreur  | 
|  Limite supérieure au niveau des étiquettes  |  <= 250  |  Erreur  | 
|  Nombre minimal de cadres de délimitation par image  |  0  |  Aucune  | 
|  Nombre maximal de cadres de délimitation par image  |  50  |  Aucune  | 

## Sémantique
<a name="md-validation-rules-semantics"></a>




| Validation | Limite | Erreur signalée | 
| --- | --- | --- | 
|  Manifeste vide  |    |  Erreur  | 
|  Objet source-ref manquant/inaccessible  |  Nombre d’objets inférieur à 20 %  |  Avertissement  | 
|  Objet source-ref manquant/inaccessible  |  Nombre d’objets > 20 %  |  Erreur  | 
|  Étiquettes de test non présentes dans le jeu de données d’entraînement   |  Au moins 50 % de chevauchement dans les étiquettes  |  Erreur  | 
|  Combinaison d’exemples d’étiquettes et d’objets pour une même étiquette dans un jeu de données. Classification et détection pour la même classe dans un objet de jeu de données.   |    |  Aucune erreur ni aucun avertissement  | 
|  Chevauchement des ressources entre le test et l’entraînement   |  Il ne doit pas y avoir de chevauchement entre les jeux de données de test et d’entraînement.   |    | 
|  Les images d’un jeu de données doivent provenir du même compartiment   |  Erreur si les objets se trouvent dans un autre compartiment  |  Erreur  | 

# Conversion d’autres formats de jeu de données en fichier manifeste
<a name="md-converting-to-sm-format"></a>

Vous pouvez utiliser les informations suivantes pour créer des fichiers manifestes au format Amazon SageMaker AI à partir de différents formats de jeux de données sources. Après avoir créé le fichier manifeste, utilisez-le pour créer un jeu de données. Pour de plus amples informations, veuillez consulter [Utilisation d'un fichier manifeste pour importer des images](md-create-dataset-ground-truth.md).

**Topics**
+ [Transformation d'un ensemble de données COCO en un format de fichier manifeste](md-transform-coco.md)
+ [Transformation des fichiers manifestes SageMaker AI Ground Truth à étiquettes multiples](md-gt-cl-transform.md)
+ [Création d’un fichier manifeste à partir d’un fichier CSV](ex-csv-manifest.md)

# Transformation d'un ensemble de données COCO en un format de fichier manifeste
<a name="md-transform-coco"></a>

[COCO](http://cocodataset.org/#home) est un format permettant de spécifier des jeux de données de détection, de segmentation et de sous-titrage des objets à grande échelle. Cet [exemple](md-coco-transform-example.md) Python vous montre comment transformer un jeu de données au format de détection d’objets COCO en un [fichier manifeste Étiquettes personnalisées Amazon Rekognition au format cadre de délimitation](md-create-manifest-file-object-detection.md). Cette section inclut également des informations que vous pouvez utiliser pour écrire votre propre code.

Un fichier JSON au format COCO se compose de cinq sections fournissant des informations pour un *jeu de données complet*. Pour plus d’informations, consultez [Le format du jeu de données COCO](md-coco-overview.md). 
+ `info` : informations générales sur le jeu de données. 
+ `licenses ` : informations de licence pour les images du jeu de données.
+ [`images`](md-coco-overview.md#md-coco-images) : liste des images du jeu de données.
+ [`annotations`](md-coco-overview.md#md-coco-annotations) : liste d’annotations (y compris les cadres de délimitation) présentes dans toutes les images du jeu de données.
+ [`categories`](md-coco-overview.md#md-coco-categories) : liste des catégories d’étiquettes.

Vous aurez besoin d’informations provenant des listes `images`, `annotations` et `categories` pour créer un fichier manifeste Étiquettes personnalisées Amazon Rekognition.

Un fichier manifeste Étiquettes personnalisées Amazon Rekognition est au format de lignes JSON. Chaque ligne contient les informations relatives aux cadres de délimitation et aux étiquettes d’un ou de plusieurs objets *dans une image*. Pour plus d’informations, consultez [Localisation d’objets dans les fichiers manifestes](md-create-manifest-file-object-detection.md).

## Mappage d’objets COCO avec une ligne JSON Étiquettes personnalisées
<a name="md-mapping-coco"></a>

Pour transformer un jeu de données au format COCO, mappez le jeu de données COCO avec un fichier manifeste Étiquettes personnalisées Amazon Rekognition pour la localisation d’objets. Pour de plus amples informations, veuillez consulter [Localisation d’objets dans les fichiers manifestes](md-create-manifest-file-object-detection.md). Pour créer une ligne JSON pour chaque image, le fichier manifeste doit mapper le jeu de données `image` COCO et le champ `category` d'objet IDs. `annotation` 

Voici un exemple de fichier manifeste COCO. Pour plus d’informations, consultez [Le format du jeu de données COCO](md-coco-overview.md).

```
{
    "info": {
        "description": "COCO 2017 Dataset","url": "http://cocodataset.org","version": "1.0","year": 2017,"contributor": "COCO Consortium","date_created": "2017/09/01"
    },
    "licenses": [
        {"url": "http://creativecommons.org/licenses/by/2.0/","id": 4,"name": "Attribution License"}
    ],
    "images": [
        {"id": 242287, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg", "flickr_url": "http://farm3.staticflickr.com/2626/xxxxxxxxxxxx.jpg", "width": 426, "height": 640, "file_name": "xxxxxxxxx.jpg", "date_captured": "2013-11-15 02:41:42"},
        {"id": 245915, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg", "flickr_url": "http://farm1.staticflickr.com/88/xxxxxxxxxxxx.jpg", "width": 640, "height": 480, "file_name": "nnnnnnnnnn.jpg", "date_captured": "2013-11-18 02:53:27"}
    ],
    "annotations": [
        {"id": 125686, "category_id": 0, "iscrowd": 0, "segmentation": [[164.81, 417.51,......167.55, 410.64]], "image_id": 242287, "area": 42061.80340000001, "bbox": [19.23, 383.18, 314.5, 244.46]},
        {"id": 1409619, "category_id": 0, "iscrowd": 0, "segmentation": [[376.81, 238.8,........382.74, 241.17]], "image_id": 245915, "area": 3556.2197000000015, "bbox": [399, 251, 155, 101]},
        {"id": 1410165, "category_id": 1, "iscrowd": 0, "segmentation": [[486.34, 239.01,..........495.95, 244.39]], "image_id": 245915, "area": 1775.8932499999994, "bbox": [86, 65, 220, 334]}
    ],
    "categories": [
        {"supercategory": "speaker","id": 0,"name": "echo"},
        {"supercategory": "speaker","id": 1,"name": "echo dot"}
    ]
}
```

Le schéma suivant montre comment les listes de jeux de données COCO pour un *jeu de données* sont mappées avec les lignes JSON d’Étiquettes personnalisées Amazon Rekognition pour une *image*. Chaque ligne JSON d'une image possède une référence source, un champ de métadonnées de tâche et un champ de métadonnées de tâche. Les couleurs qui sont les mêmes indiquent des informations relatives à une seule image. Notez que dans le manifeste, une image individuelle peut comporter plusieurs annotations et métadonnées/catégories.

![\[Schéma montrant la structure de Coco Manifest, avec les images, les annotations et les catégories qu'il contient.\]](http://docs.aws.amazon.com/fr_fr/rekognition/latest/customlabels-dg/images/coco-transform.png)


**Pour obtenir les objets COCO pour une seule ligne JSON**

1. Pour chaque image de la liste d’images, récupérez l’annotation dans la liste d’annotations où la valeur du champ d’annotation `image_id` correspond à celle du champ `id` de l’image.

1. Pour chaque annotation ayant une correspondance dans l’étape 1, parcourez la liste `categories` et récupérez chaque `category` où la valeur du champ `category` `id` correspond au champ `category_id` de l’objet `annotation`.

1. Créez une ligne JSON pour l’image à l’aide des objets `image`, `annotation` et `category` associés. Pour mapper les champs, consultez [Mappage de champs d’objet COCO avec des champs d’objet de ligne JSON Étiquettes personnalisées](#md-mapping-fields-coco). 

1. Répétez les étapes 1 à 3 jusqu’à ce que vous ayez créé des lignes JSON pour chaque objet `image` de la liste `images`.

Pour obtenir un exemple de code, consultez [Conversion d’un jeu de données COCO](md-coco-transform-example.md).

## Mappage de champs d’objet COCO avec des champs d’objet de ligne JSON Étiquettes personnalisées
<a name="md-mapping-fields-coco"></a>

Après avoir identifié les objets COCO pour une ligne Étiquettes personnalisées Amazon Rekognition, vous devez mapper les champs d’objets COCO avec les champs d’objet de ligne JSON Étiquettes personnalisées Amazon Rekognition respectifs. L’exemple suivant de ligne JSON Étiquettes personnalisées Amazon Rekognition mappe une image (`id`=`000000245915`) avec l’exemple JSON COCO précédent. Notez les informations suivantes.
+ `source-ref` correspond à l’emplacement de l’image dans un compartiment Amazon S3. Si vos images COCO ne sont pas stockées dans un compartiment Amazon S3, vous devez les y transférer.
+ La liste `annotations` contient un objet `annotation` pour chaque objet de l’image. Un objet `annotation` comprend des informations relatives à un cadre de délimitation (`top`, `left`, `width`, `height`) et un identifiant d’étiquette (`class_id`).
+ L’identifiant d’étiquette (`class_id`) correspond à la liste `class-map` figurant dans les métadonnées. Il répertorie les étiquettes utilisées sur l’image.

```
{
	"source-ref": "s3://custom-labels-bucket/images/000000245915.jpg",
	"bounding-box": {
		"image_size": {
			"width": 640,
			"height": 480,
			"depth": 3
		},
		"annotations": [{
			"class_id": 0,
			"top": 251,
			"left": 399,
			"width": 155,
			"height": 101
		}, {
			"class_id": 1,
			"top": 65,
			"left": 86,
			"width": 220,
			"height": 334
		}]
	},
	"bounding-box-metadata": {
		"objects": [{
			"confidence": 1
		}, {
			"confidence": 1
		}],
		"class-map": {
			"0": "Echo",
			"1": "Echo Dot"
		},
		"type": "groundtruth/object-detection",
		"human-annotated": "yes",
		"creation-date": "2018-10-18T22:18:13.527256",
		"job-name": "my job"
	}
}
```

Utilisez les informations suivantes pour mapper les champs du fichier manifeste Étiquettes personnalisées Amazon Rekognition avec les champs JSON du jeu de données COCO. 

### source-ref
<a name="md-source-ref-coco"></a>

URL au format S3 pour l’emplacement de l’image. L’image doit être stockée dans un compartiment S3. Pour plus d’informations, consultez [source-ref](md-create-manifest-file-object-detection.md#cd-manifest-source-ref). Si le champ COCO `coco_url` pointe vers l’emplacement d’un compartiment S3, vous pouvez utiliser la valeur de `coco_url` pour la valeur de `source-ref`. Vous pouvez également mapper `source-ref` avec le champ (COCO) `file_name` et ajouter dans le code de transformation le chemin S3 requis vers l’endroit où l’image est stockée. 

### *bounding-box*
<a name="md-label-attribute-id-coco"></a>

Nom d’attribut d’étiquette de votre choix. Pour plus d’informations, consultez [*bounding-box*](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box).

#### image\$1size
<a name="md-image-size-coco"></a>

Taille de l’image, en pixels. Correspond à un objet `image` dans la liste des [images](md-coco-overview.md#md-coco-images).
+ `height`-> `image.height`
+ `width`-> `image.width`
+ `depth`-> Pas utilisé par Étiquettes personnalisées Amazon Rekognition, mais une valeur doit être fournie.

#### annotations
<a name="md-annotations-coco"></a>

Liste d’objets `annotation`. Il y a une `annotation` pour chaque objet de l’image.

#### annotation
<a name="md-annotation-coco"></a>

Contient les informations relatives au cadre de délimitation pour une instance d’un objet sur l’image. 
+ `class_id` -> mappage d’ID numérique avec la liste `class-map` d’Étiquettes personnalisées.
+ `top` -> `bbox[1]`
+ `left` -> `bbox[0]`
+ `width` -> `bbox[2]`
+ `height` -> `bbox[3]`

### *bounding-box*-métadonnées
<a name="md-metadata-coco"></a>

Métadonnées pour l’attribut d’étiquette. Inclut les étiquettes et les identifiants d’étiquettes. Pour plus d’informations, consultez [*bounding-box*-métadonnées](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box-metadata).

#### Objets
<a name="cd-metadata-objects-coco"></a>

Tableau des objets de l’image. Correspond à la liste `annotations` par index.

##### Objet
<a name="cd-metadata-object-coco"></a>
+ `confidence`-> Pas utilisé par Étiquettes personnalisées Amazon Rekognition, mais une valeur (1) doit être fournie.

#### class-map
<a name="md-metadata-class-map-coco"></a>

Mappage des étiquettes (classes) qui s’appliquent aux objets détectés dans l’image. Correspond aux objets de catégorie dans la liste des [catégories](md-coco-overview.md#md-coco-categories).
+ `id` -> `category.id`
+ `id value` -> `category.name`

#### type
<a name="md-type-coco"></a>

Doit être `groundtruth/object-detection`

#### human-annotated
<a name="md-human-annotated-coco"></a>

Spécifiez `yes` ou `no`. Pour plus d’informations, consultez [*bounding-box*-métadonnées](md-create-manifest-file-object-detection.md#md-manifest-source-bounding-box-metadata).

#### creation-date -> [image](md-coco-overview.md#md-coco-images).date\$1captured
<a name="md-creation-date-coco"></a>

Date et heure de création de l’image. Correspond au champ [image](md-coco-overview.md#md-coco-images).date\$1captured d’une image dans la liste des images COCO. Étiquettes personnalisées Amazon Rekognition attend du format `creation-date` qu’il correspond à *Y-M-DTH:M:S*.

#### job-name
<a name="md-job-name-coco"></a>

Nom de tâche de votre choix. 

# Le format du jeu de données COCO
<a name="md-coco-overview"></a>

Un jeu de données COCO se compose de cinq sections d’informations qui fournissent des informations pour le jeu de données complet. Le format d’un jeu de données de détection d’objets COCO est documenté dans la section [Format de données COCO](http://cocodataset.org/#format-data). 
+ info : informations générales sur le jeu de données. 
+ licenses : informations de licence pour les images du jeu de données.
+ [images](#md-coco-images) : liste des images du jeu de données.
+ [annotations](#md-coco-annotations) : liste d’annotations (y compris les cadres de délimitation) présentes dans toutes les images du jeu de données.
+ [categories](#md-coco-categories) : liste des catégories d’étiquettes.

Pour créer un manifeste Étiquettes personnalisées, utilisez les listes `images`, `annotations` et `categories` du fichier manifeste COCO. Les autres sections (`info`, `licences`) ne sont pas obligatoires. Voici un exemple de fichier manifeste COCO.

```
{
    "info": {
        "description": "COCO 2017 Dataset","url": "http://cocodataset.org","version": "1.0","year": 2017,"contributor": "COCO Consortium","date_created": "2017/09/01"
    },
    "licenses": [
        {"url": "http://creativecommons.org/licenses/by/2.0/","id": 4,"name": "Attribution License"}
    ],
    "images": [
        {"id": 242287, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/xxxxxxxxxxxx.jpg", "flickr_url": "http://farm3.staticflickr.com/2626/xxxxxxxxxxxx.jpg", "width": 426, "height": 640, "file_name": "xxxxxxxxx.jpg", "date_captured": "2013-11-15 02:41:42"},
        {"id": 245915, "license": 4, "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg", "flickr_url": "http://farm1.staticflickr.com/88/xxxxxxxxxxxx.jpg", "width": 640, "height": 480, "file_name": "nnnnnnnnnn.jpg", "date_captured": "2013-11-18 02:53:27"}
    ],
    "annotations": [
        {"id": 125686, "category_id": 0, "iscrowd": 0, "segmentation": [[164.81, 417.51,......167.55, 410.64]], "image_id": 242287, "area": 42061.80340000001, "bbox": [19.23, 383.18, 314.5, 244.46]},
        {"id": 1409619, "category_id": 0, "iscrowd": 0, "segmentation": [[376.81, 238.8,........382.74, 241.17]], "image_id": 245915, "area": 3556.2197000000015, "bbox": [399, 251, 155, 101]},
        {"id": 1410165, "category_id": 1, "iscrowd": 0, "segmentation": [[486.34, 239.01,..........495.95, 244.39]], "image_id": 245915, "area": 1775.8932499999994, "bbox": [86, 65, 220, 334]}
    ],
    "categories": [
        {"supercategory": "speaker","id": 0,"name": "echo"},
        {"supercategory": "speaker","id": 1,"name": "echo dot"}
    ]
}
```

## liste d’images
<a name="md-coco-images"></a>

Les images référencées par un jeu de données COCO sont répertoriées dans le tableau d’images. Chaque objet image contient des informations sur l’image, telles que le nom du fichier image. Dans l’exemple d’objet image ci-dessous, notez les informations suivantes et les champs obligatoires pour créer un fichier manifeste Étiquettes personnalisées Amazon Rekognition.
+ `id` : (obligatoire) identifiant unique de l’image. Le champ `id` correspond au champ `id` du tableau d’annotations (où les informations relatives aux cadres de délimitation sont stockées).
+ `license` : (facultatif) correspond au tableau de licences. 
+ `coco_url` : (facultatif) emplacement de l’image.
+ `flickr_url` : (facultatif) emplacement de l’image sur Flickr.
+ `width` : (obligatoire) largeur de l’image.
+ `height` : (obligatoire) hauteur de l’image.
+ `file_name` : (obligatoire) nom du fichier image. Dans cet exemple, `file_name` et `id` correspondent, mais cela n’est pas obligatoire pour les jeux de données COCO. 
+ `date_captured` : (obligatoire) date et heure de capture de l’image. 

```
{
    "id": 245915,
    "license": 4,
    "coco_url": "http://images.cocodataset.org/val2017/nnnnnnnnnnnn.jpg",
    "flickr_url": "http://farm1.staticflickr.com/88/nnnnnnnnnnnnnnnnnnn.jpg",
    "width": 640,
    "height": 480,
    "file_name": "000000245915.jpg",
    "date_captured": "2013-11-18 02:53:27"
}
```

## liste des annotations (cadres de délimitation)
<a name="md-coco-annotations"></a>

Les informations relatives aux cadres de délimitation pour tous les objets de toutes les images sont stockées dans la liste des annotations. Un seul objet d’annotation contient les informations relatives au cadre de délimitation correspondant à un seul objet et l’étiquette de l’objet sur une image. Il existe un objet d’annotation pour chaque instance d’un objet sur une image. 

Dans l’exemple ci-dessous, notez les informations suivantes et les champs obligatoires pour créer un fichier manifeste Étiquettes personnalisées Amazon Rekognition. 
+ `id` : (facultatif) identifiant de l’annotation.
+ `image_id` : (obligatoire) correspond à l’image `id` dans le tableau d’images.
+ `category_id` : (obligatoire) identifiant de l’étiquette qui identifie l’objet dans un cadre de délimitation. Il correspond au champ `id` du tableau des catégories. 
+ `iscrowd` : (facultatif) spécifie si l’image contient une foule d’objets. 
+ `segmentation` : (facultatif) informations de segmentation pour les objets d’une image. Étiquettes personnalisées Amazon Rekognition ne prend pas en charge la segmentation. 
+ `area` : (facultatif) zone de l’annotation.
+ `bbox` : (obligatoire) contient les coordonnées, en pixels, d’un cadre de délimitation autour d’un objet sur l’image.

```
{
    "id": 1409619,
    "category_id": 1,
    "iscrowd": 0,
    "segmentation": [
        [86.0, 238.8,..........382.74, 241.17]
    ],
    "image_id": 245915,
    "area": 3556.2197000000015,
    "bbox": [86, 65, 220, 334]
}
```

## liste des catégories
<a name="md-coco-categories"></a>

Les informations relatives aux étiquettes sont stockées dans le tableau des catégories. Dans l’exemple d’objet de catégorie ci-dessous, notez les informations suivantes et les champs obligatoires pour créer un fichier manifeste Étiquettes personnalisées Amazon Rekognition. 
+ `supercategory` : (facultatif) catégorie parent d’une étiquette. 
+ `id` : (obligatoire) identifiant de l’étiquette. Le champ `id` correspond au champ `category_id` d’un objet `annotation`. Dans l’exemple suivant, l’identifiant d’un appareil echo dot est 2. 
+ `name` : (obligatoire) nom de l’étiquette. 

```
        {"supercategory": "speaker","id": 2,"name": "echo dot"}
```

# Conversion d’un jeu de données COCO
<a name="md-coco-transform-example"></a>

Utilisez l’exemple Python suivant pour transformer les informations du cadre de délimitation d’un jeu de données au format COCO en un fichier manifeste Étiquettes personnalisées Amazon Rekognition. Le code charge le fichier manifeste créé dans votre compartiment Amazon S3. Le code fournit également une commande AWS CLI que vous pouvez utiliser pour charger vos images. 

**Pour convertir un jeu de données COCO (kit SDK)**

1. Si vous ne l’avez pas déjà fait :

   1. Vérifiez que vous disposez des autorisations `AmazonS3FullAccess`. Pour de plus amples informations, veuillez consulter [Configuration des autorisations du kit SDK](su-sdk-permissions.md).

   1. Installez et configurez le AWS CLI et le AWS SDKs. Pour de plus amples informations, veuillez consulter [Étape 4 : configurer le AWS CLI et AWS SDKs](su-awscli-sdk.md).

1. Utilisez le code Python suivant pour convertir un jeu de données COCO. Définissez les valeurs suivantes.
   + `s3_bucket` : nom du compartiment S3 dans lequel vous souhaitez stocker les images et le fichier manifeste Étiquettes personnalisées Amazon Rekognition. 
   + `s3_key_path_images` : chemin d’accès vers l’endroit où vous souhaitez placer les images dans le compartiment S3 (`s3_bucket`).
   + `s3_key_path_manifest_file` : chemin d’accès vers l’endroit où vous souhaitez placer le fichier manifeste Étiquettes personnalisées dans le compartiment S3 (`s3_bucket`).
   + `local_path` : chemin local vers lequel l’exemple ouvre le jeu de données COCO en entrée et enregistre également le nouveau fichier manifeste Étiquettes personnalisées.
   + `local_images_path` : chemin local vers les images que vous souhaitez utiliser pour l’entraînement.
   + `coco_manifest` : nom de fichier du jeu de données COCO en entrée.
   + `cl_manifest_file` : nom du fichier manifeste créé par l’exemple. Ce fichier est enregistré à l’emplacement indiqué par `local_path`. Par convention, il possède l’extension `.manifest`, mais cela n’est pas obligatoire.
   + `job_name` : nom de la tâche Étiquettes personnalisées.

   ```
   import json
   import os
   import random
   import shutil
   import datetime
   import botocore
   import boto3
   import PIL.Image as Image
   import io
   
   #S3 location for images
   s3_bucket = 'bucket'
   s3_key_path_manifest_file = 'path to custom labels manifest file/'
   s3_key_path_images = 'path to images/'
   s3_path='s3://' + s3_bucket  + '/' + s3_key_path_images
   s3 = boto3.resource('s3')
   
   #Local file information
   local_path='path to input COCO dataset and output Custom Labels manifest/'
   local_images_path='path to COCO images/'
   coco_manifest = 'COCO dataset JSON file name'
   coco_json_file = local_path + coco_manifest
   job_name='Custom Labels job name'
   cl_manifest_file = 'custom_labels.manifest'
   
   label_attribute ='bounding-box'
   
   open(local_path + cl_manifest_file, 'w').close()
   
   # class representing a Custom Label JSON line for an image
   class cl_json_line:  
       def __init__(self,job, img):  
   
           #Get image info. Annotations are dealt with seperately
           sizes=[]
           image_size={}
           image_size["width"] = img["width"]
           image_size["depth"] = 3
           image_size["height"] = img["height"]
           sizes.append(image_size)
   
           bounding_box={}
           bounding_box["annotations"] = []
           bounding_box["image_size"] = sizes
   
           self.__dict__["source-ref"] = s3_path + img['file_name']
           self.__dict__[job] = bounding_box
   
           #get metadata
           metadata = {}
           metadata['job-name'] = job_name
           metadata['class-map'] = {}
           metadata['human-annotated']='yes'
           metadata['objects'] = [] 
           date_time_obj = datetime.datetime.strptime(img['date_captured'], '%Y-%m-%d %H:%M:%S')
           metadata['creation-date']= date_time_obj.strftime('%Y-%m-%dT%H:%M:%S') 
           metadata['type']='groundtruth/object-detection'
           
           self.__dict__[job + '-metadata'] = metadata
   
   
   print("Getting image, annotations, and categories from COCO file...")
   
   with open(coco_json_file) as f:
   
       #Get custom label compatible info    
       js = json.load(f)
       images = js['images']
       categories = js['categories']
       annotations = js['annotations']
   
       print('Images: ' + str(len(images)))
       print('annotations: ' + str(len(annotations)))
       print('categories: ' + str(len (categories)))
   
   
   print("Creating CL JSON lines...")
       
   images_dict = {image['id']: cl_json_line(label_attribute, image) for image in images}
   
   print('Parsing annotations...')
   for annotation in annotations:
   
       image=images_dict[annotation['image_id']]
   
       cl_annotation = {}
       cl_class_map={}
   
       # get bounding box information
       cl_bounding_box={}
       cl_bounding_box['left'] = annotation['bbox'][0]
       cl_bounding_box['top'] = annotation['bbox'][1]
    
       cl_bounding_box['width'] = annotation['bbox'][2]
       cl_bounding_box['height'] = annotation['bbox'][3]
       cl_bounding_box['class_id'] = annotation['category_id']
   
       getattr(image, label_attribute)['annotations'].append(cl_bounding_box)
   
   
       for category in categories:
            if annotation['category_id'] == category['id']:
               getattr(image, label_attribute + '-metadata')['class-map'][category['id']]=category['name']
           
       
       cl_object={}
       cl_object['confidence'] = int(1)  #not currently used by Custom Labels
       getattr(image, label_attribute + '-metadata')['objects'].append(cl_object)
   
   print('Done parsing annotations')
   
   # Create manifest file.
   print('Writing Custom Labels manifest...')
   
   for im in images_dict.values():
   
       with open(local_path+cl_manifest_file, 'a+') as outfile:
               json.dump(im.__dict__,outfile)
               outfile.write('\n')
               outfile.close()
   
   # Upload manifest file to S3 bucket.
   print ('Uploading Custom Labels manifest file to S3 bucket')
   print('Uploading'  + local_path + cl_manifest_file + ' to ' + s3_key_path_manifest_file)
   print(s3_bucket)
   s3 = boto3.resource('s3')
   s3.Bucket(s3_bucket).upload_file(local_path + cl_manifest_file, s3_key_path_manifest_file + cl_manifest_file)
   
   # Print S3 URL to manifest file,
   print ('S3 URL Path to manifest file. ')
   print('\033[1m s3://' + s3_bucket + '/' + s3_key_path_manifest_file + cl_manifest_file + '\033[0m') 
   
   # Display aws s3 sync command.
   print ('\nAWS CLI s3 sync command to upload your images to S3 bucket. ')
   print ('\033[1m aws s3 sync ' + local_images_path + ' ' + s3_path + '\033[0m')
   ```

1. Exécutez le code.

1. Dans la sortie du programme, notez la commande `s3 sync`. Vous en aurez besoin à l’étape suivante.

1. À partir d’une invite de commande, exécutez la commande `s3 sync`. Vos images sont importées dans le compartiment S3. Si la commande échoue pendant le chargement, exécutez-la à nouveau jusqu’à ce que les images locales soient synchronisées avec le compartiment S3.

1. Dans la sortie du programme, notez le chemin de l’URL S3 vers le fichier manifeste. Vous en aurez besoin à l’étape suivante.

1. Suivez les instructions sous [Création d'un ensemble de données à l'aide d'un fichier manifeste SageMaker AI Ground Truth (console)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) pour créer un jeu de données avec le fichier manifeste chargé. Pour l’étape 8, dans **Emplacement du fichier .manifest**, entrez l’URL Amazon S3 que vous avez notée à l’étape précédente. Si vous utilisez le kit AWS SDK, effectuez les actions indiquées dans [Création d'un ensemble de données à l'aide d'un fichier manifeste (SDK) SageMaker AI Ground Truth](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).

# Transformation des fichiers manifestes SageMaker AI Ground Truth à étiquettes multiples
<a name="md-gt-cl-transform"></a>

Cette rubrique explique comment transformer un fichier manifeste Amazon SageMaker AI Ground Truth à étiquettes multiples en un fichier manifeste au format Amazon Rekognition Custom Labels. 

SageMaker Les fichiers manifestes AI Ground Truth pour les tâches à étiquettes multiples sont formatés différemment des fichiers manifestes au format Amazon Rekognition Custom Labels. La classification à plusieurs étiquettes a lieu lorsqu’une image est classée dans un ensemble de classes, mais qu’elle peut appartenir à plusieurs classes à la fois. Dans ce cas, l’image peut potentiellement comporter plusieurs étiquettes, telles que *football* et *ballon*.

Pour plus d'informations sur les tâches SageMaker AI Ground Truth à étiquettes multiples, consultez la section [Classification d'images (étiquettes multiples)](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-image-classification-multilabel.html). Pour plus d’informations sur les fichiers manifestes Étiquettes personnalisées Amazon Rekognition à plusieurs étiquettes, consultez [Ajout de plusieurs étiquettes au niveau de l’image à une image](md-create-manifest-file-classification.md#md-dataset-purpose-classification-multiple-labels).

## Obtenir le fichier manifeste pour une tâche d' SageMaker AI Ground Truth
<a name="md-get-gt-manifest"></a>

La procédure suivante explique comment obtenir le fichier manifeste de sortie (`output.manifest`) pour une tâche Amazon SageMaker AI Ground Truth. Utilisez `output.manifest` comme entrée pour la procédure suivante.

**Pour télécharger un fichier manifeste de travail d' SageMaker AI Ground Truth**

1. Ouvrez la [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/). 

1. Dans le volet de navigation, choisissez **Ground Truth**, puis **Étiquetage des tâches**. 

1. Choisissez la tâche d’étiquetage qui contient le fichier manifeste que vous souhaitez utiliser.

1. Sur la page de détails, cliquez sur le lien sous **Emplacement de l’ensemble de données de sortie**. La console Amazon S3 s’ouvre à l’emplacement du jeu de données. 

1. Choisissez `Manifests`, `output` puis `output.manifest`.

1. Pour télécharger le fichier manifeste, choisissez **Actions d’objet**, puis **Télécharger**.

## Transformation d'un fichier manifeste d' SageMaker IA à étiquettes multiples
<a name="md-transform-ml-gt"></a>

La procédure suivante crée un fichier manifeste Amazon Rekognition Custom Labels au format multi-étiquettes à partir d'un fichier manifeste AI au format multi-étiquettes existant. SageMaker GroundTruth

**Note**  
Pour exécuter le code, vous avez besoin de la version 3 de Python ou d’une version supérieure.<a name="md-procedure-multi-label-transform"></a>

**Pour transformer un fichier manifeste SageMaker AI à étiquettes multiples**

1. Exécutez le code Python suivant. Indiquez le nom du fichier manifeste que vous avez créé dans [Obtenir le fichier manifeste pour une tâche d' SageMaker AI Ground Truth](#md-get-gt-manifest) en tant qu’argument de ligne de commande.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier:  Apache-2.0
   """
   Purpose
   Shows how to create and Amazon Rekognition Custom Labels format
   manifest file from an Amazon SageMaker Ground Truth Image
   Classification (Multi-label) format manifest file.
   """
   import json
   import logging
   import argparse
   import os.path
   
   logger = logging.getLogger(__name__)
   
   def create_manifest_file(ground_truth_manifest_file):
       """
       Creates an Amazon Rekognition Custom Labels format manifest file from
       an Amazon SageMaker Ground Truth Image Classification (Multi-label) format
       manifest file.
       :param: ground_truth_manifest_file: The name of the Ground Truth manifest file,
       including the relative path.
       :return: The name of the new Custom Labels manifest file.
       """
   
       logger.info('Creating manifest file from %s', ground_truth_manifest_file)
       new_manifest_file = f'custom_labels_{os.path.basename(ground_truth_manifest_file)}'
   
       # Read the SageMaker Ground Truth manifest file into memory.
       with open(ground_truth_manifest_file) as gt_file:
           lines = gt_file.readlines()
   
       #Iterate through the lines one at a time to generate the
       #new lines for the Custom Labels manifest file.
       with open(new_manifest_file, 'w') as the_new_file:
           for line in lines:
               #job_name - The of the Amazon Sagemaker Ground Truth job.
               job_name = ''
               # Load in the old json item from the Ground Truth manifest file
               old_json = json.loads(line)
   
               # Get the job name
               keys = old_json.keys()
               for key in keys:
                   if 'source-ref' not in key and '-metadata' not in key:
                       job_name = key
   
               new_json = {}
               # Set the location of the image
               new_json['source-ref'] = old_json['source-ref']
   
               # Temporarily store the list of labels
               labels = old_json[job_name]
   
               # Iterate through the labels and reformat to Custom Labels format
               for index, label in enumerate(labels):
                   new_json[f'{job_name}{index}'] = index
                   metadata = {}
                   metadata['class-name'] = old_json[f'{job_name}-metadata']['class-map'][str(label)]
                   metadata['confidence'] = old_json[f'{job_name}-metadata']['confidence-map'][str(label)]
                   metadata['type'] = 'groundtruth/image-classification'
                   metadata['job-name'] = old_json[f'{job_name}-metadata']['job-name']
                   metadata['human-annotated'] = old_json[f'{job_name}-metadata']['human-annotated']
                   metadata['creation-date'] = old_json[f'{job_name}-metadata']['creation-date']
                   # Add the metadata to new json line
                   new_json[f'{job_name}{index}-metadata'] = metadata
               # Write the current line to the json file
               the_new_file.write(json.dumps(new_json))
               the_new_file.write('\n')
   
       logger.info('Created %s', new_manifest_file)
       return  new_manifest_file
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "manifest_file", help="The Amazon SageMaker Ground Truth manifest file"
           "that you want to use."
       )
   
   
   def main():
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
       try:
           # get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
           # Create the manifest file
           manifest_file = create_manifest_file(args.manifest_file)
           print(f'Manifest file created: {manifest_file}')
       except FileNotFoundError as err:
           logger.exception('File not found: %s', err)
           print(f'File not found: {err}. Check your manifest file.')
   
   if __name__ == "__main__":
       main()
   ```

1. Notez le nom du nouveau fichier manifeste affiché par le script. Vous l’utiliserez à l’étape suivante.

1. [Chargez les fichiers manifestes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) dans le compartiment Amazon S3 que vous souhaitez utiliser pour stocker ce type de fichier.
**Note**  
Assurez-vous qu’Étiquettes personnalisées Amazon Rekognition a accès au compartiment Amazon S3 référencé dans le champ `source-ref` des lignes JSON du fichier manifeste. Pour plus d’informations, consultez [Accès à des compartiments Amazon S3 externes](su-console-policy.md#su-external-buckets). Si la tâche Ground Truth stocke des images dans le compartiment de la console Étiquettes personnalisées Amazon Rekognition, vous n’avez pas besoin d’ajouter d’autorisations.

1. Suivez les instructions sous [Création d'un ensemble de données à l'aide d'un fichier manifeste SageMaker AI Ground Truth (console)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) pour créer un jeu de données avec le fichier manifeste chargé. Pour l’étape 8, dans **Emplacement du fichier .manifest**, entrez l’URL Amazon S3 correspondant à l’emplacement du fichier manifeste. Si vous utilisez le kit AWS SDK, effectuez les actions indiquées dans [Création d'un ensemble de données à l'aide d'un fichier manifeste (SDK) SageMaker AI Ground Truth](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).

# Création d’un fichier manifeste à partir d’un fichier CSV
<a name="ex-csv-manifest"></a>

Cet exemple de script Python simplifie la création d’un fichier manifeste en utilisant un fichier CSV pour étiqueter les images. C’est vous qui créez le fichier CSV. Le fichier manifeste convient à la [classification d’images à plusieurs étiquettes](getting-started.md#gs-multi-label-image-classification-example) ou [Classification des images à plusieurs étiquettes](getting-started.md#gs-multi-label-image-classification-example). Pour plus d’informations, consultez [Recherche d’objets, de scènes et de concepts](understanding-custom-labels.md#tm-classification). 

**Note**  
Ce script ne crée pas de fichier manifeste adapté à la [recherche des emplacements d’objets](understanding-custom-labels.md#tm-object-localization) ni à la [recherche des marques](understanding-custom-labels.md#tm-brand-detection-localization).

Un fichier manifeste décrit les images utilisées pour entraîner un modèle (par exemple, les emplacements des images et les étiquettes attribuées aux images). Un fichier manifeste est composé d’une ou plusieurs lignes JSON. Chaque ligne JSON décrit une seule image. Pour plus d’informations, consultez [Importation d'étiquettes au niveau de l'image dans des fichiers manifestes](md-create-manifest-file-classification.md).

Un fichier CSV représente des données tabulaires réparties sur plusieurs lignes d’un fichier texte. Les champs sur une ligne sont séparés par une virgule. Pour plus d’informations, consultez la section [Valeurs séparées par des virgules](https://en.wikipedia.org/wiki/Comma-separated_values). Pour ce script, chaque ligne du fichier CSV représente une image unique et correspond à une ligne JSON dans le fichier manifeste. Pour créer un fichier CSV pour un fichier manifeste prenant en charge la [classification d’images à plusieurs étiquettes](getting-started.md#gs-multi-label-image-classification-example), vous devez ajouter une ou plusieurs étiquettes au niveau de l’image à chaque ligne. Pour créer un fichier manifeste adapté à la [Classification d’images](getting-started.md#gs-image-classification-example), vous devez ajouter une seule étiquette au niveau de l’image à chaque ligne.

Par exemple, le fichier CSV suivant décrit les images du projet de *mise en route* [Classification des images à plusieurs étiquettes](getting-started.md#gs-multi-label-image-classification-example) (Flowers). 

```
camellia1.jpg,camellia,with_leaves
camellia2.jpg,camellia,with_leaves
camellia3.jpg,camellia,without_leaves
helleborus1.jpg,helleborus,without_leaves,not_fully_grown
helleborus2.jpg,helleborus,with_leaves,fully_grown
helleborus3.jpg,helleborus,with_leaves,fully_grown
jonquil1.jpg,jonquil,with_leaves
jonquil2.jpg,jonquil,with_leaves
jonquil3.jpg,jonquil,with_leaves
jonquil4.jpg,jonquil,without_leaves
mauve_honey_myrtle1.jpg,mauve_honey_myrtle,without_leaves
mauve_honey_myrtle2.jpg,mauve_honey_myrtle,with_leaves
mauve_honey_myrtle3.jpg,mauve_honey_myrtle,with_leaves
mediterranean_spurge1.jpg,mediterranean_spurge,with_leaves
mediterranean_spurge2.jpg,mediterranean_spurge,without_leaves
```

Le script génère des lignes JSON pour chaque ligne. Par exemple, voici la ligne JSON pour la première ligne (`camellia1.jpg,camellia,with_leaves`).

```
{"source-ref": "s3://bucket/flowers/train/camellia1.jpg","camellia": 1,"camellia-metadata":{"confidence": 1,"job-name": "labeling-job/camellia","class-name": "camellia","human-annotated": "yes","creation-date": "2022-01-21T14:21:05","type": "groundtruth/image-classification"},"with_leaves": 1,"with_leaves-metadata":{"confidence": 1,"job-name": "labeling-job/with_leaves","class-name": "with_leaves","human-annotated": "yes","creation-date": "2022-01-21T14:21:05","type": "groundtruth/image-classification"}}
```

Dans l’exemple de fichier CSV, le chemin Amazon S3 vers l’image n’est pas présent. Si le fichier CSV n’inclut pas le chemin Amazon S3 des images, utilisez l’argument de ligne de commande `--s3_path` pour spécifier cette information pour l’image. 

Le script enregistre la première entrée pour chaque image dans un fichier image CSV dédupliqué. Le fichier image CSV dédupliqué contient une seule instance de chaque image trouvée dans le fichier CSV d’entrée. Les autres occurrences d’une image dans le fichier CSV d’entrée sont enregistrées dans un fichier image CSV dupliqué. Si le script détecte des images dupliquées, examinez le fichier image CSV dupliqué et mettez à jour le fichier image CSV dédupliqué si nécessaire. Réexécutez le script avec le fichier dédupliqué. Si aucun doublon n'est détecté dans le fichier CSV d'entrée, le script supprime le fichier image CSV dédupliqué et l'image dupliquée CSVfile, car ils sont vides. 

 Dans cette procédure, c’est vous qui créez le fichier CSV et qui exécutez le script Python pour créer le fichier manifeste. 

**Pour créer un fichier manifeste à partir d’un fichier CSV**

1. Créez un fichier CSV avec les champs suivants dans chaque ligne (une ligne par image). N’ajoutez pas de ligne d’en-tête au fichier CSV.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/rekognition/latest/customlabels-dg/ex-csv-manifest.html)

   Par exemple : `camellia1.jpg,camellia,with_leaves` ou `s3://my-bucket/flowers/train/camellia1.jpg,camellia,with_leaves` 

1. Enregistrez le fichier CSV.

1. Exécutez le script Python suivant. Fournissez les arguments suivants :
   + `csv_file` : fichier CSV que vous avez créé à l’étape 1. 
   + `manifest_file` : nom du fichier manifeste que vous souhaitez créer.
   + (Facultatif) `--s3_path s3://path_to_folder/` : chemin Amazon S3 à ajouter aux noms de fichiers image (champ 1). Utilisez `--s3_path` si les images du champ 1 ne contiennent pas déjà de chemin S3.

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier:  Apache-2.0
   
   from datetime import datetime, timezone
   import argparse
   import logging
   import csv
   import os
   import json
   
   """
   Purpose
   Amazon Rekognition Custom Labels model example used in the service documentation.
   Shows how to create an image-level (classification) manifest file from a CSV file.
   You can specify multiple image level labels per image.
   CSV file format is
   image,label,label,..
   If necessary, use the bucket argument to specify the S3 bucket folder for the images.
   https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/md-gt-cl-transform.html
   """
   
   logger = logging.getLogger(__name__)
   
   
   def check_duplicates(csv_file, deduplicated_file, duplicates_file):
       """
       Checks for duplicate images in a CSV file. If duplicate images
       are found, deduplicated_file is the deduplicated CSV file - only the first
       occurence of a duplicate is recorded. Other duplicates are recorded in duplicates_file.
       :param csv_file: The source CSV file.
       :param deduplicated_file: The deduplicated CSV file to create. If no duplicates are found
       this file is removed.
       :param duplicates_file: The duplicate images CSV file to create. If no duplicates are found
       this file is removed.
       :return: True if duplicates are found, otherwise false.
       """
   
       logger.info("Deduplicating %s", csv_file)
   
       duplicates_found = False
   
       # Find duplicates.
       with open(csv_file, 'r', newline='', encoding="UTF-8") as f,\
               open(deduplicated_file, 'w', encoding="UTF-8") as dedup,\
               open(duplicates_file, 'w', encoding="UTF-8") as duplicates:
   
           reader = csv.reader(f, delimiter=',')
           dedup_writer = csv.writer(dedup)
           duplicates_writer = csv.writer(duplicates)
   
           entries = set()
           for row in reader:
               # Skip empty lines.
               if not ''.join(row).strip():
                   continue
   
               key = row[0]
               if key not in entries:
                   dedup_writer.writerow(row)
                   entries.add(key)
               else:
                   duplicates_writer.writerow(row)
                   duplicates_found = True
   
       if duplicates_found:
           logger.info("Duplicates found check %s", duplicates_file)
   
       else:
           os.remove(duplicates_file)
           os.remove(deduplicated_file)
   
       return duplicates_found
   
   
   def create_manifest_file(csv_file, manifest_file, s3_path):
       """
       Reads a CSV file and creates a Custom Labels classification manifest file.
       :param csv_file: The source CSV file.
       :param manifest_file: The name of the manifest file to create.
       :param s3_path: The S3 path to the folder that contains the images.
       """
       logger.info("Processing CSV file %s", csv_file)
   
       image_count = 0
       label_count = 0
   
       with open(csv_file, newline='', encoding="UTF-8") as csvfile,\
               open(manifest_file, "w", encoding="UTF-8") as output_file:
   
           image_classifications = csv.reader(
               csvfile, delimiter=',', quotechar='|')
   
           # Process each row (image) in CSV file.
           for row in image_classifications:
               source_ref = str(s3_path)+row[0]
   
               image_count += 1
   
               # Create JSON for image source ref.
               json_line = {}
               json_line['source-ref'] = source_ref
   
               # Process each image level label.
               for index in range(1, len(row)):
                   image_level_label = row[index]
   
                   # Skip empty columns.
                   if image_level_label == '':
                       continue
                   label_count += 1
   
                  # Create the JSON line metadata.
                   json_line[image_level_label] = 1
                   metadata = {}
                   metadata['confidence'] = 1
                   metadata['job-name'] = 'labeling-job/' + image_level_label
                   metadata['class-name'] = image_level_label
                   metadata['human-annotated'] = "yes"
                   metadata['creation-date'] = \
                       datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')
                   metadata['type'] = "groundtruth/image-classification"
   
                   json_line[f'{image_level_label}-metadata'] = metadata
   
                   # Write the image JSON Line.
               output_file.write(json.dumps(json_line))
               output_file.write('\n')
   
       output_file.close()
       logger.info("Finished creating manifest file %s\nImages: %s\nLabels: %s",
                   manifest_file, image_count, label_count)
   
       return image_count, label_count
   
   
   def add_arguments(parser):
       """
       Adds command line arguments to the parser.
       :param parser: The command line parser.
       """
   
       parser.add_argument(
           "csv_file", help="The CSV file that you want to process."
       )
   
       parser.add_argument(
           "--s3_path", help="The S3 bucket and folder path for the images."
           " If not supplied, column 1 is assumed to include the S3 path.", required=False
       )
   
   
   def main():
   
       logging.basicConfig(level=logging.INFO,
                           format="%(levelname)s: %(message)s")
   
       try:
   
           # Get command line arguments
           parser = argparse.ArgumentParser(usage=argparse.SUPPRESS)
           add_arguments(parser)
           args = parser.parse_args()
   
           s3_path = args.s3_path
           if s3_path is None:
               s3_path = ''
   
           # Create file names.
           csv_file = args.csv_file
           file_name = os.path.splitext(csv_file)[0]
           manifest_file = f'{file_name}.manifest'
           duplicates_file = f'{file_name}-duplicates.csv'
           deduplicated_file = f'{file_name}-deduplicated.csv'
   
           # Create manifest file, if there are no duplicate images.
           if check_duplicates(csv_file, deduplicated_file, duplicates_file):
               print(f"Duplicates found. Use {duplicates_file} to view duplicates "
                     f"and then update {deduplicated_file}. ")
               print(f"{deduplicated_file} contains the first occurence of a duplicate. "
                     "Update as necessary with the correct label information.")
               print(f"Re-run the script with {deduplicated_file}")
           else:
               print("No duplicates found. Creating manifest file.")
   
               image_count, label_count = create_manifest_file(csv_file,
                                                               manifest_file,
                                                               s3_path)
   
               print(f"Finished creating manifest file: {manifest_file} \n"
                     f"Images: {image_count}\nLabels: {label_count}")
   
       except FileNotFoundError as err:
           logger.exception("File not found: %s", err)
           print(f"File not found: {err}. Check your input CSV file.")
   
   
   if __name__ == "__main__":
       main()
   ```

1. Si vous prévoyez d’utiliser un jeu de données de test, répétez les étapes 1 à 3 afin de créer un fichier manifeste pour le jeu de données de test.

1. Si nécessaire, copiez les images dans le chemin du compartiment Amazon S3 que vous avez spécifié dans la colonne 1 du fichier CSV (ou dans la ligne de commande `--s3_path`). Vous pouvez utiliser la commande S3 AWS suivante :

   ```
   aws s3 cp --recursive your-local-folder s3://your-target-S3-location
   ```

1. [Chargez les fichiers manifestes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) dans le compartiment Amazon S3 que vous souhaitez utiliser pour stocker ce type de fichier.
**Note**  
Assurez-vous qu’Étiquettes personnalisées Amazon Rekognition a accès au compartiment Amazon S3 référencé dans le champ `source-ref` des lignes JSON du fichier manifeste. Pour plus d’informations, consultez [Accès à des compartiments Amazon S3 externes](su-console-policy.md#su-external-buckets). Si la tâche Ground Truth stocke des images dans le compartiment de la console Étiquettes personnalisées Amazon Rekognition, vous n’avez pas besoin d’ajouter d’autorisations.

1. Suivez les instructions sous [Création d'un ensemble de données à l'aide d'un fichier manifeste SageMaker AI Ground Truth (console)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) pour créer un jeu de données avec le fichier manifeste chargé. Pour l’étape 8, dans **Emplacement du fichier .manifest**, entrez l’URL Amazon S3 correspondant à l’emplacement du fichier manifeste. Si vous utilisez le kit AWS SDK, effectuez les actions indiquées dans [Création d'un ensemble de données à l'aide d'un fichier manifeste (SDK) SageMaker AI Ground Truth](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).