

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
<a name="stored-video-lambda"></a>

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

**Nota**  
Questo tutorial utilizza l' AWS SDK for Java 1.x. [Per un tutorial su Rekognition e l'SDK for AWS Java versione 2, consulta l'archivio degli esempi di Documentation SDK.AWS GitHub ](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases/video_analyzer_application)

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 [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html)per 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.](https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html)

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 [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html)per 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.](http://docs.aws.amazon.com/it_it/rekognition/latest/dg/images/VideoRekognitionLambda.png)


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](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html). 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](url-ddb-dev;WorkingWithDynamo.html). 

Le procedure seguenti mostrano come:
+ Creare l'argomento Amazon SNS e impostare le autorizzazioni.
+ Crea la funzione Lambda utilizzando Console di gestione AWS e sottoscrivila all'argomento Amazon SNS.
+ Configurare la funzione Lambda tramite la Console di gestione AWS.
+ 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
<a name="lambda-stored-video-prerequisites"></a>

Questa esercitazione presuppone che tu sia esperto di AWS Toolkit for Eclipse. Per ulteriori informazioni, consulta [ AWS Toolkit for Eclipse](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/welcome.html).

## Creazione dell'argomento SNS
<a name="lambda-create-sns-topic"></a>

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](api-video.md).

**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](api-video-roles.md#api-video-roles-all-topics).

1. [Creare un argomento Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) utilizzando la [console Amazon SNS](https://console.aws.amazon.com/sns/v2/home). È sufficiente specificare il nome dell'argomento. Anteponi il nome dell'argomento con. *AmazonRekognition* Prendere nota dell'ARN dell'argomento. 

## Creazione della funzione Lambda
<a name="lambda-create-function"></a>

Puoi creare la funzione Lambda tramite la Console di gestione AWS. 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](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html).

**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/](https://console.aws.amazon.com/lambda/).

1. Selezionare **Create function (Crea funzione)**.

1. Scegli **Author from scratch** (Crea da zero).

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

1. In **Runtime**, selezionare **Java 8**. 

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

1. 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)**. 

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

1. Scegli **Crea funzione**.

## Configura la funzione Lambda
<a name="lambda-configure-function"></a>

Una volta creata la funzione Lambda, la configuri per essere attivata dall'argomento Amazon SNS creato in [Creazione dell'argomento SNS](#lambda-create-sns-topic). 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)**.

1. 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)**.

   1. Scegliere **10** secondi per **Timeout**.

   1. Scegli **Save** (Salva).

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

1. In **Trigger configuration (Configurazione trigger**, scegliere **SNS**.

   In **Argomento SNS**, scegliere l'argomento Amazon SNS creato in [Creazione dell'argomento SNS](#lambda-create-sns-topic).

1. Scegli **Enable trigger** (Abilita trigger).

1. Per aggiungere il trigger, scegli **Add** (Aggiungi).

1. Selezionare **Salva** per salvare la funzione Lambda.

## Configurazione del ruolo IAM Lambda
<a name="configure-lambda-role"></a>

Per chiamare le operazioni di Amazon Rekognition Video, aggiungi la policy gestita di *AmazonRekognitionFullAccess*AWS al ruolo IAM Lambda. Le operazioni di avvio, ad esempio [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html), 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 Console di gestione AWS e apri la console IAM all'indirizzo. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. Nel riquadro di navigazione, seleziona **Ruoli**. 

1. Nell'elenco, scegliere il nome del ruolo di esecuzione creato in [Creazione della funzione Lambda](#lambda-create-function).

1. Scegli la scheda **Autorizzazioni**.

1. Scegli **Collega policy**.

1. Scegli *AmazonRekognitionFullAccess*dall'elenco delle politiche.

1. Scegli **Collega policy**.

1. Scegliere nuovamente il ruolo di esecuzione. 

1. Scegliere **Add inline policy (Aggiungi policy inline)**.

1. Scegliere la scheda **JSON**.

1. Sostituisci la policy esistente con la seguente policy. Sostituisci `servicerole` con il ruolo del servizio IAM; creato in [Creazione dell'argomento SNS](#lambda-create-sns-topic).

1. Scegliere **Esamina policy**.

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

1. Scegli **Crea policy**.

## Crea il progetto AWS Toolkit for Eclipse Lambda
<a name="lambda-create-code"></a>

Quando viene attivata la funzione Lambda, il codice seguente ottiene lo stato di completamento dall'argomento Amazon SNS e le chiamate [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html)per 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](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html#lambda-tutorial-create-handler-class). 
   + 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. 

1. 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);
   
      }
   
   
   }
   ```

1. 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.

1. Salvare il file.

1. 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). 

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

1. Seleziona **Choose an existing lambda function** (Scegli una funzione Lambda esistente) e scegli al funzione Lambda che hai creato in [Creazione della funzione Lambda](#lambda-create-function). 

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

1. In **IAM Role (Ruolo IAM)**, selezionare il ruolo IAM creato in [Creazione della funzione Lambda](#lambda-create-function).

1. Seleziona **Fine** e la funzione Lambda viene caricata su AWS.

## Test della funzione Lambda
<a name="lambda-test-function"></a>

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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UploadingObjectsintoAmazonS3.html) nella *Guida per l'utente di Amazon Simple Storage Service*.

1. 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](#lambda-create-sns-topic).
   + Cambia `RoleARN` l'ARN del ruolo IAM creato in [Creazione dell'argomento SNS](#lambda-create-sns-topic).
   + Passa `Region` alla AWS regione che stai utilizzando. ``

1. 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"
   }
   ```

1. Aprire la console [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/). 

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

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

1. 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.](http://docs.aws.amazon.com/it_it/rekognition/latest/dg/images/log.png)

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