Creazione di una funzione Lambda Amazon Rekognition - Amazon Rekognition

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creazione di una funzione Lambda Amazon Rekognition

Questa esercitazione mostra come ottenere i risultati di un'operazione di analisi video per il rilevamento di etichette utilizzando una funzione Lambda Java.

Puoi usare le funzioni Lambda con le operazioni di Video Amazon Rekognition. Ad esempio, il seguente diagramma mostra un sito Web che utilizza una funzione Lambda per avviare automaticamente l'analisi di un video quando viene caricato in un bucket Amazon S3. Quando la funzione Lambda viene attivata, chiama StartLabelDetectionper iniziare a rilevare le etichette nel video caricato. Per informazioni sull'utilizzo di Lambda per elaborare le notifiche degli eventi da un bucket Amazon S3, consulta Utilizzo di AWS Lambda con gli eventi Amazon S3.

Una seconda funzione Lambda viene attivata quando lo stato di completamento dell'analisi viene inviato all'argomento Amazon SNS registrato. La seconda funzione Lambda chiama GetLabelDetectionper ottenere i risultati dell'analisi. I risultati vengono quindi archiviati in un database in preparazione alla visualizzazione su una pagina Web. Questa seconda funzione lambda è l'argomento principale di questo tutorial.

Diagramma che mostra un flusso di lavoro di elaborazione video per Amazon Rekognition Video, dal caricamento di un video all'archiviazione dei risultati in Amazon DynamoDB per la visualizzazione su un sito Web.

In questa esercitazione, la funzione Lambda viene attivata quando Video Amazon Rekognition invia lo stato di completamento per l'analisi video all'argomento Amazon SNS registrato. Quindi raccoglie i risultati dell'analisi video chiamando GetLabelDetection. A scopo dimostrativo, questo tutorial scrive i risultati del rilevamento delle etichette in un registro. CloudWatch Nella funzione Lambda della tua applicazione, è opportuno archiviare i risultati dell'analisi per un utilizzo successivo. Ad esempio, è possibile usare Amazon DynamoDB per salvare i risultati dell'analisi. Per ulteriori informazioni, vedi Lavorare con DynamoDB.

Le procedure seguenti mostrano come:

  • Creare l'argomento Amazon SNS e impostare le autorizzazioni.

  • Crea la funzione Lambda utilizzando AWS Management Console e sottoscrivila all'argomento Amazon SNS.

  • Configurare la funzione Lambda tramite la AWS Management Console.

  • Aggiungi codice di esempio a un AWS Toolkit for Eclipse progetto e caricalo nella funzione Lambda.

  • Test della funzione Lambda tramite AWS CLI.

Nota

Usa la stessa AWS regione per tutto il tutorial.

Prerequisiti

Questa esercitazione presuppone che tu sia esperto di AWS Toolkit for Eclipse. Per ulteriori informazioni, consulta AWS Toolkit for Eclipse.

Creazione dell'argomento SNS

Lo stato di completamento di un'operazione di un'analisi video di Amazon Rekognition per video viene inviato a un argomento Amazon SNS. Questa procedura consente di creare l'argomento Amazon SNS e il ruolo di servizio IAM che offre l'accesso a Video Amazon Rekognition ai tuoi argomenti Amazon SNS. Per ulteriori informazioni, consulta Chiamata delle operazioni Video Amazon Rekognition.

Come creare un argomento Amazon SNS
  1. Se non l'hai ancora fatto, crea un ruolo di servizio IAM per fornire a Video Amazon Rekognition l'accesso ai tuoi argomenti Amazon SNS. Prendi nota del nome della risorsa Amazon (ARN). Per ulteriori informazioni, consulta Accesso a più argomenti Amazon SNS.

  2. Creare un argomento Amazon SNS utilizzando la console Amazon SNS. È sufficiente specificare il nome dell'argomento. Anteponi il nome dell'argomento con. AmazonRekognition Prendere nota dell'ARN dell'argomento.

Creazione della funzione Lambda

Puoi creare la funzione Lambda tramite la AWS Management Console. Quindi, puoi utilizzare un progetto AWS Toolkit for Eclipse per caricare il pacchetto della funzione Lambda su AWS Lambda. È inoltre possibile creare la funzione Lambda con AWS Toolkit for Eclipse. Per ulteriori informazioni, consulta Esercitazione: Come creare, caricare e chiamare una funzione Lambda AWS.

Creazione della funzione Lambda
  1. Accedi alla Console di gestione AWS e apri la console di AWS Lambda all'indirizzo https://console.aws.amazon.com/lambda/.

  2. Selezionare Create function (Crea funzione).

  3. Scegli Author from scratch (Crea da zero).

  4. In Function name (Nome funzione), immettere un nome per la funzione.

  5. In Runtime, selezionare Java 8.

  6. Scegliere Choose or create an execution role (Scegliere o creare un ruolo di esecuzione).

  7. In Execution role (Ruolo di esecuzione), scegliere Create a new role with basic Lambda permissions (Crea un nuovo ruolo con le autorizzazioni Lambda di base).

  8. Annotare il nome del nuovo ruolo visualizzato nella parte inferiore della sezione Basic Information (Informazioni di base).

  9. Scegli Crea funzione.

Configura la funzione Lambda

Una volta creata la funzione Lambda, la configuri per essere attivata dall'argomento Amazon SNS creato in Creazione dell'argomento SNS. Devi inoltre adeguare i requisiti di memoria e il periodo di timeout per la funzione Lambda.

Per configurare la funzione Lambda
  1. In Function Code (Codice funzione), digita com.amazonaws.lambda.demo.JobCompletionHandler per Handler (Gestore).

  2. Per Basic settings (Impostazioni di base), scegliere Edit (Modifica). Viene visualizzata la finestra di dialogo Edit basic settings (Modifica impostazioni di base).

    1. Scegliere 1024 per Memory (Memoria).

    2. Scegliere 10 secondi per Timeout.

    3. Scegli Save (Salva).

  3. In Designer, scegliere + Add trigger (+ Aggiungi trigger). Viene visualizzata la finestra di dialogo Add trigger (Aggiungi trigger).

  4. In Trigger configuration (Configurazione trigger, scegliere SNS.

    In Argomento SNS, scegliere l'argomento Amazon SNS creato in Creazione dell'argomento SNS.

  5. Scegli Enable trigger (Abilita trigger).

  6. Per aggiungere il trigger, scegli Add (Aggiungi).

  7. Selezionare Salva per salvare la funzione Lambda.

Configurazione del ruolo IAM Lambda

Per chiamare le operazioni di Amazon Rekognition Video, aggiungi la policy gestita di AmazonRekognitionFullAccessAWS al ruolo IAM Lambda. Le operazioni di avvio, ad esempio StartLabelDetection, richiedono anche le autorizzazioni di passaggio per il ruolo di servizio IAM utilizzato da Amazon Rekognition Video per accedere all'argomento Amazon SNS.

Per configurare il ruolo
  1. Accedi AWS Management Console e apri la console IAM all'indirizzo. https://console.aws.amazon.com/iam/

  2. Nel riquadro di navigazione, seleziona Ruoli.

  3. Nell'elenco, scegliere il nome del ruolo di esecuzione creato in Creazione della funzione Lambda.

  4. Scegli la scheda Autorizzazioni.

  5. Scegli Collega policy.

  6. Scegli AmazonRekognitionFullAccessdall'elenco delle politiche.

  7. Scegli Collega policy.

  8. Scegliere nuovamente il ruolo di esecuzione.

  9. Scegliere Add inline policy (Aggiungi policy inline).

  10. Scegliere la scheda JSON.

  11. Sostituisci la policy esistente con la seguente policy. Sostituisci servicerole con il ruolo del servizio IAM; creato in Creazione dell'argomento SNS.

  12. Scegli Verifica policy.

  13. In Name* (Nome) digita un nome per la policy.

  14. Scegliere Create Policy (Crea policy).

Crea il progetto AWS Toolkit for Eclipse Lambda

Quando viene attivata la funzione Lambda, il codice seguente ottiene lo stato di completamento dall'argomento Amazon SNS e le chiamate GetLabelDetectionper ottenere i risultati dell'analisi. Un numero di etichette rilevate e un elenco di etichette rilevate viene scritto in un registro. CloudWatch La funzione Lambda deve archiviare i risultati dell'analisi video per un utilizzo successivo.

Per creare il progetto AWS Toolkit for Eclipse Lambda
  1. Crea un progetto AWS Toolkit for EclipseAWS Lambda.

    • In Project name: (Nome progetto), digita un nome per il progetto a tua scelta.

    • Per Nome classe:, inserisci JobCompletionHandler.

    • Per Input type: (Tipo input:), seleziona SNS Event (Evento SNS).

    • Lascia gli altri campi invariati.

  2. In Eclipse Project Explorer, apri il metodo di gestione Lambda generato JobCompletionHandler (.java) e sostituisci il contenuto con quanto segue:

    //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); } }
  3. I namespace Rekognition non sono stati risolti. Per risolvere il problema:

    • Ferma i tuo mouse sulla porzione sottolineata della riga import com.amazonaws.services.rekognition.AmazonRekognition;.

    • Scegli Fix project set up... (Correggi configurazione progetto...).

    • Scegli la versione più recente dell'archivio Amazon Rekognition.

    • Fai clic su OK per aggiungere l'archivio al progetto.

  4. Salvare il file.

  5. Fai clic con il pulsante destro del mouse nella finestra del codice Eclipse, scegli AWS Lambda, quindi scegli Upload function to AWS Lambda (Carica funzione su AWS Lambda).

  6. Nella pagina Select Target Lambda Function (Seleziona funzione Lambda di destinazione), scegli la regione AWS da utilizzare.

  7. Seleziona Choose an existing lambda function (Scegli una funzione Lambda esistente) e scegli al funzione Lambda che hai creato in Creazione della funzione Lambda.

  8. Scegli Next (Successivo). Viene visualizzata la finestra di dialogo Function Configuration (Configurazione funzione).

  9. In IAM Role (Ruolo IAM), selezionare il ruolo IAM creato in Creazione della funzione Lambda.

  10. Seleziona Fine e la funzione Lambda viene caricata su AWS.

Test della funzione Lambda

Utilizzate il AWS CLI comando seguente per testare la funzione Lambda avviando l'analisi del rilevamento delle etichette di un video. Una volta completata l'analisi, la funzione Lambda viene attivata. Verifica che l'analisi sia riuscita controllando i registri di CloudWatch Logs.

Verifica della funzione Lambda
  1. Carica un file video in formato MOV o MPEG-4 nel bucket S3. A scopo di verifica, carica un video non più lungo di 30 secondi.

    Per le istruzioni, consulta Caricamento di oggetti in Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service.

  2. Eseguite il AWS CLI comando seguente per iniziare a rilevare le etichette in un video.

    aws rekognition start-label-detection --video "S3Object={Bucket="bucketname",Name="videofile"}" \ --notification-channel "SNSTopicArn=TopicARN,RoleArn=RoleARN" \ --region Region

    Aggiorna i seguenti valori:

    • Modifica bucketname e videofile nel nome del bucket Amazon S3 e nel nome del file video in cui desideri rilevare le etichette.

    • Cambia TopicARN l'ARN dell'argomento Amazon SNS creato in Creazione dell'argomento SNS.

    • Cambia RoleARN l'ARN del ruolo IAM creato in Creazione dell'argomento SNS.

    • Passa Region alla AWS regione che stai utilizzando.

  3. Prendi nota del valore di JobId nella risposta. La risposta si presenta in maniera analoga all'esempio di struttura JSON riportato di seguito.

    { "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn" }
  4. Aprire la console https://console.aws.amazon.com/cloudwatch/.

  5. Quando l'analisi viene completata, appare una voce di registro per la funzione Lambda nel Gruppo di log.

  6. Scegli la funzione Lambda per vedere i flussi di log.

  7. Scegli l'ultimo flusso di log per visualizzare le voci di registro effettuate dalla funzione Lambda. Se l'operazione è riuscita, è simile all'output seguente, che mostra i dettagli dell'operazione di riconoscimento video, tra cui l'ID del lavoro, il tipo di operazione "StartLabelDetection«e un elenco di categorie di etichette rilevate come Bottle, Clothing, Crowd e Food:

    Uscita di registro che mostra i dettagli di un'operazione di riconoscimento video.

    Il valore di Job id (Id lavoro) deve corrispondere al valore di JobId annotato al passaggio 3.