

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Transformación de un conjunto de datos COCO
<a name="md-coco-transform-example"></a>

Use el siguiente ejemplo de Python para transformar la información de un cuadro delimitador de un conjunto de datos con formato COCO en un archivo de manifiesto de Etiquetas personalizadas de Amazon Rekognition. El código carga el archivo de manifiesto creado en el bucket de Amazon S3. El código también incluye un comando de AWS CLI que puede utilizar para cargar las imágenes. 

**Cómo transformar un conjunto de datos COCO (SDK)**

1. Si aún no lo ha hecho:

   1. Asegúrese de que tiene los permisos de `AmazonS3FullAccess`. Para obtener más información, consulte [Configuración de permisos de SDK](su-sdk-permissions.md).

   1. Instale y configure el AWS CLI y el AWS SDKs. Para obtener más información, consulte [Paso 4: Configure el AWS CLI and AWS SDK](su-awscli-sdk.md).

1. Usa el siguiente código de Python para transformar un conjunto de datos COCO. Defina los siguientes valores.
   + `s3_bucket`: el nombre del bucket de S3 en el que desea almacenar las imágenes y el archivo de manifiesto de Etiquetas personalizadas de Amazon Rekognition. 
   + `s3_key_path_images`: la ruta en la que desea colocar las imágenes dentro del bucket de S3 (`s3_bucket`).
   + `s3_key_path_manifest_file`: la ruta en la que desea colocar el archivo de manifiesto de Etiquetas personalizadas dentro del bucket de S3 (`s3_bucket`).
   + `local_path`: la ruta local donde el ejemplo abre el conjunto de datos COCO de entrada y también guarda el nuevo archivo de manifiesto de Etiquetas personalizadas.
   + `local_images_path`: la ruta local de las imágenes que quiera usar para el entrenamiento.
   + `coco_manifest`: el nombre de archivo del conjunto de datos COCO de entrada.
   + `cl_manifest_file`: el nombre del archivo de manifiesto creado en el ejemplo. El archivo se guarda en la ubicación indicada por `local_path`. Por convención, el archivo tiene la extensión `.manifest`, pero no es obligatoria.
   + `job_name`: el nombre para el trabajo de Etiquetas personalizadas.

   ```
   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. Ejecute el código.

1. En el resultado del programa, anote el comando `s3 sync`. Lo necesitará en el siguiente paso.

1. En el símbolo del sistema, ejecute el comando `s3 sync`. Las imágenes se cargan en el bucket de S3. Si el comando falla durante la carga, ejecútelo de nuevo hasta que las imágenes locales se sincronicen con el bucket de S3.

1. En el resultado del programa, anote la ruta URL de S3 correspondiente al archivo de manifiesto. Lo necesitará en el siguiente paso.

1. Siga las instrucciones que aparecen en [Creación de un conjunto de datos con un archivo de manifiesto de SageMaker AI Ground Truth (consola)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console) para crear un conjunto de datos con el archivo de manifiesto cargado. En el paso 8, en la **ubicación del archivo de manifiesto**, introduzca la URL de Amazon S3 que haya anotado en el paso anterior. Si utiliza el AWS SDK, consulte [Creación de un conjunto de datos con un archivo de manifiesto (SDK) de SageMaker AI Ground Truth](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk).