

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Transformieren eines COCO-Datensatzes
<a name="md-coco-transform-example"></a>

Verwenden Sie das folgende Python-Beispiel, um Begrenzungsrahmen-Informationen aus einem Datensatz im COCO-Format in eine Amazon Rekognition Custom Labels-Manifestdatei umzuwandeln. Der Code lädt die erstellte Manifestdatei in Ihren Amazon-S3-Bucket hoch. Der Code stellt auch einen AWS CLI-Befehl bereit, mit dem Sie Ihre Bilder hochladen können. 

**So transformieren Sie einen COCO-Datensatz (SDK)**

1. Wenn Sie dies noch nicht getan haben:

   1. Stellen Sie sicher, dass Sie die folgenden `AmazonS3FullAccess`-Berechtigungen haben. Weitere Informationen finden Sie unter [Einrichten von SDK-Berechtigungen](su-sdk-permissions.md).

   1. Installieren und konfigurieren Sie das AWS CLI und das AWS SDKs. Weitere Informationen finden Sie unter [Schritt 4: Richten Sie das und ein AWS CLI AWS SDKs](su-awscli-sdk.md).

1. Verwenden Sie den folgenden Python-Code, um einen COCO-Datensatz zu transformieren. Legen Sie die folgenden Werte fest.
   + `s3_bucket` – Der Name des S3-Buckets, in dem Sie die Bilder und die Amazon Rekognition Custom Labels-Manifestdatei speichern möchten. 
   + `s3_key_path_images` – Der Pfad zu dem Ort, an dem Sie die Bilder innerhalb des S3-Buckets platzieren möchten (`s3_bucket`).
   + `s3_key_path_manifest_file` – Der Pfad zu der Stelle, an der Sie die Manifestdatei für benutzerdefinierte Labels im S3-Bucket platzieren möchten (`s3_bucket`).
   + `local_path` – Der lokale Pfad, in dem das Beispiel den COCO-Eingabedatensatz öffnet und auch die neue Custom Labels-Manifestdatei speichert.
   + `local_images_path` – Der lokale Pfad zu den Bildern, die Sie für das Training verwenden möchten.
   + `coco_manifest` – Der Dateiname des COCO-Eingabedatensatzes.
   + `cl_manifest_file` – Ein Name für die Manifestdatei, die durch das Beispiel erstellt wurde. Die Datei wird an dem von `local_path` angegebenen Speicherort gespeichert. Konventionell hat die Datei die Erweiterung `.manifest`, dies ist jedoch nicht erforderlich.
   + `job_name` – Ein Name für den Custom Labels-Job.

   ```
   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. Führen Sie den Code aus.

1. Notieren Sie den `s3 sync`-Befehl in der Programmausgabe. Sie benötigen ihn im nächsten Schritt.

1. Führen Sie über die Eingabeaufforderung den folgenden `s3 sync`-Befehl aus. Ihre Bilder werden zu dem S3-Bucket hochgeladen. Wenn der Befehl beim Hochladen fehlschlägt, führen Sie ihn erneut aus, bis Ihre lokalen Bilder mit dem S3-Bucket synchronisiert sind.

1. Notieren Sie sich in der Programmausgabe den S3-URL-Pfad zur Manifestdatei. Sie benötigen ihn im nächsten Schritt.

1. Folgen Sie den Anweisungen unter [Erstellen eines Datensatzes mit einer SageMaker AI Ground Truth Manifestdatei (Konsole)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-console), um einen Datensatz mit der hochgeladenen Manifestdatei zu erstellen. Geben Sie für Schritt 8 im **Manifestdatei-Speicherort** die Amazon S3-URL ein, die Sie sich im vorherigen Schritt notiert haben. Wenn Sie AWS -SDK verwenden, führen Sie [Erstellen eines Datensatzes mit einer SageMaker AI Ground Truth Manifestdatei (SDK)](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk) durch.