Amazon Rekognition
개발자 안내서

이미지에서 레이블 감지

DetectLabels 작업을 사용하여 이미지에서 레이블을 감지할 수 있습니다. 관련 예제는 Amazon S3 버킷에 저장된 이미지 분석 단원을 참조하십시오.

다음 예제에서는 다양한 AWS SDK와 AWS CLI를 사용하여 DetectLabels를 호출합니다. DetectLabels 작업 응답에 대한 자세한 내용은 DetectLabels 응답 단원을 참조하십시오.

이미지에서 레이블을 감지하려면

  1. 아직 설정하지 않았다면 다음과 같이 하십시오.

    1. AmazonRekognitionFullAccess 권한과 AmazonS3ReadOnlyAccess 권한을 가진 IAM 사용자를 만들어 업데이트합니다. 자세한 내용은 1단계: AWS 계정 설정 및 IAM 사용자 만들기 단원을 참조하십시오.

    2. AWS CLI와 AWS SDK를 설치하고 구성합니다. 자세한 내용은 2단계: AWS CLI 및 AWS SDK 설정 단원을 참조하십시오.

  2. 나무, 집, 보트 등과 같은 객체가 한 개 이상 있는—이미지를 S3 버킷에—업로드합니다. 이미지는 .jpg 또는 .png 형식이어야 합니다.

    지침은 Amazon Simple Storage Service 콘솔 사용 설명서Amazon S3로 객체 업로드 단원을 참조하십시오.

  3. 다음 예제를 사용하여 DetectLabels 작업을 호출합니다.

    JavaAWS CLIPython.NET
    Java

    이 예제는 입력 이미지에서 감지된 레이블 목록을 표시합니다. bucketphoto의 값을 2단계에서 사용한 Amazon S3 버킷과 이미지의 이름으로 바꿉니다.

    package com.amazonaws.samples; import java.util.List; import com.amazonaws.services.rekognition.model.BoundingBox; import com.amazonaws.services.rekognition.model.DetectLabelsRequest; import com.amazonaws.services.rekognition.model.DetectLabelsResult; import com.amazonaws.services.rekognition.model.Image; import com.amazonaws.services.rekognition.model.Instance; import com.amazonaws.services.rekognition.model.Label; import com.amazonaws.services.rekognition.model.Parent; import com.amazonaws.services.rekognition.model.S3Object; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.AmazonRekognitionException; public class DetectLabels { public static void main(String[] args) throws Exception { String photo = "photo"; String bucket = "bucket"; AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); DetectLabelsRequest request = new DetectLabelsRequest() .withImage(new Image().withS3Object(new S3Object().withName(photo).withBucket(bucket))) .withMaxLabels(10).withMinConfidence(75F); try { DetectLabelsResult result = rekognitionClient.detectLabels(request); List<Label> labels = result.getLabels(); System.out.println("Detected labels for " + photo + "\n"); for (Label label : labels) { System.out.println("Label: " + label.getName()); System.out.println("Confidence: " + label.getConfidence().toString() + "\n"); List<Instance> instances = label.getInstances(); System.out.println("Instances of " + label.getName()); if (instances.isEmpty()) { System.out.println(" " + "None"); } else { for (Instance instance : instances) { System.out.println(" Confidence: " + instance.getConfidence().toString()); System.out.println(" Bounding box: " + instance.getBoundingBox().toString()); } } System.out.println("Parent labels for " + label.getName() + ":"); List<Parent> parents = label.getParents(); if (parents.isEmpty()) { System.out.println(" None"); } else { for (Parent parent : parents) { System.out.println(" " + parent.getName()); } } System.out.println("--------------------"); System.out.println(); } } catch (AmazonRekognitionException e) { e.printStackTrace(); } } }
    AWS CLI

    이 예제는 detect-labels CLI 작업의 JSON 출력을 표시합니다. bucketphoto의 값을 2단계에서 사용한 Amazon S3 버킷과 이미지의 이름으로 바꿉니다.

    aws rekognition detect-labels \ --image '{"S3Object":{"Bucket":"bucket","Name":"file"}}'
    Python

    이 예제는 입력 이미지에서 감지된 레이블을 표시합니다. bucketphoto의 값을 2단계에서 사용한 Amazon S3 버킷과 이미지의 이름으로 바꿉니다.

    #Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) import boto3 if __name__ == "__main__": bucket='bucket' photo='photo.jpg' client=boto3.client('rekognition') response = client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}}, MaxLabels=10) print('Detected labels for ' + photo) print() for label in response['Labels']: print ("Label: " + label['Name']) print ("Confidence: " + str(label['Confidence'])) print ("Instances:") for instance in label['Instances']: print (" Bounding box") print (" Top: " + str(instance['BoundingBox']['Top'])) print (" Left: " + str(instance['BoundingBox']['Left'])) print (" Width: " + str(instance['BoundingBox']['Width'])) print (" Height: " + str(instance['BoundingBox']['Height'])) print (" Confidence: " + str(instance['Confidence'])) print() print ("Parents:") for parent in label['Parents']: print (" " + parent['Name']) print ("----------") print ()
    .NET

    이 예제는 입력 이미지에서 감지된 레이블 목록을 표시합니다. bucketphoto의 값을 2단계에서 사용한 Amazon S3 버킷과 이미지의 이름으로 바꿉니다.

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) using System; using Amazon.Rekognition; using Amazon.Rekognition.Model; public class DetectLabels { public static void Example() { String photo = "input.jpg"; String bucket = "bucket"; AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient(); DetectLabelsRequest detectlabelsRequest = new DetectLabelsRequest() { Image = new Image() { S3Object = new S3Object() { Name = photo, Bucket = bucket }, }, MaxLabels = 10, MinConfidence = 75F }; try { DetectLabelsResponse detectLabelsResponse = rekognitionClient.DetectLabels(detectlabelsRequest); Console.WriteLine("Detected labels for " + photo); foreach (Label label in detectLabelsResponse.Labels) Console.WriteLine("{0}: {1}", label.Name, label.Confidence); } catch (Exception e) { Console.WriteLine(e.Message); } } }

DetectLabels 작업 요청

DetectLabel에 대한 입력은 이미지입니다. 이 예제 JSON 입력에서는 Amazon S3 버킷에서 소스 이미지를 불러옵니다. MaxLabels는 응답에 반환되는 레이블의 최대 수입니다. MinConfidence는 Amazon Rekognition Image가 응답에 반환하기 위해 충족해야 할 감지된 레이블의 최소 정확성 신뢰도 수준입니다.

{ "Image": { "S3Object": { "Bucket": "bucket", "Name": "input.jpg" } }, "MaxLabels": 10, "MinConfidence": 75 }

DetectLabels 응답

DetectLabels의 응답은 이미지에서 감지된 레이블의 배열과 해당 신뢰도 수준입니다.

다음은 DetectLabels의 응답 예제입니다.

이 응답은 작업에서 여러 개의 레이블(인물, 보행자, 차량, 자동차)을 감지했음을 보여 줍니다. 각 레이블에는 연결된 신뢰도 수준이 있습니다. 예를 들어 감지 알고리즘 상 이미지에 사람이 포함될 신뢰도는 99.99962%입니다.

또한 응답에는 Parents 배열에 레이블의 상위 레이블이 포함되어 있습니다. 예를 들어, 보행자 레이블은 인물이라는 부모 레이블을 갖습니다.

일반적 객체 레이블에 대한 응답은 입력 이미지 상의 레이블 위치에 대한 경계 상자 정보를 포함합니다. 예를 들어 인물 레이블은 두 개의 경계 상자를 포함하는 인스턴스 배열을 갖습니다. 이들은 이미지에서 감지된 두 사람의 위치입니다.

LabelModelVersion 필드에는 DetectLabels가 사용하는 감지 모델의 버전 번호가 포함됩니다.

{ LabelModelVersion": 2.0, Labels: [ { Name: Person, Confidence: 99.99962, Instances: [ { BoundingBox: { Width: 0.19360729, Height: 0.27422005, Left: 0.43734854, Top: 0.35072067 }, Confidence: 99.99962 }, { BoundingBox: { Width: 0.038017172, Height: 0.06597328, Left: 0.9155802, Top: 0.5010884 }, Confidence: 91.415535 } ], Parents: [ ] }, { Name: Pedestrian, Confidence: 99.48226, Instances: [ ], Parents: [ { Name: Person } ] }, { Name: Tarmac, Confidence: 99.385605, Instances: [ ], Parents: [ ] }, { Name: Path, Confidence: 98.70715, Instances: [ ], Parents: [ ] }, { Name: Road, Confidence: 98.11571, Instances: [ ], Parents: [ ] }, { Name: Urban, Confidence: 96.2798, Instances: [ ], Parents: [ ] }, { Name: City, Confidence: 96.2798, Instances: [ ], Parents: [ { Name: Urban } ] }, { Name: Vehicle, Confidence: 94.803375, Instances: [ ], Parents: [ ] }, { Name: Car, Confidence: 94.803375, Instances: [ { BoundingBox: { Width: 0.101054385, Height: 0.122262456, Left: 0.5743986, Top: 0.53436863 }, Confidence: 58.146957 }, { BoundingBox: { Width: 0.110863954, Height: 0.10271988, Left: 0.10355594, Top: 0.5354845 }, Confidence: 70.77716 }, { BoundingBox: { Width: 0.056389667, Height: 0.171637, Left: 0.942777, Top: 0.52358043 }, Confidence: 57.8401 }, { BoundingBox: { Width: 0.046953984, Height: 0.18796417, Left: 0.0031801604, Top: 0.50652236 }, Confidence: 48.009228 }, { BoundingBox: { Width: 0.060038604, Height: 0.06737709, Left: 0.22409998, Top: 0.54413414 }, Confidence: 56.240288 }, { BoundingBox: { Width: 0.040678814, Height: 0.03428703, Left: 0.31641594, Top: 0.5566274 }, Confidence: 53.59637 }, { BoundingBox: { Width: 0.02848697, Height: 0.19150497, Left: 0.0, Top: 0.5107087 }, Confidence: 54.186676 }, { BoundingBox: { Width: 0.06254628, Height: 0.053911515, Left: 0.4608306, Top: 0.5573825 }, Confidence: 58.661976 }, { BoundingBox: { Width: 0.04341105, Height: 0.08935959, Left: 0.18293385, Top: 0.539492 }, Confidence: 52.312466 }, { BoundingBox: { Width: 0.031183116, Height: 0.0398999, Left: 0.2853088, Top: 0.55793667 }, Confidence: 51.869164 }, { BoundingBox: { Width: 0.03111379, Height: 0.056484755, Left: 0.2580395, Top: 0.550482 }, Confidence: 45.591652 }, { BoundingBox: { Width: 0.10616336, Height: 0.1852818, Left: 0.0037978808, Top: 0.5039217 }, Confidence: 94.34959 }, { BoundingBox: { Width: 0.14233612, Height: 0.15528248, Left: 0.6494813, Top: 0.5333096 }, Confidence: 88.45155 }, { BoundingBox: { Width: 0.08586375, Height: 0.0855043, Left: 0.5128013, Top: 0.5438793 }, Confidence: 45.12628 }, { BoundingBox: { Width: 0.24299885, Height: 0.21577217, Left: 0.7309805, Top: 0.52518845 }, Confidence: 94.146774 } ], Parents: [ { Name: Vehicle } ] }, { Name: Downtown, Confidence: 91.13891, Instances: [ ], Parents: [ { Name: Urban }, { Name: City } ] } ], }