Mengenali selebriti dalam sebuah citra - Amazon Rekognition

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengenali selebriti dalam sebuah citra

Untuk mengenali selebriti dalam citra dan mendapatkan informasi tambahan tentang selebriti yang dikenali, gunakan operasi API non-penyimpanan RecognizeCelebrities. Misalnya, di media sosial atau industri berita dan hiburan ketika pengumpulan informasi bisa menjadi prioritas yang tinggi, Anda dapat menggunakan operasi RecognizeCelebrities untuk mengidentifikasi sebanyak 64 selebriti dalam sebuah citra, dan mengembalikan tautan ke halaman web selebriti, jika tersedia. Amazon Rekognition tidak mengingat citra mana yang mendeteksi selebriti. Aplikasi Anda harus menyimpan informasi ini.

Jika Anda belum menyimpan informasi tambahan untuk selebriti yang dikirimkan oleh RecognizeCelebrities dan Anda ingin menghindari penganalisaan ulang pada sebuah citra untuk mendapatkannya, gunakan GetCelebrityInfo. Untuk memanggil GetCelebrityInfo, Anda perlu pengenal unik yang ditetapkan Amazon Rekognition untuk setiap selebriti. Pengenal dikirimkan sebagai bagian dari respons RecognizeCelebrities untuk setiap selebriti yang telah dikenali dalam sebuah citra.

Jika Anda memiliki koleksi citra yang besar yang perlu diproses untuk pengenalan selebriti, pertimbangkan penggunaan AWS Batch untuk memproses panggilan ke RecognizeCelebrities pada batch di latar belakang. Saat menambahkan citra baru ke koleksi, Anda dapat menggunakan fungsi AWS Lambda untuk mengenali selebriti dengan memanggil RecognizeCelebrities saat citra diunggah ke dalam bucket S3.

Memanggil RecognizeCelebrities

Anda dapat memberikan citra input sebagai array bit citra (bit citra yang dikodekan base64) atau sebagai objek Amazon S3, dengan menggunakan AWS Command Line Interface (AWS CLI) atau AWS SDK. Di prosedur AWS CLI, Anda mengunggah sebuah citra dalam format.jpg atau .png ke Bucket S3. Di Prosedur SDK AWS, Anda menggunakan citra yang dimuat dari sistem file lokal Anda. Untuk informasi tentang rekomendasi input citra, lihat Bekerja dengan citra.

Untuk menjalankan prosedur ini, Anda memerlukan file citra yang berisi satu wajah selebriti atau lebih.

Untuk mengenali selebriti dalam sebuah citra
  1. Jika belum:

    1. Buat atau perbarui pengguna dengan AmazonRekognitionFullAccess dan AmazonS3ReadOnlyAccess izin. Untuk informasi selengkapnya, lihat Langkah 1: Siapkan akun AWS dan buat Pengguna.

    2. Instal dan konfigurasikan SDK AWS CLI dan AWS. Untuk informasi selengkapnya, lihat Langkah 2: Siapkan AWS CLI dan AWS SDK.

  2. Gunakan contoh berikut ini untuk memanggil operasi RecognizeCelebrities.

    Java

    Contoh ini menampilkan informasi tentang selebriti yang terdeteksi dalam sebuah citra.

    Ubah nilai photo dengan nama jalur dan file dari sebuah file citra yang berisi satu wajah selebriti atau lebih.

    //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

    Kode ini diambil dari GitHub repositori contoh SDK AWS Dokumentasi. Lihat contoh lengkapnya di sini.

    //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

    Perintah AWS CLI ini menampilkan output JSON untuk operasi CLI recognize-celebrities.

    Ubah bucketname dengan nama bucket Amazon S3 yang berisi citra. Ubah input.jpg ke nama file dari sebuah citra yang berisi satu wajah selebriti atau lebih.

    Ganti nilai profile_name dengan nama profil pengembang Anda.

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

    Jika Anda mengakses CLI pada perangkat Windows, gunakan tanda kutip ganda alih-alih tanda kutip tunggal dan hindari tanda kutip ganda bagian dalam dengan garis miring terbalik (yaitu\) untuk mengatasi kesalahan parser yang mungkin Anda temui. Sebagai contoh, lihat berikut ini:

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

    Contoh ini menampilkan informasi tentang selebriti yang terdeteksi dalam sebuah citra.

    Ubah nilai photo dengan nama jalur dan file dari sebuah file citra yang berisi satu wajah selebriti atau lebih.

    Ganti nilai profile_name di baris yang membuat sesi Rekognition dengan nama profil pengembang Anda.

    #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

    Contoh ini menampilkan informasi tentang selebriti yang terdeteksi dalam sebuah citra.

    Ubah nilai photo dengan nama jalur dan file dari sebuah file citra yang berisi satu wajah selebriti atau lebih. Ubah nilai bucket ke nama bucket S3 yang berisi file gambar yang disediakan. Ubah nilai REGION ke nama wilayah yang terkait dengan pengguna Anda. Ganti nilai profile_name di baris yang membuat sesi Rekognition dengan nama profil pengembang Anda.

    // 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

    Contoh ini menampilkan informasi tentang selebriti yang terdeteksi dalam sebuah citra.

    Ubah nilai photo menjadi nama jalur dan file dari file citra yang berisi satu wajah selebriti atau lebih (.jpg atau .png format).

    //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. Catatan nilai dari salah satu ID selebriti yang ditampilkan. Anda akan membutuhkannya di Mendapatkan informasi tentang selebriti.

RecognizeCelebrities permintaan operasi

Input ke RecognizeCelebrities adalah citra. Dalam contoh ini, citra dilewatkan sebagai bit citra. Untuk informasi selengkapnya, lihat Bekerja dengan citra.

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

RecognizeCelebrities respon operasi

Berikut ini adalah contoh input dan output JSON untuk RecognizeCelebrities.

RecognizeCelebrities mengirimkan array selebriti yang dikenal dan array wajah yang tidak dikenal. Pada contoh beriku ini, perhatikan beberapa hal ini:

  • Selebriti yang dikenalCelebrities adalah array selebriti yang dikenal. Setiap objek Selebriti dalam larik berisi nama selebriti dan daftar URL yang menunjuk ke konten terkait—misalnya, tautan IMDB atau Wikidata selebriti. Amazon Rekognition mengirimkan sebuah objek ComparedFace yang dapat digunakan aplikasi untuk memastikan letak wajah selebriti pada citra dan pengenal yang unik untuk selebriti tersebut. Gunakan pengenal unik untuk mengambil informasi terbaru selebriti dengan Operasi API GetCelebrityInfo.

  • Wajah tak dikenalUnrecognizedFaces adalah array wajah yang tidak cocok dengan selebriti yang dikenal. Setiap objek ComparedFace dalam array yang berisi kotak batas (serta informasi lainnya) yang dapat Anda gunakan untuk menemukan wajah dalam citra.

{ "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 } }] }