

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Como transformar um conjunto de dados COCO
<a name="md-coco-transform-example"></a>

Use o exemplo em Python a seguir para transformar informações de caixa delimitadora de um conjunto de dados no formato COCO em um arquivo de manifesto no Amazon Rekognition Custom Labels. O código faz upload do arquivo de manifesto criado para o bucket do Amazon S3. O código também fornece um comando da AWS CLI que é possível usar para fazer upload de suas imagens. 

**Para transformar um conjunto de dados COCO (SDK)**

1. Se ainda não tiver feito isso:

   1. Certifique-se de que você tem as permissões `AmazonS3FullAccess`. Para obter mais informações, consulte [Configurar permissões do SDK](su-sdk-permissions.md).

   1. Instale e configure o AWS CLI e AWS SDKs o. Para obter mais informações, consulte [Etapa 4: configurar o AWS CLI and AWS SDKs](su-awscli-sdk.md).

1. Use o código em Python a seguir para transformar um conjunto de dados COCO. Defina os seguintes valores:
   + `s3_bucket`: o nome do bucket do S3 no qual você deseja armazenar as imagens e o arquivo de manifesto do Amazon Rekognition Custom Labels. 
   + `s3_key_path_images`: o caminho para onde você deseja colocar as imagens no bucket do S3 (`s3_bucket`).
   + `s3_key_path_manifest_file`: o caminho para onde você deseja colocar o arquivo de manifesto de rótulos personalizados no bucket do S3 (`s3_bucket`).
   + `local_path`: o caminho local para onde o exemplo abre o conjunto de dados COCO de entrada e também salva o novo arquivo de manifesto do Custom Labels.
   + `local_images_path`: o caminho local para as imagens que você deseja usar para treinamento.
   + `coco_manifest`: o nome do arquivo do conjunto de dados COCO de entrada.
   + `cl_manifest_file`: um nome para o arquivo de manifesto criado pelo exemplo. O arquivo é salvo no local especificado por `local_path`. Por convenção, o arquivo tem a extensão `.manifest`, mas isso não é obrigatório.
   + `job_name`: um nome para o trabalho de rótulos personalizados.

   ```
   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. Execute o código.

1. Na saída do programa, observe o comando `s3 sync`. Você precisa dele na próxima etapa.

1. No prompt de comando, execute o comando `s3 sync`. Suas imagens são carregadas para o bucket do S3. Se o comando falhar durante o upload, execute-o novamente até que suas imagens locais estejam sincronizadas com o bucket do S3.

1. Na saída do programa, observe o caminho do URL do S3 para o arquivo de manifesto. Você precisa dele na próxima etapa.

1. Siga a instrução em [Criação de um conjunto de dados com um arquivo de manifesto do SageMaker AI Ground Truth (console)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) para criar um conjunto de dados com o arquivo de manifesto carregado. Para a etapa 8, na **localização do arquivo .manifest**, insira a URL do Amazon S3 que você observou na etapa anterior. Se estiver usando o AWS SDK, use [Criação de um conjunto de dados com um arquivo de manifesto (SDK) do SageMaker AI Ground Truth](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).