

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 프로젝트에 데이터 세트 추가
<a name="md-add-dataset"></a>

훈련 데이터 세트 또는 테스트 데이터 세트를 기존 프로젝트에 추가할 수 있습니다. 기존 데이터 세트를 바꾸려면 먼저 기존 데이터 세트를 삭제하세요. 자세한 내용은 [데이터 세트 삭제](md-delete-dataset.md) 단원을 참조하십시오. 그런 다음 새 데이터 세트를 추가합니다.

**Topics**
+ [프로젝트에 데이터 세트 추가(콘솔)](#md-add-dataset-console)
+ [프로젝트에 데이터 세트 추가(SDK)](#md-add-dataset-sdk)

## 프로젝트에 데이터 세트 추가(콘솔)
<a name="md-add-dataset-console"></a>

Amazon Rekognition Custom Labels 콘솔을 사용하여 훈련 또는 테스트 데이터 세트를 프로젝트에 추가할 수 있습니다.

**프로젝트에 데이터 세트를 추가하려면**

1. [https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)에서 Amazon Rekognition 콘솔을 엽니다.

1. 왼쪽 창에서 **사용자 지정 레이블** 사용을 선택합니다. Amazon Rekognition Custom Labels 랜딩 페이지가 표시됩니다.

1. 왼쪽 탐색 창에서 **프로젝트**를 선택합니다. 프로젝트 보기가 표시됩니다.

1. 데이터 세트를 추가할 프로젝트를 선택합니다.

1. 왼쪽 탐색 창의 프로젝트 이름 아래에서 **데이터 세트**를 선택합니다.

1. 프로젝트에 기존 데이터 세트가 없는 경우 **데이터 세트 생성** 페이지가 표시됩니다. 해결 방법:

   1. **데이터 세트 생성** 페이지에서 이미지 소스 정보를 입력합니다. 자세한 내용은 [이미지를 사용하여 훈련 및 테스트 데이터 세트 생성](md-create-dataset.md) 단원을 참조하십시오.

   1. **데이터 세트 생성**을 선택하여 데이터 세트를 생성합니다.

1. 프로젝트에 기존 데이터 세트(훈련 또는 테스트)가 있는 경우 프로젝트 세부 정보 페이지가 표시됩니다. 해결 방법: 

   1. 프로젝트 세부 정보 페이지에서 **작업**을 선택합니다.

   1. 훈련 데이터 세트를 추가하려면 **훈련 데이터 세트 생성**을 선택합니다.

   1. 테스트 데이터 세트를 추가하려면 **테스트 데이터 세트 생성**을 선택합니다.

   1. **데이터 세트 생성** 페이지에서 이미지 소스 정보를 입력합니다. 자세한 내용은 [이미지를 사용하여 훈련 및 테스트 데이터 세트 생성](md-create-dataset.md) 단원을 참조하십시오.

   1. **데이터 세트 생성**을 선택하여 데이터 세트를 생성합니다.

1. 데이터 세트에 이미지를 추가합니다. 자세한 내용은 [더 많은 이미지 추가(콘솔)](md-add-images.md#md-add-images-console) 단원을 참조하십시오.

1. 데이터 세트에 레이블을 추가합니다. 자세한 내용은 [새 레이블 추가(콘솔)](md-labels.md#md-add-new-labels) 단원을 참조하십시오.

1. 이미지에 레이블을 추가합니다. 이미지 수준 레이블을 추가하는 경우 [이미지에 이미지 수준 레이블 지정](md-assign-image-level-labels.md) 항목을 참조하세요. 경계 상자를 추가하는 경우 [경계 상자로 객체에 레이블 지정](md-localize-objects.md) 항목을 참조하세요. 자세한 내용은 [데이터 세트 목적 설정](md-dataset-purpose.md) 단원을 참조하십시오.

## 프로젝트에 데이터 세트 추가(SDK)
<a name="md-add-dataset-sdk"></a>

다음과 같은 방법으로 기존 프로젝트에 훈련 데이터 또는 테스트 데이터 세트를 추가할 수 있습니다.
+ 매니페스트 파일을 사용하여 데이터 세트를 생성합니다. 자세한 내용은 [SageMaker AI Ground Truth 매니페스트 파일(SDK)을 사용하여 데이터 세트 생성](md-create-dataset-ground-truth.md#md-create-dataset-ground-truth-sdk) 단원을 참조하십시오.
+ 빈 데이터 세트를 만든 다음 데이터 세트를 채웁니다. 다음 예제는 빈 데이터 세트를 생성하는 방법을 보여줍니다. 빈 데이터 세트를 만든 후 항목을 추가하려면 [데이터 세트에 더 많은 이미지 추가](md-add-images.md) 항목을 참조하세요.

**Topics**

**프로젝트(SDK)에 데이터 세트를 추가하려면**

1. 아직 설치하지 않은 경우 및 AWS SDKs AWS CLI 를 설치하고 구성합니다. 자세한 내용은 [4단계: AWS CLI 및 AWS SDKs 설정](su-awscli-sdk.md) 단원을 참조하십시오.

1. 다음 예제를 사용하여 데이터 세트에 JSON 라인을 추가하세요.

------
#### [ CLI ]

   `project_arn`을 데이터 세트를 추가하려는 프로젝트로 바꿉니다. `dataset_type`을 `TRAIN`으로 바꾸어 훈련 데이터 세트를 생성하거나 `TEST`로 바꾸어 테스트 데이터 세트를 생성하세요.

   ```
   aws rekognition create-dataset --project-arn project_arn \
     --dataset-type dataset_type \
     --profile custom-labels-access
   ```

------
#### [ Python ]

   다음 코드를 사용하여 데이터 세트를 생성하세요. 다음 명령줄 옵션을 제공하세요.
   + `project_arn`: 테스트 데이터 세트를 추가하려는 프로젝트의 ARN입니다.
   + `type`: 생성하려는 데이터 세트의 유형(훈련 또는 테스트)

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   import argparse
   import logging
   import time
   import boto3
   
   from botocore.exceptions import ClientError
   
   logger = logging.getLogger(__name__)
   
   def create_empty_dataset(rek_client, project_arn, dataset_type):
       """
       Creates an empty 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).
       """
   
       try:
           #Create the dataset.
           logger.info("Creating empty %s dataset for project %s",
               dataset_type, project_arn)
   
           dataset_type=dataset_type.upper()
   
           response = rek_client.create_dataset(
               ProjectArn=project_arn, DatasetType=dataset_type
           )
   
           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 empty dataset."
       )
   
       parser.add_argument(
           "dataset_type", help="The type of the empty dataset that you want to create (train or test)."
       )
   
   
   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 empty {args.dataset_type} dataset for project {args.project_arn}")
   
           # Create the empty dataset.
           session = boto3.Session(profile_name='custom-labels-access')
           rekognition_client = session.client("rekognition")
   
           dataset_arn=create_empty_dataset(rekognition_client, 
               args.project_arn,
               args.dataset_type.lower())
   
           print(f"Finished creating empty dataset: {dataset_arn}")
   
   
       except ClientError as err:
           logger.exception("Problem creating empty dataset: %s", err)
           print(f"Problem creating empty dataset: {err}")
       except Exception as err:
           logger.exception("Problem creating empty dataset: %s", err)
           print(f"Problem creating empty dataset: {err}")
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   다음 코드를 사용하여 데이터 세트를 생성하세요. 다음 명령줄 옵션을 제공하세요.
   + `project_arn`: 테스트 데이터 세트를 추가하려는 프로젝트의 ARN입니다.
   + `type`: 생성하려는 데이터 세트의 유형(훈련 또는 테스트)

   ```
   /*
      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.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.RekognitionException;
   
   import java.net.URI;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class CreateEmptyDataset {
   
       public static final Logger logger = Logger.getLogger(CreateEmptyDataset.class.getName());
   
       public static String createMyEmptyDataset(RekognitionClient rekClient, String projectArn, String datasetType)
               throws Exception, RekognitionException {
   
           try {
   
               logger.log(Level.INFO, "Creating empty {0} dataset for project : {1}",
                       new Object[] { datasetType.toString(), projectArn });
   
               DatasetType requestDatasetType = null;
   
               switch (datasetType) {
               case "train":
                   requestDatasetType = DatasetType.TRAIN;
                   break;
               case "test":
                   requestDatasetType = DatasetType.TEST;
                   break;
               default:
                   logger.log(Level.SEVERE, "Unrecognized dataset type: {0}", datasetType);
                   throw new Exception("Unrecognized dataset type: " + datasetType);
   
               }
   
               CreateDatasetRequest createDatasetRequest = CreateDatasetRequest.builder().projectArn(projectArn)
                       .datasetType(requestDatasetType).build();
   
               CreateDatasetResponse response = rekClient.createDataset(createDatasetRequest);
   
               boolean created = false;
               
               //Wait until updates finishes
   
               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 datasetArn = null;
           String projectArn = null;
   
   
           final String USAGE = "\n" + "Usage: " + "<project_arn> <dataset_type>\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 empty dataset that you want to create (train or test).\n\n";
                 
   
           if (args.length != 2) {
               System.out.println(USAGE);
               System.exit(1);
           }
   
           projectArn = args[0];
           datasetType = args[1];
           
           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 = createMyEmptyDataset(rekClient, projectArn, datasetType);
   
               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);
           }
   
       }
   
   }
   ```

------

1. 데이터 세트에 이미지 추가 자세한 내용은 [더 많은 이미지 추가(SDK)](md-add-images.md#md-add-images-sdk) 단원을 참조하십시오.