Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tutorial ini menunjukkan bagaimana mendapatkan hasil dari operasi analisis video untuk pendeteksi label dengan menggunakan fungsi Java Lambda.
catatan
Tutorial ini menggunakan AWS SDK for Java 1.x. Untuk tutorial menggunakan Rekognition dan SDK AWS for Java versi 2, AWS lihat
Anda dapat menggunakan fungsi Lambda dengan operasi Amazon Rekognition Video. Misalnya, diagram berikut menunjukkan situs web yang menggunakan fungsi Lambda untuk secara otomatis memulai analisis video saat diunggah ke bucket Amazon S3. Ketika fungsi Lambda dipicu, fungsi Lambda memanggil StartLabelDetection untuk mulai mendeteksi label di video yang diunggah. Untuk informasi tentang penggunaan Lambda untuk memproses notifikasi peristiwa dari bucket Amazon S3, lihat Menggunakan AWS Lambda dengan Amazon S3 Events.
Fungsi Lambda kedua dipicu ketika status penyelesaian analisis dikirim ke topik Amazon SNS terdaftar. Fungsi Lambda kedua memanggil GetLabelDetection untuk mendapatkan hasil analisis. Hasilnya kemudian disimpan dalam basis data untuk persiapan menampilkannya pada halaman web. fokus dari tutorial ini ada pada Fungsi lambda kedua.

Dalam tutorial ini, fungsi Lambda dipicu ketika Amazon Rekognition Video mengirimkan status penyelesaian analisis video untuk topik Amazon SNS yang terdaftar. Amazon SNS yang terdaftar mengumpulkan hasil analisis video dengan menghubungi GetLabelDetection. Untuk tujuan demonstrasi, tutorial ini menulis hasil deteksi label ke CloudWatch log. Dalam fungsi Lambda aplikasi Anda, Anda harus menyimpan hasil analisis untuk digunakan nanti. Misalnya, Anda dapat menggunakan Amazon DynamoDB untuk menyimpan hasil analisis. Untuk informasi selengkapnya, lihat Bekerja dengan DynamoDB.
Prosedur berikut menunjukkan kepada Anda cara:
-
Buat topik Amazon SNS dan atur izin.
-
Buat fungsi Lambda dengan menggunakan AWS Management Console dan berlangganan ke topik Amazon SNS.
-
Konfigurasikan fungsi Lambda dengan menggunakan AWS Management Console.
-
Tambahkan kode sampel ke AWS Toolkit for Eclipse proyek dan unggah ke fungsi Lambda.
-
Uji fungsi Lambda dengan menggunakan AWS CLI.
catatan
Gunakan AWS Wilayah yang sama di seluruh tutorial.
Prasyarat
Tutorial ini mengasumsikan bahwa Anda sudah familier dengan AWS Toolkit for Eclipse. Untuk informasi selengkapnya, lihat AWS Toolkit for Eclipse.
Buat topik SNS
Status penyelesaian operasi analisis Amazon Rekognition Video dikirim ke topik Amazon SNS. Prosedur ini menciptakan topik Amazon SNS dan peran layanan IAM yang memberikan akses Amazon Rekognition Video ke topik Amazon SNS Anda. Untuk informasi selengkapnya, lihat Memanggil operasi Amazon Rekognition Video.
Untuk membuat topik Amazon SNS
-
Jika belum, buat peran layanan IAM untuk memberikan akses Amazon Rekognition Video ke topik Amazon SNS Anda. Perhatikan Amazon Resource Name (ARN). Untuk informasi selengkapnya, lihat Memberikan akses ke beberapa topik Amazon SNS.
-
Buat topik Amazon SNS dengan menggunakan Konsol Amazon SNS
Anda hanya perlu menentukan nama topik. Tambahkan nama topik dengan. AmazonRekognition Perhatikan topik ARN.
Buat fungsi Lambda
Anda membuat fungsi Lambda dengan menggunakan AWS Management Console. Kemudian Anda menggunakan proyek AWS Toolkit for Eclipse untuk mengunggah paket fungsi Lambda ke AWS Lambda. Hal ini juga memungkinkan untuk membuat fungsi Lambda dengan AWS Toolkit for Eclipse. Untuk informasi selengkapnya, lihat Tutorial: Cara Membuat, Mengunggah, dan Memanggil Fungsi AWS Lambda.
Untuk membuat fungsi Lambda
-
Masuk ke AWS Management Console, dan buka konsol AWS Lambda di. https://console.aws.amazon.com/lambda/
-
Pilih Buat fungsi.
-
Pilih Penulis dari scratch.
-
Di Nama fungsi, ketikkan nama untuk fungsi Anda.
-
Di Waktu aktif, pilih Java 8.
-
Pilih Memilih atau membuat peran eksekusi.
-
Dalam Peran eksekusi, pilih Membuat peran baru dengan izin Lambda dasar.
-
Perhatikan nama peran baru yang ditampilkan di bagian bawah bagian Informasi dasar.
-
Pilih Buat fungsi.
Konfigurasikan fungsi Lambda
Setelah Anda membuat fungsi Lambda, Anda mengonfigurasi fungsi Lambda yang dipicu oleh topik Amazon SNS yang Anda buat di Buat topik SNS. Anda juga dapat menyesuaikan persyaratan memori dan batas waktu untuk fungsi Lambda.
Untuk mengonfigurasi fungsi Lambda
-
Dalam Kode fungsi, ketik
com.amazonaws.lambda.demo.JobCompletionHandler
untuk Handler. -
Dalam Pengaturan dasar, pilih Edit. Parameter Edit pengaturan dasar akan ditampilkan.
Pilih 1024 untuk Memori.
Pilih 10 detik untuk Waktu habis.
Pilih Simpan.
-
Di bawah Desainer, pilih + Tambahkan pemicu. Tambah dialog pemicu yang ditampilkan.
Dalam Konfigurasi pemicu pilih SNS.
Dalam Topik SNS, pilih topik Amazon SNS yang Anda buat di Buat topik SNS.
-
Pilih Aktifkan pemicu.
-
Untuk menambahkan pemicu, pilih Tambahkan.
Pilih Simpan untuk menyimpan fungsi Lambda.
Konfigurasikan peran IAM Lambda
Untuk memanggil operasi Video Rekognition Amazon, Anda menambahkan kebijakan terkelola AmazonRekognitionFullAccessAWS ke peran Lambda IAM. Mulai operasi, seperti StartLabelDetection, yang juga memerlukan izin peran lewat untuk peran layanan IAM yang digunakan Amazon Rekognition Video untuk mengakses topik Amazon SNS.
Untuk mengonfigurasi peran
Masuk ke AWS Management Console dan buka konsol IAM di https://console.aws.amazon.com/iam/
. -
Di panel navigasi, pilih Peran.
-
Dalam daftar, pilih nama peran eksekusi yang Anda buat di Buat fungsi Lambda.
-
Pilih tab Izin.
-
Pilih Pasang kebijakan.
-
Pilih AmazonRekognitionFullAccessdari daftar kebijakan.
-
Pilih Lampirkan kebijakan.
-
Sekali lagi, pilih peran eksekusi.
-
Pilih Tambahkan kebijakan inline.
-
Pilih tab JSON.
-
Ganti kebijakan yang sudah ada dengan kebijakan berikut. Ganti
servicerole
dengan peran layanan IAM yang Anda buat di Buat topik SNS.{ "Version": "2012-10-17", "Statement": [ { "Sid": "
mysid
", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:servicerole
" } ] } -
Pilih Tinjau kebijakan.
-
Pada Nama*, ketik nama kebijakan.
-
Pilih Buat kebijakan.
Buat proyek AWS Toolkit for Eclipse Lambda
Ketika fungsi Lambda dipicu, kode berikut menerima status penyelesaian dari topik Amazon SNS, dan memanggil GetLabelDetection untuk mendapatkan hasil analisis. Hitungan label yang terdeteksi, dan daftar label yang terdeteksi ditulis ke CloudWatch log. Fungsi Lambda Anda perlu menyimpan hasil analisis video untuk digunakan nanti.
Untuk membuat proyek AWS Toolkit for Eclipse Lambda
-
Buat proyek AWS Toolkit for EclipseAWS Lambda.
-
Untuk Nama proyek:, ketik nama proyek yang Anda pilih.
-
Untuk Nama Kelas:, masukkan JobCompletionHandler.
-
Untuk tipe input:, pilih Peristiwa SNS.
-
Tidak perlu mengubah bidang lain.
-
-
Di Eclipse Project explorer, buka metode handler Lambda yang dihasilkan (JobCompletionHandler.java) dan ganti isinya dengan yang berikut:
//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 com.amazonaws.lambda.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SNSEvent; import java.util.List; import com.amazonaws.regions.Regions; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.GetLabelDetectionRequest; import com.amazonaws.services.rekognition.model.GetLabelDetectionResult; import com.amazonaws.services.rekognition.model.LabelDetection; import com.amazonaws.services.rekognition.model.LabelDetectionSortBy; import com.amazonaws.services.rekognition.model.VideoMetadata; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class JobCompletionHandler implements RequestHandler<SNSEvent, String> { @Override public String handleRequest(SNSEvent event, Context context) { String message = event.getRecords().get(0).getSNS().getMessage(); LambdaLogger logger = context.getLogger(); // Parse SNS event for analysis results. Log results try { ObjectMapper operationResultMapper = new ObjectMapper(); JsonNode jsonResultTree = operationResultMapper.readTree(message); logger.log("Rekognition Video Operation:========================="); logger.log("Job id: " + jsonResultTree.get("JobId")); logger.log("Status : " + jsonResultTree.get("Status")); logger.log("Job tag : " + jsonResultTree.get("JobTag")); logger.log("Operation : " + jsonResultTree.get("API")); if (jsonResultTree.get("API").asText().equals("StartLabelDetection")) { if (jsonResultTree.get("Status").asText().equals("SUCCEEDED")){ GetResultsLabels(jsonResultTree.get("JobId").asText(), context); } else{ String errorMessage = "Video analysis failed for job " + jsonResultTree.get("JobId") + "State " + jsonResultTree.get("Status"); throw new Exception(errorMessage); } } else logger.log("Operation not StartLabelDetection"); } catch (Exception e) { logger.log("Error: " + e.getMessage()); throw new RuntimeException (e); } return message; } void GetResultsLabels(String startJobId, Context context) throws Exception { LambdaLogger logger = context.getLogger(); AmazonRekognition rek = AmazonRekognitionClientBuilder.standard().withRegion(Regions.US_EAST_1).build(); int maxResults = 1000; String paginationToken = null; GetLabelDetectionResult labelDetectionResult = null; String labels = ""; Integer labelsCount = 0; String label = ""; String currentLabel = ""; //Get label detection results and log them. do { GetLabelDetectionRequest labelDetectionRequest = new GetLabelDetectionRequest().withJobId(startJobId) .withSortBy(LabelDetectionSortBy.NAME).withMaxResults(maxResults).withNextToken(paginationToken); labelDetectionResult = rek.getLabelDetection(labelDetectionRequest); paginationToken = labelDetectionResult.getNextToken(); VideoMetadata videoMetaData = labelDetectionResult.getVideoMetadata(); // Add labels to log List<LabelDetection> detectedLabels = labelDetectionResult.getLabels(); for (LabelDetection detectedLabel : detectedLabels) { label = detectedLabel.getLabel().getName(); if (label.equals(currentLabel)) { continue; } labels = labels + label + " / "; currentLabel = label; labelsCount++; } } while (labelDetectionResult != null && labelDetectionResult.getNextToken() != null); logger.log("Total number of labels : " + labelsCount); logger.log("labels : " + labels); } }
-
Namespace Rekognition belum terselesaikan. Untuk mengoreksi ini:
-
Hentikan sejenak mouse Anda di atas bagian garis
import com.amazonaws.services.rekognition.AmazonRekognition;
yang digaris bawahi. -
Pilih Perbaiki pengaturan proyek....
-
Pilih versi terbaru dari arsip Amazon Rekognition.
-
Pilih OKE untuk menambahkan arsip ke proyek.
-
Simpan file.
-
Klik kanan di jendela kode Eclipse Anda, pilih AWS Lambda, lalu pilih Fungsi unggah ke AWS Lambda.
-
Pada halaman Pilih Target Fungsi Lambda, pilih Wilayah AWS untuk digunakan.
-
Pilih Pilih fungsi lambda yang sudah ada, dan pilih fungsi Lambda yang Anda buat di Buat fungsi Lambda.
-
Pilih Berikutnya. Parameter kotak dialog Konfigurasi fungsi akan ditampilkan.
-
Dalam IAM Role Pilih IAM role yang Anda buat di Buat fungsi Lambda.
-
Pilih Selesai, dan fungsi Lambda diunggah ke AWS.
Uji fungsi Lambda
Gunakan AWS CLI perintah berikut untuk menguji fungsi Lambda dengan memulai analisis deteksi label video. Setelah analisis selesai, fungsi Lambda dipicu. Konfirmasikan bahwa analisis berhasil dengan memeriksa CloudWatch log Log.
Untuk menguji fungsi Lambda
-
Unggah file video format MOV atau MPEG-4 ke bucket S3 Anda. Untuk pengujian, unggah video yang panjangnya tidak lebih dari 30 detik.
Untuk petunjuk, lihat Mengunggah Objek ke Amazon S3 di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.
-
Jalankan AWS CLI perintah berikut untuk mulai mendeteksi label dalam video.
aws rekognition start-label-detection --video "S3Object={Bucket="
bucketname
",Name="videofile
"}" \ --notification-channel "SNSTopicArn=TopicARN
,RoleArn=RoleARN
" \ --regionRegion
Perbarui nilai berikut:
-
Ubah
bucketname
danvideofile
ke nama bucket Amazon S3 dan nama file video yang Anda ingin labelnya dideteksi. -
Ubah
TopicARN
untuk ARN dari topik Amazon SNS yang Anda buat di Buat topik SNS. -
Ubah
RoleARN
untuk ARN dari IAM role yang Anda buat di Buat topik SNS. Ubah
Region
ke AWS Wilayah yang Anda gunakan.
-
-
Perhatikan nilai dari
JobId
dalam respons. Respons tersebut serupa dengan contoh JSON berikut ini.{ "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn" }
-
Buka konsol https://console.aws.amazon.com/cloudwatch/
. -
Ketika analisis selesai, entri log untuk fungsi Lambda muncul di Grup log.
-
Pilih fungsi Lambda untuk melihat aliran log.
-
Pilih aliran log terbaru untuk melihat entri log yang dibuat oleh fungsi Lambda. Jika operasi berhasil, tampilannya mirip dengan output berikut, yang menunjukkan detail operasi pengenalan video, termasuk ID pekerjaan, jenis operasi "StartLabelDetection“, dan daftar kategori label yang terdeteksi seperti Botol, Pakaian, Kerumunan, dan Makanan:
Nilai dari ID tugas harus sesuai dengan nilai
JobId
yang Anda catat di langkah 3.