Usando um arquivo de manifesto para importar imagens - 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á.

Usando um arquivo de manifesto para importar imagens

Você pode criar um conjunto de dados usando um arquivo de manifesto no formato Amazon SageMaker Ground Truth. Você pode usar o arquivo de manifesto de um trabalho do Amazon SageMaker Ground Truth. Se suas imagens e rótulos não estiverem no formato de um arquivo de manifesto do SageMaker Ground Truth, você poderá criar um arquivo de manifesto em SageMaker formato e usá-lo para importar suas imagens rotuladas.

A CreateDataset operação é atualizada para permitir que você opcionalmente especifique tags ao criar um novo conjunto de dados. As tags são pares de valores-chave que você pode usar para categorizar e gerenciar seus recursos.

Criação de um conjunto de dados com um arquivo de manifesto SageMaker do Ground Truth (Console)

O procedimento a seguir mostra como criar um conjunto de dados usando um arquivo de manifesto no formato SageMaker Ground Truth.

  1. Crie um arquivo de manifesto para o conjunto de dados de treinamento seguindo um destes procedimentos:

    Se quiser criar um conjunto de dados de teste, repita a etapa 1 para criar o conjunto de dados de teste.

  2. Abra o console do Amazon Rekognition em. https://console.aws.amazon.com/rekognition/

  3. Escolha Usar rótulos personalizados.

  4. Escolha Comece a usar.

  5. No painel de navegação esquerdo, selecione Projetos.

  6. Na página Projetos, selecione o projeto ao qual você deseja adicionar um conjunto de dados. A página de detalhes do seu projeto é exibida.

  7. Escolha Criar conjunto de dados. A página Criar conjunto de dados é exibida.

  8. Em Configuração inicial, escolha Iniciar com um único conjunto de dados ou Iniciar com um conjunto de dados de treinamento. Para criar um modelo de maior qualidade, recomendamos começar com conjuntos de dados de treinamento e teste separados.

    Single dataset
    1. Na seção Detalhes do conjunto de dados de treinamento, escolha Importar imagens rotuladas por SageMaker Ground Truth.

    2. No local do arquivo de manifesto, insira o local do arquivo de manifesto criado na etapa 1.

    3. Escolha Criar conjunto de dados. A página de conjuntos de dados do seu projeto é aberta.

    Separate training and test datasets
    1. Na seção Detalhes do conjunto de dados de treinamento, escolha Importar imagens rotuladas por SageMaker Ground Truth.

    2. No local do arquivo de manifesto, insira o local do arquivo de manifesto do conjunto de dados de treinamento criado na etapa 1.

    3. Na seção Detalhes do conjunto de dados de teste, escolha Importar imagens rotuladas por SageMaker Ground Truth.

      nota

      Seus conjuntos de dados de treinamento e teste podem ter fontes de imagem diferentes.

    4. No local do arquivo de manifesto, insira o local do arquivo de manifesto do conjunto de dados de teste criado na etapa 1.

    5. Escolha Criar conjuntos de dados. A página de conjuntos de dados do seu projeto é aberta.

  9. Se precisar adicionar ou alterar rótulos, faça Rotulagem de imagens.

  10. Siga as etapas em Como treinar um modelo (console) para treinar seu modelo.

Criação de um conjunto de dados com um arquivo de manifesto SageMaker do Ground Truth () SDK

O procedimento a seguir mostra como criar conjuntos de dados de treinamento ou teste a partir de um arquivo de manifesto usando o. CreateDatasetAPI

Você pode usar um arquivo de manifesto existente, como a saída de um trabalho do SageMaker Ground Truth, ou criar seu próprio arquivo de manifesto.

  1. Se você ainda não tiver feito isso, 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. Crie um arquivo de manifesto para o conjunto de dados de treinamento seguindo um destes procedimentos:

    Se quiser criar um conjunto de dados de teste, repita a etapa 2 para criar o conjunto de dados de teste.

  3. Use o código de exemplo a seguir para criar o conjunto de dados de treinamento e teste.

    AWS CLI

    Use o código a seguir para criar um conjunto de dados. Substitua o seguinte:

    • project_arn— o ARN do projeto ao qual você deseja adicionar o conjunto de dados de teste.

    • type— o tipo de conjunto de dados que você deseja criar (TRAINouTEST)

    • bucket: o bucket que contém o arquivo de manifesto do conjunto de dados.

    • manifest_file: o caminho e o nome do arquivo de manifesto.

    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

    Use os valores a seguir para criar um conjunto de dados. Forneça os seguintes parâmetros de linha de comando:

    • project_arn— o ARN do projeto ao qual você deseja adicionar o conjunto de dados de teste.

    • dataset_type: o tipo de conjunto de dados que você deseja criar (train ou test).

    • bucket: o bucket que contém o arquivo de manifesto do conjunto de dados.

    • manifest_file: o caminho e o nome do arquivo de manifesto.

    #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

    Use os valores a seguir para criar um conjunto de dados. Forneça os seguintes parâmetros de linha de comando:

    • project_arn— o ARN do projeto ao qual você deseja adicionar o conjunto de dados de teste.

    • dataset_type: o tipo de conjunto de dados que você deseja criar (train ou test).

    • bucket: o bucket que contém o arquivo de manifesto do conjunto de dados.

    • manifest_file: o caminho e o nome do arquivo de manifesto.

    /* 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); } } }
  4. Se precisar adicionar ou alterar rótulos, consulte Gerenciando rótulos (SDK).

  5. Siga as etapas em Treinando um modelo (SDK) para treinar seu modelo.

Criar solicitação de conjunto de dados

Veja a seguir o formato da solicitação de CreateDataset operação:

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