Transformação de um conjunto de dados COCO - Rekognition

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á.

Transformação de um conjunto de dados COCO

Use o exemplo em Python a seguir para transformar as informações da caixa delimitadora de um conjunto de dados de COCO formato em um arquivo de manifesto 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 AWS CLI comando que você pode usar para carregar suas imagens.

Para transformar um COCO conjunto de dados () 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.

    2. Instale e configure o AWS CLI e AWS SDKs o. Para obter mais informações, consulte Etapa 4: configurar os AWS SDKs AWS CLI e.

  2. Use o código Python a seguir para transformar um COCO conjunto de dados. 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 COCO conjunto de dados de entrada e também salva o novo arquivo de manifesto de rótulos personalizados.

    • local_images_path: o caminho local para as imagens que você deseja usar para treinamento.

    • coco_manifest— O nome do arquivo do COCO conjunto de dados 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')
  3. Execute o código.

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

  5. 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.

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

  7. Siga a instrução em Criação de um conjunto de dados com um arquivo de manifesto SageMaker do 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 o Amazon URL S3 que você anotou na etapa anterior. Se você estiver usando o AWS SDK, façaCriação de um conjunto de dados com um arquivo de manifesto SageMaker do Ground Truth () SDK.