イメージ内の有名人の認識 - Amazon Rekognition

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

イメージ内の有名人の認識

イメージ内の有名人を認識し、認識した有名人に関する追加情報を取得するには、非ストレージ型の API オペレーション (RecognizeCelebrities) を使用します。たとえば、情報収集がタイムクリティカルなソーシャルメディア、ニュース、エンターテインメント業界では、RecognizeCelebrities オペレーションを使用してイメージ内の最大 64 名の有名人を識別し、有名人のウェブページ (ある場合) へのリンクを返します。どのイメージから有名人を検出したかは、Amazon Rekognition に記憶されません。この情報は、アプリケーションで保存する必要があります。

RecognizeCelebrities から返された有名人の追加情報を保存していない場合、イメージを再分析しないでその情報を取得するには GetCelebrityInfo を使用します。GetCelebrityInfo を呼び出すには、Amazon Rekognition から有名人ごとに割り当てられる一意の識別子が必要です。この識別子は、イメージから認識された有名人ごとに RecognizeCelebrities レスポンスの一部として返されます。

大量のイメージのコレクションから有名人を認識する場合は、AWS Batch を使用して RecognizeCelebrities への呼び出しをバックグラウンドでバッチ処理することを検討します。コレクションに新しいイメージを追加する場合、イメージを S3 バケット内にアップロードするときに RecognizeCelebrities を呼び出すことで、AWS Lambda 関数を使用して有名人を認識できます。

呼び出し RecognizeCelebrities

AWS Command Line Interface (AWS CLI) または AWS SDK のいずれかを使用して、入力イメージをイメージバイト配列 (base64 でエンコードされたイメージバイト) または Amazon S3 オブジェクトとして提供できます。AWS CLI の手順では、イメージを .jpg 形式または .png 形式で S3 バケットにアップロードします。AWS の SDK 手順では、ローカルファイルシステムからロードしたイメージを使用します。入力イメージのレコメンデーションの詳細については、「イメージの操作」を参照してください。

この手順を実行するには、1 つ以上の有名人の顔が含まれているイメージファイルが必要です。

イメージ内の有名人を認識するには
  1. まだ実行していない場合:

    1. AmazonRekognitionFullAccessAmazonS3ReadOnlyAccess のアクセス権限を持つユーザーを作成または更新します。詳細については、「ステップ 1: AWS アカウントを設定してユーザーを作成する」を参照してください。

    2. AWS CLI と AWS SDK をインストールして設定します。詳細については、「ステップ 2: AWS CLI と AWS SDKsを設定する」を参照してください。

  2. 以下の例を使用して、RecognizeCelebrities オペレーションを呼び出します。

    Java

    この例では、イメージ内で検出された有名人に関する情報を表示します。

    photo の値は、1 つ以上の有名人の顔が含まれているイメージファイルのパスとファイル名に変更します。

    //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.) package aws.example.rekognition.image; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.Image; import com.amazonaws.services.rekognition.model.BoundingBox; import com.amazonaws.services.rekognition.model.Celebrity; import com.amazonaws.services.rekognition.model.RecognizeCelebritiesRequest; import com.amazonaws.services.rekognition.model.RecognizeCelebritiesResult; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.nio.ByteBuffer; import com.amazonaws.util.IOUtils; import java.util.List; public class RecognizeCelebrities { public static void main(String[] args) { String photo = "moviestars.jpg"; AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); ByteBuffer imageBytes=null; try (InputStream inputStream = new FileInputStream(new File(photo))) { imageBytes = ByteBuffer.wrap(IOUtils.toByteArray(inputStream)); } catch(Exception e) { System.out.println("Failed to load file " + photo); System.exit(1); } RecognizeCelebritiesRequest request = new RecognizeCelebritiesRequest() .withImage(new Image() .withBytes(imageBytes)); System.out.println("Looking for celebrities in image " + photo + "\n"); RecognizeCelebritiesResult result=rekognitionClient.recognizeCelebrities(request); //Display recognized celebrity information List<Celebrity> celebs=result.getCelebrityFaces(); System.out.println(celebs.size() + " celebrity(s) were recognized.\n"); for (Celebrity celebrity: celebs) { System.out.println("Celebrity recognized: " + celebrity.getName()); System.out.println("Celebrity ID: " + celebrity.getId()); BoundingBox boundingBox=celebrity.getFace().getBoundingBox(); System.out.println("position: " + boundingBox.getLeft().toString() + " " + boundingBox.getTop().toString()); System.out.println("Further information (if available):"); for (String url: celebrity.getUrls()){ System.out.println(url); } System.out.println(); } System.out.println(result.getUnrecognizedFaces().size() + " face(s) were unrecognized."); } }
    Java V2

    このコードは、 AWSドキュメント SDK サンプル GitHub リポジトリから取得されます。詳しい事例は こちら を参照してください。

    //snippet-start:[rekognition.java2.recognize_celebs.import] import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.core.SdkBytes; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.List; import software.amazon.awssdk.services.rekognition.model.RecognizeCelebritiesRequest; import software.amazon.awssdk.services.rekognition.model.RecognizeCelebritiesResponse; import software.amazon.awssdk.services.rekognition.model.RekognitionException; import software.amazon.awssdk.services.rekognition.model.Image; import software.amazon.awssdk.services.rekognition.model.Celebrity; //snippet-end:[rekognition.java2.recognize_celebs.import] /** * Before running this Java V2 code example, set up your development environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class RecognizeCelebrities { public static void main(String[] args) { final String usage = "\n" + "Usage: " + " <sourceImage>\n\n" + "Where:\n" + " sourceImage - The path to the image (for example, C:\\AWS\\pic1.png). \n\n"; if (args.length != 1) { System.out.println(usage); System.exit(1); } String sourceImage = args[0]; Region region = Region.US_EAST_1; RekognitionClient rekClient = RekognitionClient.builder() .region(region) .credentialsProvider(ProfileCredentialsProvider.create("profile-name")) .build(); System.out.println("Locating celebrities in " + sourceImage); recognizeAllCelebrities(rekClient, sourceImage); rekClient.close(); } // snippet-start:[rekognition.java2.recognize_celebs.main] public static void recognizeAllCelebrities(RekognitionClient rekClient, String sourceImage) { try { InputStream sourceStream = new FileInputStream(sourceImage); SdkBytes sourceBytes = SdkBytes.fromInputStream(sourceStream); Image souImage = Image.builder() .bytes(sourceBytes) .build(); RecognizeCelebritiesRequest request = RecognizeCelebritiesRequest.builder() .image(souImage) .build(); RecognizeCelebritiesResponse result = rekClient.recognizeCelebrities(request) ; List<Celebrity> celebs=result.celebrityFaces(); System.out.println(celebs.size() + " celebrity(s) were recognized.\n"); for (Celebrity celebrity: celebs) { System.out.println("Celebrity recognized: " + celebrity.name()); System.out.println("Celebrity ID: " + celebrity.id()); System.out.println("Further information (if available):"); for (String url: celebrity.urls()){ System.out.println(url); } System.out.println(); } System.out.println(result.unrecognizedFaces().size() + " face(s) were unrecognized."); } catch (RekognitionException | FileNotFoundException e) { System.out.println(e.getMessage()); System.exit(1); } } // snippet-end:[rekognition.java2.recognize_celebs.main] }
    AWS CLI

    この AWS CLI コマンドでは、recognize-celebrities CLI オペレーションの JSON 出力を表示します。

    bucketname は、イメージが含まれている Amazon S3 バケットの名前に変更します。input.jpg は、1 つ以上の有名人の顔が含まれているイメージのファイル名に変更します。

    profile_name の値を自分のデベロッパープロファイル名に置き換えます。

    aws rekognition recognize-celebrities \ --image "S3Object={Bucket=bucketname,Name=input.jpg}"

    Windows デバイスで CLI にアクセスする場合は、パーサーエラーの発生に対処するため、一重引用符の代わりに二重引用符を使用し、内側の二重引用符をバックスラッシュ (\) でエスケープします。例として以下を参照してください。

    aws rekognition recognize-celebrities --image \ "{\"S3Object\":{\"Bucket\":\"bucket-name\",\"Name\":\"image-name\"}}" --profile profile-name
    Python

    この例では、イメージ内で検出された有名人に関する情報を表示します。

    photo の値は、1 つ以上の有名人の顔が含まれているイメージファイルのパスとファイル名に変更します。

    Rekognition セッションを作成する行の profile_name の値を、自分のデベロッパープロファイル名に置き換えます。

    #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 def recognize_celebrities(photo): session = boto3.Session(profile_name='profile-name') client = session.client('rekognition') with open(photo, 'rb') as image: response = client.recognize_celebrities(Image={'Bytes': image.read()}) print('Detected faces for ' + photo) for celebrity in response['CelebrityFaces']: print('Name: ' + celebrity['Name']) print('Id: ' + celebrity['Id']) print('KnownGender: ' + celebrity['KnownGender']['Type']) print('Smile: ' + str(celebrity['Face']['Smile']['Value'])) print('Position:') print(' Left: ' + '{:.2f}'.format(celebrity['Face']['BoundingBox']['Height'])) print(' Top: ' + '{:.2f}'.format(celebrity['Face']['BoundingBox']['Top'])) print('Info') for url in celebrity['Urls']: print(' ' + url) print() return len(response['CelebrityFaces']) def main(): photo = 'photo-name' celeb_count = recognize_celebrities(photo) print("Celebrities detected: " + str(celeb_count)) if __name__ == "__main__": main()
    Node.Js

    この例では、イメージ内で検出された有名人に関する情報を表示します。

    photo の値は、1 つ以上の有名人の顔が含まれているイメージファイルのパスとファイル名に変更します。bucket の値を、提供されたイメージファイルを含む S3 バケット名に変更します。REGION の値を、ユーザーに関連付けられているリージョンの名前に変更します。Rekognition セッションを作成する行の profile_name の値を、自分のデベロッパープロファイル名に置き換えます。

    // Import required AWS SDK clients and commands for Node.js import { RecognizeCelebritiesCommand } from "@aws-sdk/client-rekognition"; import { RekognitionClient } from "@aws-sdk/client-rekognition"; // Set the AWS Region. const REGION = "region-name"; //e.g. "us-east-1" const profileName = "profile-name"; // Create SNS service object. const rekogClient = new RekognitionClient({region: REGION, credentials: fromIni({profile: profileName,}), }); const bucket = 'bucket-name' const photo = 'photo-name' // Set params const params = { Image: { S3Object: { Bucket: bucket, Name: photo }, }, } const recognize_celebrity = async() => { try { const response = await rekogClient.send(new RecognizeCelebritiesCommand(params)); console.log(response.Labels) response.CelebrityFaces.forEach(celebrity =>{ console.log(`Name: ${celebrity.Name}`) console.log(`ID: ${celebrity.Id}`) console.log(`KnownGender: ${celebrity.KnownGender.Type}`) console.log(`Smile: ${celebrity.Smile}`) console.log('Position: ') console.log(` Left: ${celebrity.Face.BoundingBox.Height}`) console.log(` Top : ${celebrity.Face.BoundingBox.Top}`) }) return response.length; // For unit tests. } catch (err) { console.log("Error", err); } } recognize_celebrity()
    .NET

    この例では、イメージ内で検出された有名人に関する情報を表示します。

    photo の値は、1 つ以上の有名人の顔が含まれているイメージファイル (.jpg 形式または .png 形式) のパスとファイル名に変更します。

    //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 System.IO; using Amazon.Rekognition; using Amazon.Rekognition.Model; public class CelebritiesInImage { public static void Example() { String photo = "moviestars.jpg"; AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient(); RecognizeCelebritiesRequest recognizeCelebritiesRequest = new RecognizeCelebritiesRequest(); Amazon.Rekognition.Model.Image img = new Amazon.Rekognition.Model.Image(); byte[] data = null; try { using (FileStream fs = new FileStream(photo, FileMode.Open, FileAccess.Read)) { data = new byte[fs.Length]; fs.Read(data, 0, (int)fs.Length); } } catch(Exception) { Console.WriteLine("Failed to load file " + photo); return; } img.Bytes = new MemoryStream(data); recognizeCelebritiesRequest.Image = img; Console.WriteLine("Looking for celebrities in image " + photo + "\n"); RecognizeCelebritiesResponse recognizeCelebritiesResponse = rekognitionClient.RecognizeCelebrities(recognizeCelebritiesRequest); Console.WriteLine(recognizeCelebritiesResponse.CelebrityFaces.Count + " celebrity(s) were recognized.\n"); foreach (Celebrity celebrity in recognizeCelebritiesResponse.CelebrityFaces) { Console.WriteLine("Celebrity recognized: " + celebrity.Name); Console.WriteLine("Celebrity ID: " + celebrity.Id); BoundingBox boundingBox = celebrity.Face.BoundingBox; Console.WriteLine("position: " + boundingBox.Left + " " + boundingBox.Top); Console.WriteLine("Further information (if available):"); foreach (String url in celebrity.Urls) Console.WriteLine(url); } Console.WriteLine(recognizeCelebritiesResponse.UnrecognizedFaces.Count + " face(s) were unrecognized."); } }
  3. 表示された有名人 ID のいずれかの値を書き留めます。この ID は、「有名人に関する情報の取得」で必要になります。

RecognizeCelebrities オペレーションリクエスト

RecognizeCelebrities への入力はイメージです。この例では、イメージをイメージのバイトとして渡します。詳細については、「イメージの操作」を参照してください。

{ "Image": { "Bytes": "/AoSiyvFpm....." } }

RecognizeCelebrities オペレーションレスポンス

次の例は、RecognizeCelebrities の JSON 入力および出力です。

RecognizeCelebrities は、認識された有名人の配列と、認識されなかった顔の配列を返します。この の例では、以下の点に注意してください。

  • 認識された有名人Celebrities は認識された有名人の配列です。配列の各 Celebrity オブジェクトは、有名人の名前および関連コンテンツを参照する URL (有名人の IMDB や Wikidata へのリンクなど) のリストを示します。アプリケーションでは、Amazon Rekognition から返される ComparedFace オブジェクトを使用して、イメージ内における有名人の顔の位置と有名人の一意の識別子を確認できます。この一意の識別子を GetCelebrityInfo API オペレーションで使用し、後で有名人の情報を取得できます。

  • 認識されなかった顔UnrecognizedFaces は、既知の有名人と一致しなかった顔の配列です。配列の ComparedFace オブジェクトごとに、イメージ内の顔の位置を示す境界ボックス (およびその他の情報) が含まれます。

{ "CelebrityFaces": [{ "Face": { "BoundingBox": { "Height": 0.617123007774353, "Left": 0.15641026198863983, "Top": 0.10864841192960739, "Width": 0.3641025722026825 }, "Confidence": 99.99589538574219, "Emotions": [{ "Confidence": 96.3981749057023, "Type": "Happy" } ], "Landmarks": [{ "Type": "eyeLeft", "X": 0.2837241291999817, "Y": 0.3637104034423828 }, { "Type": "eyeRight", "X": 0.4091649055480957, "Y": 0.37378931045532227 }, { "Type": "nose", "X": 0.35267341136932373, "Y": 0.49657556414604187 }, { "Type": "mouthLeft", "X": 0.2786353826522827, "Y": 0.5455248355865479 }, { "Type": "mouthRight", "X": 0.39566439390182495, "Y": 0.5597742199897766 }], "Pose": { "Pitch": -7.749263763427734, "Roll": 2.004552125930786, "Yaw": 9.012002944946289 }, "Quality": { "Brightness": 32.69192123413086, "Sharpness": 99.9305191040039 }, "Smile": { "Confidence": 95.45394855702342, "Value": True } }, "Id": "3Ir0du6", "KnownGender": { "Type": "Male" }, "MatchConfidence": 98.0, "Name": "Jeff Bezos", "Urls": ["www.imdb.com/name/nm1757263"] }], "OrientationCorrection": "NULL", "UnrecognizedFaces": [{ "BoundingBox": { "Height": 0.5345501899719238, "Left": 0.48461538553237915, "Top": 0.16949152946472168, "Width": 0.3153846263885498 }, "Confidence": 99.92860412597656, "Landmarks": [{ "Type": "eyeLeft", "X": 0.5863404870033264, "Y": 0.36940744519233704 }, { "Type": "eyeRight", "X": 0.6999204754829407, "Y": 0.3769848346710205 }, { "Type": "nose", "X": 0.6349524259567261, "Y": 0.4804527163505554 }, { "Type": "mouthLeft", "X": 0.5872702598571777, "Y": 0.5535582304000854 }, { "Type": "mouthRight", "X": 0.6952020525932312, "Y": 0.5600858926773071 }], "Pose": { "Pitch": -7.386096477508545, "Roll": 2.304218292236328, "Yaw": -6.175624370574951 }, "Quality": { "Brightness": 37.16635513305664, "Sharpness": 99.9305191040039 }, "Smile": { "Confidence": 95.45394855702342, "Value": True } }] }