Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
In diesem Tutorial wird gezeigt, wie Sie die Ergebnisse einer Videoanalyse-Operation für eine Label-Erkennung mit einer Java-Lambda-Funktion abrufen.
Anmerkung
Dieses Tutorial verwendet das AWS SDK for Java 1.x. Ein Tutorial zur Verwendung von Rekognition und dem AWS SDK for Java Version 2 finden Sie im AWS Documentation SDK Examples GitHub
Sie können Lambda-Funktionen mit Amazon-Rekognition-Video-Operationen verwenden. Das folgende Diagramm zeigt z. B. eine Website, die eine Lambda-Funktion verwendet, um automatisch die Analyse eines Videos zu starten, wenn es in einen Amazon-S3-Bucket hochgeladen wird. Wenn die Lambda-Funktion ausgelöst wird, ruft sie auf, StartLabelDetectionum mit der Erkennung von Labels im hochgeladenen Video zu beginnen. Informationen zur Verwendung von Lambda für die Verarbeitung von Ereignisbenachrichtigungen aus einem Amazon-S3-Bucket finden Sie unter Verwenden von AWS Lambda mit Amazon-S3-Ereignissen.
Eine zweite Lambda-Funktion wird ausgelöst, wenn der Abschlussstatus für die Analyse an das registrierte Amazon-SNS-Thema gesendet wird. Die zweite Lambda-Funktion ruft GetLabelDetectionauf, um die Analyseergebnisse abzurufen. Die Ergebnisse werden in einer Datenbank gespeichert, um ihre Anzeige auf einer Webseite vorzubereiten. Diese zweite Lambda-Funktion bildet den Schwerpunkt dieses Tutorials.

In diesem Tutorial wird die Lambda-Funktion ausgelöst, wenn Amazon Rekognition Video den Abschlussstatus für die Videoanalyse an das registrierte Amazon-SNS-Thema sendet. Die Videoanalyseergebnisse werden danach durch Aufrufen von GetLabelDetection gesammelt. Zu Demonstrationszwecken schreibt dieses Tutorial die Ergebnisse der Etikettenerkennung in ein Protokoll. CloudWatch In der Lambda-Funktion in Ihrer Anwendung sollten Sie die Analyseergebnisse zur späteren Verwendung speichern. Dazu können Sie beispielsweise Amazon DynamoDB verwenden. Weitere Informationen finden Sie im Thema zum Arbeiten mit DynamoDB.
In den nachstehenden Verfahren wird Folgendes veranschaulicht:
-
Erstellen eines Amazon-SNS-Themas und Einrichten von Berechtigungen
-
Erstellen Sie die Lambda-Funktion mithilfe von AWS Management Console und abonnieren Sie sie für das Amazon SNS SNS-Thema.
-
Konfigurieren der Lambda-Funktion mithilfe der AWS Management Console.
-
Fügen Sie Beispielcode zu einem AWS Toolkit for Eclipse Projekt hinzu und laden Sie ihn in die Lambda-Funktion hoch.
-
Testen der Lambda-Funktion mithilfe der AWS CLI.
Anmerkung
Verwenden Sie während des gesamten Tutorials dieselbe AWS Region.
Voraussetzungen
In diesem Tutorial wird vorausgesetzt, dass Sie mit AWS Toolkit for Eclipse vertraut sind. Weitere Informationen finden Sie unter AWS Toolkit for Eclipse.
Erstellen eines SNS-Themas
Der Abschlussstatus einer Amazon-Rekognition-Video-Videoanalyse-Operation wird an ein Amazon-SNS-Thema gesendet. In diesem Verfahren erstellen Sie das Amazon-SNS-Thema und die IAM-Servicerolle, durch die Amazon-Rekognition-Video Zugriff auf Ihre Amazon-SNS-Themen erhält. Weitere Informationen finden Sie unter Amazon-Rekognition-Video-Operationen aufrufen.
Erstellen eines Amazon SNS-Themas
-
Wenn Sie es noch nicht getan haben, erstellen Sie eine IAM-Servicerolle, um Amazon-Rekognition-Video Zugriff auf Ihre Amazon-SNS-Themen zu geben. Notieren Sie den Amazon-Ressourcennamen (ARN). Weitere Informationen finden Sie unter Den Zugriff auf mehrfache Amazon-SNS-Themen ermöglichen.
-
Erstellen Sie ein Amazon-SNS-Thema über die Amazon-SNS-Konsole
, wobei Sie nur den Namen des Themas angeben müssen. Stellen Sie dem Themennamen ein. AmazonRekognition Notieren Sie den ARN des Themas.
So erstellen Sie die Lambda-Funktion:
Sie erstellen die Lambda-Funktion mithilfe der AWS Management Console. Sie verwenden anschließend ein AWS Toolkit for Eclipse -Projekt, um das Lambda-Funktionspaket auf AWS Lambda hochzuladen. Sie können die Lambda-Funktion auch mit dem AWS Toolkit for Eclipse erstellen. Weitere Informationen finden Sie unter Tutorial: Erstellen, Hochladen und Aufrufen einer AWS Lambda-Funktion.
So erstellen Sie die Lambda-Funktion:
-
Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die AWS Lambda-Konsole unter https://console.aws.amazon.com/lambda/
. -
Wählen Sie Funktion erstellen aus.
-
Wählen Sie Von Grund auf neu schreiben aus.
-
Geben Sie in Funktionsname einen Namen für Ihre Funktion ein.
-
Wählen Sie in Laufzeit die Option Java 8 aus.
-
Wählen Sie Ausführungsrolle auswählen oder erstellen aus.
-
Wählen Sie in Ausführungsrolle die Option Neue Rolle mit Lambda-Basisberechtigungen erstellen aus.
-
Notieren Sie den Namen der neuen Rolle, der unten im Abschnitt Basisinformationen angezeigt wird.
-
Wählen Sie Funktion erstellen aus.
Konfigurieren der Lambda-Funktion
Nachdem Sie die Lambda-Funktion erstellt haben, konfigurieren Sie ihre Auslösung durch das Amazon-SNS-Thema, das Sie im Abschnitt Erstellen eines SNS-Themas fertiggestellt haben. Sie passen außerdem die Speicheranforderungen und den Timeout-Zeitraum für die Lambda-Funktion an.
Konfigurieren der Lambda-Funktion
-
Geben Sie in Funktionscode folgenden Text für den
com.amazonaws.lambda.demo.JobCompletionHandler
Handler ein: -
Wählen Sie in Basiseinstellungen die Option Bearbeiten aus. Anschließend wird das Dialogfeld Basiseinstellungen bearbeiten angezeigt.
Wählen Sie 1024 für Speicher.
Wählen Sie für Timeout 10 Sekunden.
Wählen Sie Speichern.
-
Wählen Sie in Designer die Option + Auslöser hinzufügen aus. Anschließend wird das Dialogfeld „Auslöser hinzufügen“ angezeigt.
Wählen Sie in Auslöserkonfiguration die Option SNS aus.
Wählen Sie in SNS-Thema das Amazon-SNS-Thema aus, das Sie in Erstellen eines SNS-Themas erstellt haben.
-
Klicken Sie auf Auslöser aktivieren.
-
Wählen Sie Hinzufügen aus, um den Auslöser hinzuzufügen.
Wählen Sie Speichern, um die Lambda-Funktion zu speichern.
Konfigurieren der IAM-Lambda-Rolle
Um Amazon Rekognition Video Operations aufzurufen, fügen Sie die von AmazonRekognitionFullAccessAWS verwaltete Richtlinie zur IAM-Lambda-Rolle hinzu. Startvorgänge erfordern beispielsweise auch StartLabelDetectionPass-Rollen-Berechtigungen für die IAM-Servicerolle, die Amazon Rekognition Video für den Zugriff auf das Amazon SNS SNS-Thema verwendet.
Konfigurieren Sie die Rolle wie folgt:
Melden Sie sich bei der an AWS Management Console und öffnen Sie die IAM-Konsole unter. https://console.aws.amazon.com/iam/
-
Wählen Sie im Navigationsbereich Rollen.
-
Wählen Sie in der Liste den Namen der Ausführungsrolle aus, die Sie in So erstellen Sie die Lambda-Funktion: erstellt haben.
-
Wählen Sie die Registerkarte Berechtigungen.
-
Wählen Sie Richtlinien anfügen.
-
Wählen Sie AmazonRekognitionFullAccessaus der Liste der Richtlinien aus.
-
Wählen Sie Richtlinie anfügen aus.
-
Wählen Sie die Ausführungsrolle erneut aus.
-
Wählen Sie Inline-Richtlinie hinzufügen.
-
Wählen Sie den Tab JSON.
-
Ersetzen Sie die vorhandene Richtlinie durch die unten stehende. Tauschen Sie
servicerole
durch die IAM-Servicerolle aus, die Sie im Abschnitt Erstellen eines SNS-Themas erstellt haben.{ "Version": "2012-10-17", "Statement": [ { "Sid": "
mysid
", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:servicerole
" } ] } -
Wählen Sie Richtlinie prüfen.
-
Geben Sie in Name* einen Namen für die Richtlinie ein.
-
Wählen Sie Richtlinie erstellen aus.
Erstellen Sie das AWS Toolkit for Eclipse -Lambda-Projekt
Wenn die Lambda-Funktion ausgelöst wird, ruft der folgende Code den Abschlussstatus aus dem Amazon SNS SNS-Thema ab und ruft GetLabelDetectionauf, um die Analyseergebnisse abzurufen. Die Anzahl der erkannten Labels und eine Liste der erkannten Labels werden in ein CloudWatch Protokoll geschrieben. Die Lambda-Funktion speichert die Ergebnisse der Videoanalyse zur späteren Verwendung.
Um das AWS Toolkit for Eclipse Lambda-Projekt zu erstellen
-
Erstellen Sie ein AWS Toolkit for EclipseAWS Lambda-Projekt.
-
Geben Sie in Projektname: einen Namen Ihrer Wahl ein.
-
Geben JobCompletionHandlerSie als Klassenname: ein.
-
Wählen Sie unter Eingabetyp: die Option SNS-Ereignis aus.
-
Lassen Sie die anderen Felder unverändert.
-
-
Öffnen Sie im Eclipse-Projektexplorer die generierte Lambda-Handler-Methode (JobCompletionHandler.java) und ersetzen Sie den Inhalt durch Folgendes:
//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); } }
-
Die Rekognition-Namespaces werden nicht aufgelöst. Korrigieren Sie dies wie folgt:
-
Platzieren Sie den Mauszeiger über dem unterstrichenen Teil der Zeile
import com.amazonaws.services.rekognition.AmazonRekognition;
. -
Wählen Sie Projekteinrichtung korrigieren... aus.
-
Wählen Sie die neueste Version des Amazon-Rekognition-Archivs aus.
-
Klicken Sie auf OK, um dem Projekt das Archiv hinzuzufügen.
-
Speichern Sie die Datei.
-
Klicken Sie mit der rechten Maustaste in Ihr Eclipse-Code-Fenster und wählen AWS Lambda und dann Upload function to AWS Lambda aus.
-
Wählen Sie auf der Seite Ziel-Lambda-Funktion auswählen die zu verwendende AWS-Region aus.
-
Wählen Sie Vorhandene Lambda-Funktion auswählen aus und klicken Sie auf die Lambda-Funktion, die Sie im Abschnitt So erstellen Sie die Lambda-Funktion: fertiggestellt haben.
-
Wählen Sie Weiter. Das Dialogfeld Funktionskonfiguration wird angezeigt.
-
Wählen Sie in IAM-Rolle die IAM-Rolle aus, die Sie in So erstellen Sie die Lambda-Funktion: erstellt haben.
-
Klicken Sie auf Beenden. Die Lambda-Funktion wird in AWS hochgeladen.
Lambda-Funktion testen
Verwenden Sie den folgenden AWS CLI Befehl, um die Lambda-Funktion zu testen, indem Sie die Labelerkennungsanalyse eines Videos starten. Nach Abschluss der Analyse wird die Lambda-Funktion ausgelöst. Vergewissern Sie sich, dass die Analyse erfolgreich war, indem Sie die CloudWatch Log-Logs überprüfen.
Lambda-Funktion testen
-
Laden Sie eine Videodatei im MOV- oder MPEG-4-Format in Ihren S3-Bucket hoch. Laden Sie zu Testzwecken ein Video hoch, das nicht länger als 30 Sekunden ist.
Weitere Anleitungen finden Sie unter Upload eines Objekts in Amazon S3 im Benutzerhandbuch für Amazon Simple Storage Service.
-
Führen Sie den folgenden AWS CLI Befehl aus, um mit der Erkennung von Labels in einem Video zu beginnen.
aws rekognition start-label-detection --video "S3Object={Bucket="
bucketname
",Name="videofile
"}" \ --notification-channel "SNSTopicArn=TopicARN
,RoleArn=RoleARN
" \ --regionRegion
Aktualisieren Sie die folgenden Werte:
-
Ändern Sie
bucketname
undvideofile
in den Amazon-S3-Bucket-Namen und Dateinamen des Videos, in dem Sie Label erkennen möchten. -
Ändern Sie
TopicARN
in den ARN des Amazon-SNS-Themas, das Sie im Abschnitt Erstellen eines SNS-Themas fertiggestellt haben. -
Ändern Sie
RoleARN
in den ARN der IAM-Rolle, die Sie im Abschnitt Erstellen eines SNS-Themas angelegt haben. Wechseln Sie
Region
zu der AWS Region, die Sie verwenden.
-
-
Notieren Sie den
JobId
-Wert in der Antwort. Die Antwort sollte dem folgenden JSON-Beispiel ähnlich sein.{ "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn" }
-
Öffnen Sie die https://console.aws.amazon.com/cloudwatch/-Konsole
. -
Wenn die Analyse abgeschlossen ist, wird ein Protokolleintrag für die Lambda-Funktion in der Protokollgruppe angezeigt.
-
Wählen Sie die Lambda-Funktion aus, um die Protokollstreams anzuzeigen.
-
Wählen Sie den neuesten Protokollstream aus, um die Protokolleinträge der Lambda-Funktion anzusehen. Wenn der Vorgang erfolgreich war, ähnelt er der folgenden Ausgabe, in der die Details des Videoerkennungsvorgangs angezeigt werden, einschließlich der Auftrags-ID, des Vorgangstyps "StartLabelDetection„und einer Liste der erkannten Etikettenkategorien wie Flasche, Kleidung, Menschenmenge und Lebensmittel:
Der Wert für Aufgaben-ID sollte mit dem Wert für
JobId
übereinstimmen, den Sie in Schritt 3 notiert haben.