

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

# Utilizzo delle operazioni di analisi video archiviate
<a name="video"></a>

Video Amazon Rekognition è un'API che puoi utilizzare per analizzare i video. Con Video Amazon Rekognition, puoi rilevare etichette, volti, persone, celebrità e contenuti per adulti (espliciti e spinti) nei video archiviati in un bucket Amazon Simple Storage Service (Amazon S3). Puoi utilizzare Amazon Rekognition Video in categorie come quella di pubblica sicurezza. media/entertainment In passato, la ricerca di oggetti e persone all'interno dei video avrebbe richiesto molte ore di visualizzazione con rischio di errore da parte di un essere umano. Video Amazon Rekognition automatizza il rilevamento e la ricorrenza di elementi in un video.

Questa sezione illustra i tipi di analisi che Video Amazon Rekognition può eseguire, una panoramica sull'API ed esempi di utilizzo di Video Amazon Rekognition.

**Topics**
+ [Tipi di analisi](#video-recognition-types)
+ [Panoramica dell'API Video Amazon Rekognition](#video-api-overview)
+ [Chiamata delle operazioni Video Amazon Rekognition](api-video.md)
+ [Configurazione di Video Amazon Rekognition](api-video-roles.md)
+ [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md)
+ [Analisi di un video con AWS Command Line Interface](video-cli-commands.md)
+ [Riferimento: Notifica dei risultati dell'analisi video](video-notification-payload.md)
+ [Risoluzione dei problemi di Video Amazon Rekognition](video-troubleshooting.md)

## Tipi di analisi
<a name="video-recognition-types"></a>

Video Amazon Rekognition ti consente di analizzare i video per ottenere le informazioni seguenti:
+ [Segmenti video](segments.md)
+ [Etichette](labels.md)
+ [Contenuti per adulti espliciti e spinti](moderation.md)
+ [Text (Testo)](text-detection.md)
+ [Volti celebri](celebrities.md)
+ [Volti](faces.md)
+ [Persone](persons.md)

Per ulteriori informazioni, consulta [Come funziona Amazon Rekognition](how-it-works.md).

## Panoramica dell'API Video Amazon Rekognition
<a name="video-api-overview"></a>

Video Amazon Rekognition elabora un video archiviato in un bucket Amazon S3. Il modello di progettazione è costituito da una serie asincrona di operazioni. L'analisi di un video viene avviata chiamando un'operazione `Start` come ad esempio [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html). Lo stato di completamento della richiesta è pubblicato in un argomento Amazon Simple Notification Service (Amazon SNS). Per conoscere lo stato di completamento dell'argomento Amazon SNS, puoi utilizzare una coda o una funzione di Amazon Simple Queue Service (Amazon SQS). AWS Lambda Dopo aver acquisito lo stato di completamento, chiama un'operazione `Get`, come ad esempio [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html), per ottenere i risultati della richiesta. 

Il seguente diagramma mostra il processo di rilevamento delle etichette in un video archiviato in un bucket Amazon S3. Nel diagramma, una coda Amazon SQS ottiene lo stato di completamento dall'argomento Amazon SNS. In alternativa, puoi usare una funzione. AWS Lambda 

![\[Diagramma di flusso che illustra le fasi dell'analisi video utilizzando Amazon Rekognition Video, Amazon SNS e Amazon SQS, con componenti come il processo e lo stato di StartLabelDetection completamento della GetLabelDetection pubblicazione nelle rispettive code.\]](http://docs.aws.amazon.com/it_it/rekognition/latest/dg/images/VideoRekognition.png)


Il processo è lo stesso delle altre operazioni Video Amazon Rekognition. La tabella seguente elenca le operazioni `Start` e `Get` per ciascuna delle operazioni Amazon Rekognition non basate su storage.


| Rilevamento | Operazione Start | Operazione Get | 
| --- | --- | --- | 
|  Segmenti video  |  [StartSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartSegmentDetection.html)  |  [GetSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetSegmentDetection.html)  | 
|  Etichette  |  [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html)  |  [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html)  | 
|  Contenuti per adulti espliciti o spinti  |  [StartContentModeration](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartContentModeration.html)  |  [GetContentModeration](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetContentModeration.html)  | 
|  Testo  |  [StartTextDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartTextDetection.html)  |  [GetTextDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetTextDetection.html)  | 
|  Volti celebri  |  [StartCelebrityRecognition](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartCelebrityRecognition.html)  |  [GetCelebrityRecognition](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetCelebrityRecognition.html)  | 
|  Volti  |  [StartFaceDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartFaceDetection.html)  |  [GetFaceDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetFaceDetection.html)  | 
|  Persone  |  [StartPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartPersonTracking.html)  |  [GetPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetPersonTracking.html)  | 

Per le operazioni `Get` diverse da `GetCelebrityRecognition`, Video Amazon Rekognition restituisce informazioni di monitoraggio relative al momento in cui le entità vengono rilevate nel video di input.

Per ulteriori informazioni sull'uso dell'API Video Amazon Rekognition, consulta [Chiamata delle operazioni Video Amazon Rekognition](api-video.md). Per un esempio in cui l'analisi video viene eseguita tramite Amazon SQS, consulta [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md). [Analisi di un video con AWS Command Line Interface](video-cli-commands.md)Per esempi, consulta. AWS CLI 

### Storage e formati video
<a name="video-storage-formats"></a>

Le operazioni di Amazon Rekognition possono analizzare i video archiviati in bucket Amazon S3. Per un elenco di tutti i limiti alle operazioni di analisi delle immagini, consultare[Linee guida e quote in Amazon Rekognition](limits.md).

Il video deve essere codificato attraverso il codec H.264. I formati di file supportati sono MPEG-4 e MOV. 

Un codec è un software o hardware che comprime i dati per una distribuzione più rapida e decomprime i dati ricevuti nella forma originaria. Il codec H.264 viene utilizzato in genere per la registrazione, la compressione e la distribuzione dei contenuti video. Un formato di file video può contenere uno o più codec. Se il tuo file video di formato MOV o MPEG-4 non funziona con Video Amazon Rekognition, verifica che il codec utilizzato per codificare il video sia H.264. 

Qualsiasi API Video Amazon Rekognition che analizza i dati audio supporta solo codec audio AAC.

La dimensione massima di un file video archiviato è 10 GB.

### Ricerca di persone
<a name="video-searching-persons-overview"></a>

Puoi utilizzare i metadata facciali archiviati in una raccolta per cercare persone in un video. Ad esempio, puoi eseguire la ricerca di una persona specifica o di più persone in un video di archiviato. I metadata facciali delle immagini di origine vengono archiviati in una raccolta tramite l'operazione [IndexFaces](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_IndexFaces.html). Puoi quindi utilizzare [StartFaceSearch](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartFaceSearch.html) per avviare la ricerca asincrona dei volti nella raccolta. Puoi utilizzare [GetFaceSearch](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GeFaceSearch.html) per ottenere i risultati della ricerca. Per ulteriori informazioni, consulta [Ricerca di volti in video archiviati](procedure-person-search-videos.md). La ricerca di persone è un esempio di operazione di Amazon Rekognition basata su storage. Per ulteriori informazioni, consulta [Operazioni API basate su storage](how-it-works-storage-non-storage.md#how-it-works-storage-based).

Puoi inoltre cercare persone in un video in streaming. Per ulteriori informazioni, consulta [Utilizzo degli eventi video in streaming](streaming-video.md).

# Chiamata delle operazioni Video Amazon Rekognition
<a name="api-video"></a>

Video Amazon Rekognition è un'API asincrona che puoi utilizzare per analizzare i video archiviati in un bucket Amazon Simple Storage Service (Amazon S3). Puoi avviare l'analisi di un video chiamando un'operazione Amazon Rekognition `Start` Video, ad esempio. [StartPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartPersonTracking.html) Video Amazon Rekognition pubblica il risultato della richiesta di analisi in un argomento Amazon Simple Notification Service (Amazon SNS). Puoi utilizzare una coda Amazon Simple Queue Service (Amazon SQS) o AWS Lambda una funzione per ottenere lo stato di completamento della richiesta di analisi video dall'argomento Amazon SNS. Infine, puoi ottenere i risultati della richiesta di analisi video chiamando un'operazione di `Get` Amazon Rekognition, ad esempio. [GetPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetPersonTracking.html) 

Le informazioni incluse nelle sezioni seguenti utilizzano le operazioni di rilevamento delle etichette per mostrare come Video Amazon Rekognition rileva etichette (oggetti, eventi, concetti e attività) in un video archiviato in un bucket Amazon S3. Lo stesso approccio funziona per le altre operazioni di Amazon Rekognition Video, ad esempio e. [StartFaceDetection[StartPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartPersonTracking.html)](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartFaceDetection.html) L'esempio [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md) mostra come analizzare un video utilizzando una coda Amazon SQS per ottenere lo stato di completamento dall'argomento Amazon SNS. Viene utilizzato come base anche per altri esempi di Video Amazon Rekognition quali [Rilevamento dei movimenti delle persone](persons.md). AWS CLI [Analisi di un video con AWS Command Line Interface](video-cli-commands.md)Per esempi, vedi.

**Topics**
+ [Avvio di analisi video](#api-video-start)
+ [Ottenere lo stato di completamento di una richiesta di analisi Video Amazon Rekognition](#api-video-get-status)
+ [Ottenere i risultati dell'analisi di Video Amazon Rekognition](#api-video-get)

## Avvio di analisi video
<a name="api-video-start"></a>

Puoi avviare una richiesta di rilevamento delle etichette Amazon Rekognition Video chiamando. [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html) Di seguito è riportato un esempio di una richiesta JSON passata da `StartLabelDetection`.

```
{
    "Video": {
        "S3Object": {
            "Bucket": "amzn-s3-demo-bucket",
            "Name": "video.mp4"
        }
    },
    "ClientRequestToken": "LabelDetectionToken",
    "MinConfidence": 50,
    "NotificationChannel": {
        "SNSTopicArn": "arn:aws:sns:us-east-1:nnnnnnnnnn:topic",
        "RoleArn": "arn:aws:iam::nnnnnnnnnn:role/roleopic"
    },
    "JobTag": "DetectingLabels"
}
```

Il parametro di input `Video` fornisce il nome del file video e il bucket Amazon S3 da cui recuperarlo. `NotificationChannel` contiene il nome della risorsa Amazon (ARN) dell'argomento Amazon SNS che viene notificato da Video Amazon Rekognition al termine della richiesta di analisi video. L'argomento Amazon SNS deve trovarsi nella stessa regione AWS dell'endpoint Video Amazon Rekognition che stai chiamando. `NotificationChannel` contiene inoltre l'ARN relativo a un ruolo che consente a Video Amazon Rekognition di pubblicare nell'argomento Amazon SNS. Puoi fornire autorizzazioni per la pubblicazione di Amazon Rekognition ai tuoi argomenti creando un ruolo del servizio IAM. Per ulteriori informazioni, consulta [Configurazione di Video Amazon Rekognition](api-video-roles.md).

Puoi inoltre specificare un parametro di input opzionale, `JobTag`, che ti consente di identificare il processo in stato di completamento pubblicato sull'argomento Amazon SNS. 

Per evitare la duplicazione accidentale dei processi di analisi, puoi facoltativamente fornire un token idempotente, `ClientRequestToken`. Se specifichi un valore per `ClientRequestToken`, l'operazione `Start` restituisce lo stesso `JobId` per più chiamate identiche dell'operazione start, ad esempio `StartLabelDetection`. Un token `ClientRequestToken` ha un ciclo di vita di 7 giorni. Dopo 7 giorni, puoi riutilizzarlo. Se riutilizzi il token durante il suo ciclo di vita, si verifica quanto segue: 
+ Se riutilizzi il token con la stessa operazione `Start` e gli stessi parametri di input, viene restituito lo stesso `JobId`. Il processo non viene rieseguito e Video Amazon Rekognition non invia uno stato di completamento all'argomento Amazon SNS registrato.
+ Se riutilizzi il token con la stessa operazione `Start` e un parametro di input secondario viene modificato, viene sollevata un'eccezione `IdempotentParameterMismatchException` (codice di stato HTTP: 400).
+ Non riutilizzare un token con operazioni `Start` diverse poiché otterrai risultati imprevedibili da Amazon Rekognition.

La risposta all'operazione `StartLabelDetection` è un identificatore del processo (`JobId`). Utilizza `JobId` per tenere traccia delle richieste e ottenere i risultati dell'analisi dopo che Video Amazon Rekognition ha pubblicato lo stato di completamento nell'argomento Amazon SNS. Esempio:

```
{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}
```

Se avvii troppi processi simultaneamente, le chiamate a `StartLabelDetection` sollevano un'eccezione `LimitExceededException` (codice di stato HTTP: 400) finché il numero di processi simultanei in esecuzione è inferiore al limite di servizio Amazon Rekognition. 

Se riscontri che vengono sollevate eccezioni `LimitExceededException` con picchi di attività, potresti utilizzare una coda Amazon SQS per gestire le richieste in arrivo. Contatta l' AWS assistenza se scopri che il numero medio di richieste simultanee non può essere gestito da una coda Amazon SQS e continui a ricevere eccezioni. `LimitExceededException` 

## Ottenere lo stato di completamento di una richiesta di analisi Video Amazon Rekognition
<a name="api-video-get-status"></a>

Video Amazon Rekognition invia una notifica di completamento dell'analisi all'argomento Amazon SNS registrato. La notifica include l'identificatore del processo e lo stato di completamento dell'operazione in una stringa JSON. Una richiesta di analisi video corretta presenta uno stato `SUCCEEDED`. Ad esempio, il risultato seguente mostra l'elaborazione corretta di un processo di rilevamento delle etichette.

```
{
    "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1nnnnnnnnnnnn",
    "Status": "SUCCEEDED",
    "API": "StartLabelDetection",
    "JobTag": "DetectingLabels",
    "Timestamp": 1510865364756,
    "Video": {
        "S3ObjectName": "video.mp4",
        "S3Bucket": "amzn-s3-demo-bucket"
    }
}
```

Per ulteriori informazioni, consulta [Riferimento: Notifica dei risultati dell'analisi video](video-notification-payload.md).

Per ottenere le informazioni sullo stato pubblicate nell'argomento Amazon SNS da Video Amazon Rekognition utilizza una delle seguenti opzioni:
+ **AWS Lambda** - Puoi sottoscrivere una funzione AWS Lambda scritta in un argomento Amazon SNS. La funzione viene chiamata quando Amazon Rekognition notifica all'argomento Amazon SNS che la richiesta è stata completata. Utilizza una funzione Lambda se desideri che il codice lato server elabori i risultati di una richiesta di analisi video. Ad esempio, potresti voler utilizzare il codice lato server per annotare il video o creare un report sui contenuti video prima di restituire le informazioni a un'applicazione client. Ti consigliamo inoltre di eseguire l'elaborazione lato server per i video di grandi dimensioni perché l'API Amazon Rekognition può restituire volumi di dati di grandi dimensioni. 
+ **Amazon Simple Queue Service**: È possibile effettuare la sottoscrizione di una coda Amazon SQS a un argomento SNS. Puoi quindi eseguire il polling della coda Amazon SQS per recuperare lo stato di completamento pubblicato da Amazon Rekognition al completamento di una richiesta di analisi video. Per ulteriori informazioni, consulta [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md). Utilizza una coda Amazon SQS se desideri chiamare le operazioni Video Amazon Rekognition solo da un'applicazione client. 

**Importante**  
Non è consigliabile ottenere lo stato di completamento della richiesta chiamando ripetutamente l'operazione `Get` di Video Amazon Rekognition. Ciò si verifica perché, se vengono effettuate troppe richieste, Video Amazon Rekognition sottopone a throttling l'operazione `Get`. Se si elaborano più video simultaneamente, è più semplice ed efficiente monitorare una coda SQS per la notifica di completamento anziché eseguire il polling di Video Amazon Rekognition per lo stato di ciascun video singolarmente.

## Ottenere i risultati dell'analisi di Video Amazon Rekognition
<a name="api-video-get"></a>

 Per ottenere i risultati di una richiesta di analisi video, accertati prima che lo stato di completamento recuperato dall'argomento Amazon SNS sia `SUCCEEDED`. Quindi chiama `GetLabelDetection` che trasferisce il valore `JobId` restituito da `StartLabelDetection`. La struttura JSON della richiesta è simile all'esempio riportato di seguito:

```
{
    "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3",
    "MaxResults": 10,
    "SortBy": "TIMESTAMP"
}
```

JobId è l'identificatore per l'operazione di analisi video. Poiché l'analisi video può generare grandi quantità di dati, utilizza `MaxResults` per specificare il numero massimo di risultati da restituire in una singola operazione Get. Il valore predefinito per `MaxResults` è 1000. Se si specifica un valore maggiore di 1.000, vengono restituiti al massimo 1.000 risultati. Se l'operazione non restituisce l'intera serie di risultati, viene restituito un token di paginazione per la pagina successiva nella risposta dell'operazione. Se disponi di un token di paginazione di una richiesta Get precedente, utilizzalo con `NextToken` per ottenere la pagina successiva di risultati.

**Nota**  
Amazon Rekognition conserva i risultati di un'operazione di analisi video per 7 giorni. Non potrai recuperare i risultati dell'analisi dopo questo periodo.

La struttura JSON della risposta dell'operazione `GetLabelDetection` è simile a quello riportato di seguito:

```
{
    "Labels": [
        {
            "Timestamp": 0,
            "Label": {
                "Instances": [],
                "Confidence": 60.51791763305664,
                "Parents": [],
                "Name": "Electronics"
            }
        },
        {
            "Timestamp": 0,
            "Label": {
                "Instances": [],
                "Confidence": 99.53411102294922,
                "Parents": [],
                "Name": "Human"
            }
        },
        {
            "Timestamp": 0,
            "Label": {
                "Instances": [
                    {
                        "BoundingBox": {
                            "Width": 0.11109819263219833,
                            "Top": 0.08098889887332916,
                            "Left": 0.8881205320358276,
                            "Height": 0.9073750972747803
                        },
                        "Confidence": 99.5831298828125
                    },
                    {
                        "BoundingBox": {
                            "Width": 0.1268676072359085,
                            "Top": 0.14018426835536957,
                            "Left": 0.0003282368124928324,
                            "Height": 0.7993982434272766
                        },
                        "Confidence": 99.46029663085938
                    }
                ],
                "Confidence": 99.53411102294922,
                "Parents": [],
                "Name": "Person"
            }
        },
        .
        .   
        .

        {
            "Timestamp": 166,
            "Label": {
                "Instances": [],
                "Confidence": 73.6471176147461,
                "Parents": [
                    {
                        "Name": "Clothing"
                    }
                ],
                "Name": "Sleeve"
            }
        }
        
    ],
    "LabelModelVersion": "2.0",
    "JobStatus": "SUCCEEDED",
    "VideoMetadata": {
        "Format": "QuickTime / MOV",
        "FrameRate": 23.976024627685547,
        "Codec": "h264",
        "DurationMillis": 5005,
        "FrameHeight": 674,
        "FrameWidth": 1280
    }
}
```

Le operazioni `GetLabelDetection` e `GetContentModeration` consentono di ordinare i risultati dell'analisi per data e ora o per nome dell'etichetta. I risultati possono essere aggregati per timestamp o segmenti video. 

Puoi ordinare i risultati per tempo di rilevamento (millisecondi dall'inizio del video) o in ordine alfabetico per entità rilevate (oggetto, volto, celebrità, etichetta di moderazione o persona). Per ordinare in base al tempo, imposta il valore del parametro di input `SortBy` su `TIMESTAMP`. Se non è specificato `SortBy`, il comportamento predefinito è quello di elencare per tempo. L'esempio precedente è stato ordinato per tempo. Per ordinare per entità, utilizza il parametro di input `SortBy` con il valore appropriato per l'operazione in esecuzione. Ad esempio, per ordinare per etichetta rilevata in una chiamata a `GetLabelDetection`, utilizza il valore `NAME`.

Per aggregare i risultati per timestamp, imposta il valore del parametro `AggregateBy` su `TIMESTAMPS`. Per aggregare per segmento video, impostate il valore di `AggregateBy` a `SEGMENTS`. La modalità di aggregazione `SEGMENTS` aggregherà le etichette nel tempo, fornendo al contempo `TIMESTAMPS` il timestamp in cui è stata rilevata un'etichetta, utilizzando un campionamento a 2 FPS e un output per fotogramma (Nota: questa frequenza di campionamento attuale è soggetta a modifiche, non si devono fare ipotesi sulla frequenza di campionamento attuale). Se nessun valore è specificato, il metodo di aggregazione predefinito è `TIMESTAMPS`. 

# Configurazione di Video Amazon Rekognition
<a name="api-video-roles"></a>

Per utilizzare l'API Video Amazon Rekognition con video archiviati, è necessario configurare l'utente e un ruolo di servizio IAM per accedere agli argomenti Amazon SNS. Inoltre, è necessario sottoscrivere una coda Amazon SQS ai tuoi argomenti Amazon SNS. 

**Nota**  
Se utilizzi queste istruzioni per configurare l'esempio [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md), non eseguire le fasi 3, 4, 5 e 6. L'esempio include il codice per creare e configurare l'argomento Amazon SNS e la coda Amazon SQS.

Gli esempi in questa sezione creano un nuovo argomento Amazon SNS utilizzando le istruzioni che forniscono a Video Amazon Rekognition l'accesso a più argomenti. Se desideri utilizzare un argomento Amazon SNS esistente, usa [Accesso a un argomento Amazon SNS esistente](#api-video-roles-single-topics) per la fase 3.<a name="configure-rekvid-procedure"></a>

**Per configurare Video Amazon Rekognition**

1. Configura un AWS account per accedere ad Amazon Rekognition Video. Per ulteriori informazioni, consulta [Fase 1: impostazione di un account AWS e creazione di un utente](setting-up.md).

1. Installa e configura l'SDK richiesto. AWS Per ulteriori informazioni, consulta [Passaggio 2: configura AWS CLI e AWS SDKs](setup-awscli-sdk.md). 

1. Per eseguire gli esempi di codice in questa guida per sviluppatori, assicurati che l'utente prescelto disponga dell'accesso programmatico. Per ulteriori informazioni, consulta [Concessione dell'accesso programmatico](sdk-programmatic-access.md).

   L'utente necessita inoltre almeno delle seguenti autorizzazioni:
   + SQSFullAccesso Amazon
   + AmazonRekognitionFullAccess
   + Amazon S3 FullAccess
   + SNSFullAccesso Amazon

   Se utilizzi IAM Identity Center per l'autenticazione, aggiungi le autorizzazioni al set di autorizzazioni per il tuo ruolo, altrimenti aggiungi le autorizzazioni al tuo ruolo IAM.

1. [Crea 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). Anteponi il nome dell'argomento con. *AmazonRekognition* Prendi nota del nome della risorsa Amazon (ARN) dell'argomento. Assicurati che l'argomento sia nella stessa regione dell'endpoint AWS che stai utilizzando.

1. [Crea una coda Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) usando la [console Amazon SQS](https://console.aws.amazon.com/sqs/). Prendere nota dell'ARN della coda.

1. [Sottoscrivi la coda all'argomento](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-subscribe-queue-sns-topic.html) creato nella fase 3.

1. [Concedere all'argomento Amazon SNS l'autorizzazione a inviare messaggi alla coda Amazon SQS](https://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html#SendMessageToSQS.sqs.permissions).

1. Crea un ruolo di servizio IAM per fornire a Video Amazon Rekognition l'accesso ai tuoi argomenti Amazon SNS. Prendere nota del valore nome della risorsa Amazon (ARN) del ruolo di servizio, Per ulteriori informazioni, consulta [Accesso a più argomenti Amazon SNS](#api-video-roles-all-topics).

1. Per garantire la sicurezza del tuo account, vorrai limitare l'ambito di accesso di Rekognition alle sole risorse che stai utilizzando. Questo può essere fatto associando una policy di attendibilità al ruolo di servizio IAM. Per informazioni su come fare, consulta [Prevenzione del problema "confused deputy" tra servizi](cross-service-confused-deputy-prevention.md).

1. [ Aggiungere la seguente policy inline](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console) all'utente creato nella fase 1: 

   Dai alla policy inline un nome a scelta.

1. Se utilizzi una AWS Key Management Service chiave gestita dal cliente per crittografare i video nel tuo bucket Amazon S3[,](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-policy-view) aggiungi le autorizzazioni alla chiave che consentono al ruolo di servizio che hai creato nel passaggio 7 di decrittografare i video. Il ruolo di servizio richiede almeno l'autorizzazione per le azioni `kms:GenerateDataKey` e `kms:Decrypt`. Esempio:

   ```
   {
       "Sid": "Decrypt only",
       "Effect": "Allow",
       "Principal": {
           "AWS": "arn:aws:iam::111122223333:user/user from step 1"
       },
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey"
       ],
       "Resource": "*"
   }
   ```

   Per maggiori informazioni, consulta la sezione [Il mio bucket Amazon S3 dispone di una crittografia predefinita che utilizza una chiave AWS KMS personalizzata. Come posso consentire agli utenti di scaricare e caricare file nel bucket?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-access-default-encryption/) e [protezione dei dati con la crittografia lato server con chiavi KMS archiviate in AWS Key Management Service (SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)). 

1. È ora possibile eseguire gli esempi in [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md) e in [Analisi di un video con AWS Command Line Interface](video-cli-commands.md).

## Accesso a più argomenti Amazon SNS
<a name="api-video-roles-all-topics"></a>

Usa un ruolo di servizio IAM per fornire a Video Amazon Rekognition l'accesso agli argomenti Amazon SNS creati. IAM fornisce il caso d'uso di *Rekognition* per la creazione di un ruolo di servizio Video Amazon Rekognition.

Puoi consentire ad Amazon Rekognition Video di accedere a più argomenti di Amazon SNS utilizzando la policy di autorizzazione e anteponendo ai nomi `AmazonRekognitionServiceRole` degli argomenti —ad esempio,. *AmazonRekognition*`AmazonRekognitionMyTopicName` 

**Per consentire ad Video Amazon Rekognition di accedere a più argomenti di Amazon SNS**

1. [Crea un ruolo di servizio IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html?icmpid=docs_iam_console). Per creare il ruolo di servizio IAM, utilizza le informazioni seguenti:

   1. Scegli **Rekognition** come nome del servizio.

   1. Scegli **Rekognition** come caso d'uso del ruolo del servizio. Dovresti vedere la politica delle autorizzazioni elencata. **AmazonRekognitionServiceRole** **AmazonRekognitionServiceRole**offre ad Amazon Rekognition Video l'accesso agli argomenti di Amazon SNS con il prefisso. *AmazonRekognition*

   1. Dai al ruolo del servizio un nome a scelta.

1. Prendere nota dell'ARN del ruolo del servizio. necessario per avviare le operazioni di analisi video.

## Accesso a un argomento Amazon SNS esistente
<a name="api-video-roles-single-topics"></a>

Puoi creare una policy di autorizzazione che consente a Video Amazon Rekognition l'accesso a un argomento Amazon SNS esistente.

**Per consentire ad Video Amazon Rekognition di accedere a argomenti di Amazon SNS esistenti**

1. [ Crea una nuova policy di autorizzazione con l'editor delle policy JSON IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor) e utilizza la policy seguente. Sostituisci `topicarn` con il nome della risorsa Amazon (ARN) dell'argomento Amazon SNS desiderato.

1. [Crea un ruolo di servizio IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html?icmpid=docs_iam_console) o aggiornane uno esistente. Per creare il ruolo di servizio IAM, utilizza le informazioni seguenti:

   1. Scegli **Rekognition** come nome del servizio.

   1. Scegli **Rekognition** come caso d'uso del ruolo del servizio.

   1. Collega la policy di autorizzazione creata nella fase 1.

1. Prendere nota dell'ARN del ruolo del servizio. necessario per avviare le operazioni di analisi video.

# Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)
<a name="video-analyzing-with-sqs"></a>

Questa procedura illustra come rilevare le etichette in un video tramite le operazioni di rilevamento delle etichette Video Amazon Rekognition, un video archiviato in un bucket Amazon S3 e un argomento Amazon SNS. La procedura, inoltre, illustra come utilizzare una coda Amazon SQS per ottenere lo stato di completamento dall'argomento Amazon SNS. Per ulteriori informazioni, consulta [Chiamata delle operazioni Video Amazon Rekognition](api-video.md). È consentito utilizzare una coda Amazon SQS. Ad esempio, puoi utilizzare una AWS Lambda funzione per ottenere lo stato di completamento. Per ulteriori informazioni, consulta [Invocazione di funzioni Lambda tramite le notifiche di Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html).

Il codice di esempio nella procedura illustra come effettuare le seguenti operazioni:

1. Creare l'argomento Amazon SNS.

1. Creazione di una coda Amazon SQS.

1. Concedere ad Video Amazon Rekognition l'autorizzazione per pubblicare lo stato di completamento di un'operazione di analisi video nell'argomento Amazon SNS.

1. Sottoscrizione della coda Amazon SQS all'argomento Amazon SNS.

1. Avvio della richiesta di analisi video chiamando [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html). 

1. Ottenimento dello stato di completamento dalla coda Amazon SQS. L'esempio rileva l'identificatore del processo (`JobId`) restituito in `StartLabelDetection` e ottiene solo i risultati relativi agli identificatori del processo corrispondenti letti dallo stato di completamento. Si tratta di una considerazione importante se altre applicazioni utilizzano la stessa coda e lo stesso argomento. Per semplicità, l'esempio elimina i processi che non corrispondono. Si può valutare di aggiungerli a una coda DLQ di Amazon SQS per ulteriori controlli.

1. Ottenimento e visualizzazione dei risultati di analisi video chiamando [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html).

## Prerequisiti
<a name="video-prerequisites"></a>

Il codice di esempio per questa procedura viene fornito in Java e Python. È necessario che sia installato l' AWS SDK appropriato. Per ulteriori informazioni, consulta [Nozioni di base su Amazon Rekognition](getting-started.md). L'account AWS utilizzato deve disporre di autorizzazioni di accesso all'API Amazon Rekognition. Per ulteriori informazioni, consulta la sezione [Operazioni definite da Amazon Rekognition](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions). 

**Per rilevare le etichette in un video**

1. Configura l'accesso utente ad Video Amazon Rekognition e configura l'accesso di Video Amazon Rekognition ad Amazon SNS. Per ulteriori informazioni, consulta [Configurazione di Video Amazon Rekognition](api-video-roles.md). Non è necessario eseguire le fasi 3, 4, 5 e 6 perché il codice di esempio crea e configura l'argomento Amazon SNS e la coda Amazon SQS. 

1. Carica un file video in formato MOV o MPEG-4 nel bucket Amazon 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. Utilizza i seguenti esempi di codice per rilevare le etichette in un video. 

------
#### [ Java ]

   Nella funzione `main`:
   + Sostituisci `roleArn` con l'ARN del ruolo di servizio IAM creato nella fase 7 di [Per configurare Video Amazon Rekognition](api-video-roles.md#configure-rekvid-procedure).
   + Sostituisci i valori di `amzn-s3-demo-bucket` e `video` con il nome del file video e del bucket specificati nella fase 2. 

   ```
   //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.samples;
   import com.amazonaws.auth.policy.Policy;
   import com.amazonaws.auth.policy.Condition;
   import com.amazonaws.auth.policy.Principal;
   import com.amazonaws.auth.policy.Resource;
   import com.amazonaws.auth.policy.Statement;
   import com.amazonaws.auth.policy.Statement.Effect;
   import com.amazonaws.auth.policy.actions.SQSActions;
   import com.amazonaws.services.rekognition.AmazonRekognition;
   import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder;
   import com.amazonaws.services.rekognition.model.CelebrityDetail;
   import com.amazonaws.services.rekognition.model.CelebrityRecognition;
   import com.amazonaws.services.rekognition.model.CelebrityRecognitionSortBy;
   import com.amazonaws.services.rekognition.model.ContentModerationDetection;
   import com.amazonaws.services.rekognition.model.ContentModerationSortBy;
   import com.amazonaws.services.rekognition.model.Face;
   import com.amazonaws.services.rekognition.model.FaceDetection;
   import com.amazonaws.services.rekognition.model.FaceMatch;
   import com.amazonaws.services.rekognition.model.FaceSearchSortBy;
   import com.amazonaws.services.rekognition.model.GetCelebrityRecognitionRequest;
   import com.amazonaws.services.rekognition.model.GetCelebrityRecognitionResult;
   import com.amazonaws.services.rekognition.model.GetContentModerationRequest;
   import com.amazonaws.services.rekognition.model.GetContentModerationResult;
   import com.amazonaws.services.rekognition.model.GetFaceDetectionRequest;
   import com.amazonaws.services.rekognition.model.GetFaceDetectionResult;
   import com.amazonaws.services.rekognition.model.GetFaceSearchRequest;
   import com.amazonaws.services.rekognition.model.GetFaceSearchResult;
   import com.amazonaws.services.rekognition.model.GetLabelDetectionRequest;
   import com.amazonaws.services.rekognition.model.GetLabelDetectionResult;
   import com.amazonaws.services.rekognition.model.GetPersonTrackingRequest;
   import com.amazonaws.services.rekognition.model.GetPersonTrackingResult;
   import com.amazonaws.services.rekognition.model.Instance;
   import com.amazonaws.services.rekognition.model.Label;
   import com.amazonaws.services.rekognition.model.LabelDetection;
   import com.amazonaws.services.rekognition.model.LabelDetectionSortBy;
   import com.amazonaws.services.rekognition.model.NotificationChannel;
   import com.amazonaws.services.rekognition.model.Parent;
   import com.amazonaws.services.rekognition.model.PersonDetection;
   import com.amazonaws.services.rekognition.model.PersonMatch;
   import com.amazonaws.services.rekognition.model.PersonTrackingSortBy;
   import com.amazonaws.services.rekognition.model.S3Object;
   import com.amazonaws.services.rekognition.model.StartCelebrityRecognitionRequest;
   import com.amazonaws.services.rekognition.model.StartCelebrityRecognitionResult;
   import com.amazonaws.services.rekognition.model.StartContentModerationRequest;
   import com.amazonaws.services.rekognition.model.StartContentModerationResult;
   import com.amazonaws.services.rekognition.model.StartFaceDetectionRequest;
   import com.amazonaws.services.rekognition.model.StartFaceDetectionResult;
   import com.amazonaws.services.rekognition.model.StartFaceSearchRequest;
   import com.amazonaws.services.rekognition.model.StartFaceSearchResult;
   import com.amazonaws.services.rekognition.model.StartLabelDetectionRequest;
   import com.amazonaws.services.rekognition.model.StartLabelDetectionResult;
   import com.amazonaws.services.rekognition.model.StartPersonTrackingRequest;
   import com.amazonaws.services.rekognition.model.StartPersonTrackingResult;
   import com.amazonaws.services.rekognition.model.Video;
   import com.amazonaws.services.rekognition.model.VideoMetadata;
   import com.amazonaws.services.sns.AmazonSNS;
   import com.amazonaws.services.sns.AmazonSNSClientBuilder;
   import com.amazonaws.services.sns.model.CreateTopicRequest;
   import com.amazonaws.services.sns.model.CreateTopicResult;
   import com.amazonaws.services.sqs.AmazonSQS;
   import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
   import com.amazonaws.services.sqs.model.CreateQueueRequest;
   import com.amazonaws.services.sqs.model.Message;
   import com.amazonaws.services.sqs.model.QueueAttributeName;
   import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
   import com.fasterxml.jackson.databind.JsonNode;
   import com.fasterxml.jackson.databind.ObjectMapper;
   import java.util.*;
   
   public class VideoDetect {
    
       
       private static String sqsQueueName=null;
       private static String snsTopicName=null;
       private static String snsTopicArn = null;
       private static String roleArn= null;
       private static String sqsQueueUrl = null;
       private static String sqsQueueArn = null;
       private static String startJobId = null;
       private static String bucket = null;
       private static String video = null; 
       private static AmazonSQS sqs=null;
       private static AmazonSNS sns=null;
       private static AmazonRekognition rek = null;
       
       private static NotificationChannel channel= new NotificationChannel()
               .withSNSTopicArn(snsTopicArn)
               .withRoleArn(roleArn);
   
   
       public static void main(String[] args) throws Exception {
           
           video = "";
           bucket = "";
           roleArn= "";
   
           sns = AmazonSNSClientBuilder.defaultClient();
           sqs= AmazonSQSClientBuilder.defaultClient();
           rek = AmazonRekognitionClientBuilder.defaultClient();
     
           CreateTopicandQueue();
           
           //=================================================
           
           StartLabelDetection(bucket, video);
   
           if (GetSQSMessageSuccess()==true)
           	GetLabelDetectionResults();
           
          //=================================================  
           
   
           DeleteTopicandQueue();
           System.out.println("Done!");
          
       }
   
       
       static boolean GetSQSMessageSuccess() throws Exception
       {
       	boolean success=false;
   
      
           System.out.println("Waiting for job: " + startJobId);
           //Poll queue for messages
           List<Message> messages=null;
           int dotLine=0;
           boolean jobFound=false;
   
           //loop until the job status is published. Ignore other messages in queue.
           do{
               messages = sqs.receiveMessage(sqsQueueUrl).getMessages();
               if (dotLine++<40){
                   System.out.print(".");
               }else{
                   System.out.println();
                   dotLine=0;
               }
   
               if (!messages.isEmpty()) {
                   //Loop through messages received.
                   for (Message message: messages) {
                       String notification = message.getBody();
   
                       // Get status and job id from notification.
                       ObjectMapper mapper = new ObjectMapper();
                       JsonNode jsonMessageTree = mapper.readTree(notification);
                       JsonNode messageBodyText = jsonMessageTree.get("Message");
                       ObjectMapper operationResultMapper = new ObjectMapper();
                       JsonNode jsonResultTree = operationResultMapper.readTree(messageBodyText.textValue());
                       JsonNode operationJobId = jsonResultTree.get("JobId");
                       JsonNode operationStatus = jsonResultTree.get("Status");
                       System.out.println("Job found was " + operationJobId);
                       // Found job. Get the results and display.
                       if(operationJobId.asText().equals(startJobId)){
                           jobFound=true;
                           System.out.println("Job id: " + operationJobId );
                           System.out.println("Status : " + operationStatus.toString());
                           if (operationStatus.asText().equals("SUCCEEDED")){
                           	success=true;
                           }
                           else{
                               System.out.println("Video analysis failed");
                           }
   
                           sqs.deleteMessage(sqsQueueUrl,message.getReceiptHandle());
                       }
   
                       else{
                           System.out.println("Job received was not job " +  startJobId);
                           //Delete unknown message. Consider moving message to dead letter queue
                           sqs.deleteMessage(sqsQueueUrl,message.getReceiptHandle());
                       }
                   }
               }
               else {
                   Thread.sleep(5000);
               }
           } while (!jobFound);
   
           System.out.println("Finished processing video");
           return success;
       }
     
   
       private static void StartLabelDetection(String bucket, String video) throws Exception{
       	
           NotificationChannel channel= new NotificationChannel()
                   .withSNSTopicArn(snsTopicArn)
                   .withRoleArn(roleArn);
   
   
           StartLabelDetectionRequest req = new StartLabelDetectionRequest()
                   .withVideo(new Video()
                           .withS3Object(new S3Object()
                                   .withBucket(bucket)
                                   .withName(video)))
                   .withMinConfidence(50F)
                   .withJobTag("DetectingLabels")
                   .withNotificationChannel(channel);
   
           StartLabelDetectionResult startLabelDetectionResult = rek.startLabelDetection(req);
           startJobId=startLabelDetectionResult.getJobId();
           
       }
     
       private static void GetLabelDetectionResults() throws Exception{
   
           int maxResults=10;
           String paginationToken=null;
           GetLabelDetectionResult labelDetectionResult=null;
   
           do {
               if (labelDetectionResult !=null){
                   paginationToken = labelDetectionResult.getNextToken();
               }
   
               GetLabelDetectionRequest labelDetectionRequest= new GetLabelDetectionRequest()
                       .withJobId(startJobId)
                       .withSortBy(LabelDetectionSortBy.TIMESTAMP)
                       .withMaxResults(maxResults)
                       .withNextToken(paginationToken);
   
   
               labelDetectionResult = rek.getLabelDetection(labelDetectionRequest);
   
               VideoMetadata videoMetaData=labelDetectionResult.getVideoMetadata();
   
               System.out.println("Format: " + videoMetaData.getFormat());
               System.out.println("Codec: " + videoMetaData.getCodec());
               System.out.println("Duration: " + videoMetaData.getDurationMillis());
               System.out.println("FrameRate: " + videoMetaData.getFrameRate());
   
   
               //Show labels, confidence and detection times
               List<LabelDetection> detectedLabels= labelDetectionResult.getLabels();
   
               for (LabelDetection detectedLabel: detectedLabels) {
                   long seconds=detectedLabel.getTimestamp();
                   Label label=detectedLabel.getLabel();
                   System.out.println("Millisecond: " + Long.toString(seconds) + " ");
                   
                   System.out.println("   Label:" + label.getName()); 
                   System.out.println("   Confidence:" + detectedLabel.getLabel().getConfidence().toString());
         
                   List<Instance> instances = label.getInstances();
                   System.out.println("   Instances of " + label.getName());
                   if (instances.isEmpty()) {
                       System.out.println("        " + "None");
                   } else {
                       for (Instance instance : instances) {
                           System.out.println("        Confidence: " + instance.getConfidence().toString());
                           System.out.println("        Bounding box: " + instance.getBoundingBox().toString());
                       }
                   }
                   System.out.println("   Parent labels for " + label.getName() + ":");
                   List<Parent> parents = label.getParents();
                   if (parents.isEmpty()) {
                       System.out.println("        None");
                   } else {
                       for (Parent parent : parents) {
                           System.out.println("        " + parent.getName());
                       }
                   }
                   System.out.println();
               }
           } while (labelDetectionResult !=null && labelDetectionResult.getNextToken() != null);
   
       } 
   
       // Creates an SNS topic and SQS queue. The queue is subscribed to the topic. 
       static void CreateTopicandQueue()
       {
           //create a new SNS topic
           snsTopicName="AmazonRekognitionTopic" + Long.toString(System.currentTimeMillis());
           CreateTopicRequest createTopicRequest = new CreateTopicRequest(snsTopicName);
           CreateTopicResult createTopicResult = sns.createTopic(createTopicRequest);
           snsTopicArn=createTopicResult.getTopicArn();
           
           //Create a new SQS Queue
           sqsQueueName="AmazonRekognitionQueue" + Long.toString(System.currentTimeMillis());
           final CreateQueueRequest createQueueRequest = new CreateQueueRequest(sqsQueueName);
           sqsQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();
           sqsQueueArn = sqs.getQueueAttributes(sqsQueueUrl, Arrays.asList("QueueArn")).getAttributes().get("QueueArn");
           
           //Subscribe SQS queue to SNS topic
           String sqsSubscriptionArn = sns.subscribe(snsTopicArn, "sqs", sqsQueueArn).getSubscriptionArn();
           
           // Authorize queue
             Policy policy = new Policy().withStatements(
                     new Statement(Effect.Allow)
                     .withPrincipals(Principal.AllUsers)
                     .withActions(SQSActions.SendMessage)
                     .withResources(new Resource(sqsQueueArn))
                     .withConditions(new Condition().withType("ArnEquals").withConditionKey("aws:SourceArn").withValues(snsTopicArn))
                     );
                     
   
             Map queueAttributes = new HashMap();
             queueAttributes.put(QueueAttributeName.Policy.toString(), policy.toJson());
             sqs.setQueueAttributes(new SetQueueAttributesRequest(sqsQueueUrl, queueAttributes)); 
           
   
            System.out.println("Topic arn: " + snsTopicArn);
            System.out.println("Queue arn: " + sqsQueueArn);
            System.out.println("Queue url: " + sqsQueueUrl);
            System.out.println("Queue sub arn: " + sqsSubscriptionArn );
        }
       static void DeleteTopicandQueue()
       {
           if (sqs !=null) {
               sqs.deleteQueue(sqsQueueUrl);
               System.out.println("SQS queue deleted");
           }
           
           if (sns!=null) {
               sns.deleteTopic(snsTopicArn);
               System.out.println("SNS topic deleted");
           }
       }
   }
   ```

------
#### [ Python ]

   Nella funzione `main`:
   + Sostituisci `roleArn` con l'ARN del ruolo di servizio IAM creato nella fase 7 di [Per configurare Video Amazon Rekognition](api-video-roles.md#configure-rekvid-procedure).
   + Sostituisci i valori di `amzn-s3-demo-bucket` e `video` con il nome del file video e del bucket specificati nella fase 2. 
   + Sostituisci il valore di `profile_name` nella riga che crea la sessione di Rekognition con il nome del tuo profilo di sviluppatore.
   + Puoi anche includere criteri di filtraggio nel parametro delle impostazioni. Ad esempio, è possibile utilizzare un `LabelsInclusionFilter` o a `LabelsExclusionFilter` accanto a un elenco di valori desiderati. Nel codice seguente, puoi decommentare la sezione `Features` e `Settings` e fornire i tuoi valori per limitare i risultati restituiti alle sole etichette che ti interessano.
   + Nella chiamata a`GetLabelDetection`, puoi fornire valori per gli argomenti `SortBy` e `AggregateBy`. Per ordinare in base al tempo, imposta il valore del parametro di input `SortBy` su `TIMESTAMP`. Per ordinare per entità, utilizza il parametro di input `SortBy` con il valore appropriato per l'operazione in esecuzione. Per aggregare i risultati per timestamp, imposta il valore del parametro `AggregateBy` su `TIMESTAMPS`. Per aggregare per segmento video, usa `SEGMENTS`. 

   Nell'esempio di codice, inserisci la seguente politica IAM tra le virgolette della riga. `policy = """""".format(sqsQueueArn, self.snsTopicArn)`

   ```
   ## 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
   import json
   import sys
   import time
   
   class VideoDetect:
   
       jobId = ''
   
       roleArn = ''
       bucket = ''
       video = ''
       startJobId = ''
   
       sqsQueueUrl = ''
       snsTopicArn = ''
       processType = ''
   
       def __init__(self, role, bucket, video, client, rek, sqs, sns):
           self.roleArn = role
           self.bucket = bucket
           self.video = video
           self.client = client
           self.rek = rek
           self.sqs = sqs
           self.sns = sns
   
       def GetSQSMessageSuccess(self):
   
           jobFound = False
           succeeded = False
   
           dotLine = 0
           while jobFound == False:
               sqsResponse = self.sqs.receive_message(QueueUrl=self.sqsQueueUrl, MessageAttributeNames=['ALL'],
                                                      MaxNumberOfMessages=10)
   
               if sqsResponse:
   
                   if 'Messages' not in sqsResponse:
                       if dotLine < 40:
                           print('.', end='')
                           dotLine = dotLine + 1
                       else:
                           print()
                           dotLine = 0
                       sys.stdout.flush()
                       time.sleep(5)
                       continue
   
                   for message in sqsResponse['Messages']:
                       notification = json.loads(message['Body'])
                       rekMessage = json.loads(notification['Message'])
                       print(rekMessage['JobId'])
                       print(rekMessage['Status'])
                       if rekMessage['JobId'] == self.startJobId:
                           print('Matching Job Found:' + rekMessage['JobId'])
                           jobFound = True
                           if (rekMessage['Status'] == 'SUCCEEDED'):
                               succeeded = True
   
                           self.sqs.delete_message(QueueUrl=self.sqsQueueUrl,
                                                   ReceiptHandle=message['ReceiptHandle'])
                       else:
                           print("Job didn't match:" +
                                 str(rekMessage['JobId']) + ' : ' + self.startJobId)
                       # Delete the unknown message. Consider sending to dead letter queue
                       self.sqs.delete_message(QueueUrl=self.sqsQueueUrl,
                                               ReceiptHandle=message['ReceiptHandle'])
   
           return succeeded
   
       def StartLabelDetection(self):
           response = self.rek.start_label_detection(Video={'S3Object': {'Bucket': self.bucket, 'Name': self.video}},
                                                     NotificationChannel={'RoleArn': self.roleArn,
                                                                          'SNSTopicArn': self.snsTopicArn},
                                                     MinConfidence=90,
                                                     # Filtration options, uncomment and add desired labels to filter returned labels
                                                     # Features=['GENERAL_LABELS'],
                                                     # Settings={
                                                     # 'GeneralLabels': {
                                                     # 'LabelInclusionFilters': ['Clothing']
                                                     # }}
                                                      )
   
           self.startJobId = response['JobId']
           print('Start Job Id: ' + self.startJobId)
   
       def GetLabelDetectionResults(self):
           maxResults = 10
           paginationToken = ''
           finished = False
   
           while finished == False:
               response = self.rek.get_label_detection(JobId=self.startJobId,
                                                       MaxResults=maxResults,
                                                       NextToken=paginationToken,
                                                       SortBy='TIMESTAMP',
                                                       AggregateBy="TIMESTAMPS")
   
               print('Codec: ' + response['VideoMetadata']['Codec'])
               print('Duration: ' + str(response['VideoMetadata']['DurationMillis']))
               print('Format: ' + response['VideoMetadata']['Format'])
               print('Frame rate: ' + str(response['VideoMetadata']['FrameRate']))
               print()
   
               for labelDetection in response['Labels']:
                   label = labelDetection['Label']
   
                   print("Timestamp: " + str(labelDetection['Timestamp']))
                   print("   Label: " + label['Name'])
                   print("   Confidence: " + str(label['Confidence']))
                   print("   Instances:")
                   for instance in label['Instances']:
                       print("      Confidence: " + str(instance['Confidence']))
                       print("      Bounding box")
                       print("        Top: " + str(instance['BoundingBox']['Top']))
                       print("        Left: " + str(instance['BoundingBox']['Left']))
                       print("        Width: " + str(instance['BoundingBox']['Width']))
                       print("        Height: " + str(instance['BoundingBox']['Height']))
                       print()
                   print()
   
                   print("Parents:")
                   for parent in label['Parents']:
                       print("   " + parent['Name'])
   
                   print("Aliases:")
                   for alias in label['Aliases']:
                       print("   " + alias['Name'])
   
                   print("Categories:")
                   for category in label['Categories']:
                       print("   " + category['Name'])
                   print("----------")
                   print()
   
                   if 'NextToken' in response:
                       paginationToken = response['NextToken']
                   else:
                       finished = True
   
       def CreateTopicandQueue(self):
   
           millis = str(int(round(time.time() * 1000)))
   
           # Create SNS topic
   
           snsTopicName = "AmazonRekognitionExample" + millis
   
           topicResponse = self.sns.create_topic(Name=snsTopicName)
           self.snsTopicArn = topicResponse['TopicArn']
   
           # create SQS queue
           sqsQueueName = "AmazonRekognitionQueue" + millis
           self.sqs.create_queue(QueueName=sqsQueueName)
           self.sqsQueueUrl = self.sqs.get_queue_url(QueueName=sqsQueueName)['QueueUrl']
   
           attribs = self.sqs.get_queue_attributes(QueueUrl=self.sqsQueueUrl,
                                                   AttributeNames=['QueueArn'])['Attributes']
   
           sqsQueueArn = attribs['QueueArn']
   
           # Subscribe SQS queue to SNS topic
           self.sns.subscribe(
               TopicArn=self.snsTopicArn,
               Protocol='sqs',
               Endpoint=sqsQueueArn)
   
           # Authorize SNS to write SQS queue 
           # Insert the policy from the documentation from 
           policy = """
           {{
              "Version":"2012-10-17",              
              "Statement":[
               {{
                   "Sid":"MyPolicy",
                   "Effect":"Allow",
                   "Principal" : {{"AWS" : "*"}},
                   "Action":"SQS:SendMessage",
                   "Resource": "{}",
                   "Condition":{{
                       "ArnEquals":{{
                           "aws:SourceArn": "{}"
                        }}
                   }}
               }}
               ]
           }}""".format(sqsQueueArn, self.snsTopicArn)
   
           response = self.sqs.set_queue_attributes(
               QueueUrl=self.sqsQueueUrl,
               Attributes={
                   'Policy': policy
               })
   
       def DeleteTopicandQueue(self):
           self.sqs.delete_queue(QueueUrl=self.sqsQueueUrl)
           self.sns.delete_topic(TopicArn=self.snsTopicArn)
   
   def main():
       
       roleArn = 'role-arn'
       bucket = 'bucket-name'
       video = 'video-name'
   
       session = boto3.Session(profile_name='profile-name')
       client = session.client('rekognition')
       rek = boto3.client('rekognition')
       sqs = boto3.client('sqs')
       sns = boto3.client('sns')
   
       analyzer = VideoDetect(roleArn, bucket, video, client, rek, sqs, sns)
       analyzer.CreateTopicandQueue()
   
       analyzer.StartLabelDetection()
       if analyzer.GetSQSMessageSuccess() == True:
           analyzer.GetLabelDetectionResults()
   
       analyzer.DeleteTopicandQueue()
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Node.Js ]

   Nel seguente codice di esempio:
   + Infine, sostituisci il valore di `REGION` con il nome della regione operativa associata al tuo account.
   + Sostituisci il valore di `amzn-s3-demo-bucket` con il nome del bucket Amazon S3 che contiene il file video.
   + Sostituisci il valore di `videoName` con il nome del file video nel tuo bucket Amazon S3.
   +  Sostituisci il valore di `profile_name` nella riga che crea la sessione di Rekognition con il nome del tuo profilo di sviluppatore. 
   + Sostituisci `roleArn` con l'ARN del ruolo di servizio IAM creato nella fase 7 di [Per configurare Video Amazon Rekognition](api-video-roles.md#configure-rekvid-procedure).

   ```
   import { CreateQueueCommand, GetQueueAttributesCommand, GetQueueUrlCommand, 
     SetQueueAttributesCommand, DeleteQueueCommand, ReceiveMessageCommand, DeleteMessageCommand } from  "@aws-sdk/client-sqs";
   import {CreateTopicCommand, SubscribeCommand, DeleteTopicCommand } from "@aws-sdk/client-sns";
   import  { SQSClient } from "@aws-sdk/client-sqs";
   import  { SNSClient } from "@aws-sdk/client-sns";
   import  { RekognitionClient, StartLabelDetectionCommand, GetLabelDetectionCommand } from "@aws-sdk/client-rekognition";
   import { stdout } from "process";
   import {fromIni} from '@aws-sdk/credential-providers';
   
   // Set the AWS Region.
   const REGION = "region-name"; //e.g. "us-east-1"
   const profileName = "profile-name"
   // Create SNS service object.
   const sqsClient = new SQSClient({ region: REGION, 
     credentials: fromIni({profile: profileName,}), });
   const snsClient = new SNSClient({ region: REGION, 
     credentials: fromIni({profile: profileName,}), });
   const rekClient = new RekognitionClient({region: REGION, 
     credentials: fromIni({profile: profileName,}), 
   });
   
   // Set bucket and video variables
   const bucket = "bucket-name";
   const videoName = "video-name";
   const roleArn = "role-arn"
   var startJobId = ""
   
   var ts = Date.now();
   const snsTopicName = "AmazonRekognitionExample" + ts;
   const snsTopicParams = {Name: snsTopicName}
   const sqsQueueName = "AmazonRekognitionQueue-" + ts;
   
   // Set the parameters
   const sqsParams = {
     QueueName: sqsQueueName, //SQS_QUEUE_URL
     Attributes: {
       DelaySeconds: "60", // Number of seconds delay.
       MessageRetentionPeriod: "86400", // Number of seconds delay.
     },
   };
   
   const createTopicandQueue = async () => {
     try {
       // Create SNS topic
       const topicResponse = await snsClient.send(new CreateTopicCommand(snsTopicParams));
       const topicArn = topicResponse.TopicArn
       console.log("Success", topicResponse);
       // Create SQS Queue
       const sqsResponse = await sqsClient.send(new CreateQueueCommand(sqsParams));
       console.log("Success", sqsResponse);
       const sqsQueueCommand = await sqsClient.send(new GetQueueUrlCommand({QueueName: sqsQueueName}))
       const sqsQueueUrl = sqsQueueCommand.QueueUrl
       const attribsResponse = await sqsClient.send(new GetQueueAttributesCommand({QueueUrl: sqsQueueUrl, AttributeNames: ['QueueArn']}))
       const attribs = attribsResponse.Attributes
       console.log(attribs)
       const queueArn = attribs.QueueArn
       // subscribe SQS queue to SNS topic
       const subscribed = await snsClient.send(new SubscribeCommand({TopicArn: topicArn, Protocol:'sqs', Endpoint: queueArn}))
       const policy = {
         Version: "2012-10-17",&TCX5-2025-waiver;                
         Statement: [
           {
             Sid: "MyPolicy",
             Effect: "Allow",
             Principal: {AWS: "*"},
             Action: "SQS:SendMessage",
             Resource: queueArn,
             Condition: {
               ArnEquals: {
                 'aws:SourceArn': topicArn
               }
             }
           }
         ]
       };
   
       const response = sqsClient.send(new SetQueueAttributesCommand({QueueUrl: sqsQueueUrl, Attributes: {Policy: JSON.stringify(policy)}}))
       console.log(response)
       console.log(sqsQueueUrl, topicArn)
       return [sqsQueueUrl, topicArn]
   
     } catch (err) {
       console.log("Error", err);
     }
   };
   
   const startLabelDetection = async (roleArn, snsTopicArn) => {
     try {
       //Initiate label detection and update value of startJobId with returned Job ID
      const labelDetectionResponse = await rekClient.send(new StartLabelDetectionCommand({Video:{S3Object:{Bucket:bucket, Name:videoName}}, 
         NotificationChannel:{RoleArn: roleArn, SNSTopicArn: snsTopicArn}}));
         startJobId = labelDetectionResponse.JobId
         console.log(`JobID: ${startJobId}`)
         return startJobId
     } catch (err) {
       console.log("Error", err);
     }
   };
   
   const getLabelDetectionResults = async(startJobId) => {
     console.log("Retrieving Label Detection results")
     // Set max results, paginationToken and finished will be updated depending on response values
     var maxResults = 10
     var paginationToken = ''
     var finished = false
   
     // Begin retrieving label detection results
     while (finished == false){
       var response = await rekClient.send(new GetLabelDetectionCommand({JobId: startJobId, MaxResults: maxResults, 
         NextToken: paginationToken, SortBy:'TIMESTAMP'}))
         // Log metadata
         console.log(`Codec: ${response.VideoMetadata.Codec}`)
         console.log(`Duration: ${response.VideoMetadata.DurationMillis}`)
         console.log(`Format: ${response.VideoMetadata.Format}`)
         console.log(`Frame Rate: ${response.VideoMetadata.FrameRate}`)
         console.log()
         // For every detected label, log label, confidence, bounding box, and timestamp
         response.Labels.forEach(labelDetection => {
           var label = labelDetection.Label
           console.log(`Timestamp: ${labelDetection.Timestamp}`)
           console.log(`Label: ${label.Name}`)
           console.log(`Confidence: ${label.Confidence}`)
           console.log("Instances:")
           label.Instances.forEach(instance =>{
             console.log(`Confidence: ${instance.Confidence}`)
             console.log("Bounding Box:")
             console.log(`Top: ${instance.Confidence}`)
             console.log(`Left: ${instance.Confidence}`)
             console.log(`Width: ${instance.Confidence}`)
             console.log(`Height: ${instance.Confidence}`)
             console.log()
           })
         console.log()
         // Log parent if found
         console.log("   Parents:")
         label.Parents.forEach(parent =>{
           console.log(`    ${parent.Name}`)
         })
         console.log()
         // Searh for pagination token, if found, set variable to next token
         if (String(response).includes("NextToken")){
           paginationToken = response.NextToken
   
         }else{
           finished = true
         }
   
         })
     }
   }
   
   // Checks for status of job completion
   const getSQSMessageSuccess = async(sqsQueueUrl, startJobId) => {
     try {
       // Set job found and success status to false initially
       var jobFound = false
       var succeeded = false
       var dotLine = 0
       // while not found, continue to poll for response
       while (jobFound == false){
         var sqsReceivedResponse = await sqsClient.send(new ReceiveMessageCommand({QueueUrl:sqsQueueUrl, 
           MaxNumberOfMessages:'ALL', MaxNumberOfMessages:10}));
         if (sqsReceivedResponse){
           var responseString = JSON.stringify(sqsReceivedResponse)
           if (!responseString.includes('Body')){
             if (dotLine < 40) {
               console.log('.')
               dotLine = dotLine + 1
             }else {
               console.log('')
               dotLine = 0 
             };
             stdout.write('', () => {
               console.log('');
             });
             await new Promise(resolve => setTimeout(resolve, 5000));
             continue
           }
         }
   
         // Once job found, log Job ID and return true if status is succeeded
         for (var message of sqsReceivedResponse.Messages){
           console.log("Retrieved messages:")
           var notification = JSON.parse(message.Body)
           var rekMessage = JSON.parse(notification.Message)
           var messageJobId = rekMessage.JobId
           if (String(rekMessage.JobId).includes(String(startJobId))){
             console.log('Matching job found:')
             console.log(rekMessage.JobId)
             jobFound = true
             console.log(rekMessage.Status)
             if (String(rekMessage.Status).includes(String("SUCCEEDED"))){
               succeeded = true
               console.log("Job processing succeeded.")
               var sqsDeleteMessage = await sqsClient.send(new DeleteMessageCommand({QueueUrl:sqsQueueUrl, ReceiptHandle:message.ReceiptHandle}));
             }
           }else{
             console.log("Provided Job ID did not match returned ID.")
             var sqsDeleteMessage = await sqsClient.send(new DeleteMessageCommand({QueueUrl:sqsQueueUrl, ReceiptHandle:message.ReceiptHandle}));
           }
         }
       }
     return succeeded
     } catch(err) {
       console.log("Error", err);
     }
   };
   
   // Start label detection job, sent status notification, check for success status
   // Retrieve results if status is "SUCEEDED", delete notification queue and topic
   const runLabelDetectionAndGetResults = async () => {
     try {
       const sqsAndTopic = await createTopicandQueue();
       const startLabelDetectionRes = await startLabelDetection(roleArn, sqsAndTopic[1]);
       const getSQSMessageStatus = await getSQSMessageSuccess(sqsAndTopic[0], startLabelDetectionRes)
       console.log(getSQSMessageSuccess)
       if (getSQSMessageSuccess){
         console.log("Retrieving results:")
         const results = await getLabelDetectionResults(startLabelDetectionRes)
       }
       const deleteQueue = await sqsClient.send(new DeleteQueueCommand({QueueUrl: sqsAndTopic[0]}));
       const deleteTopic = await snsClient.send(new DeleteTopicCommand({TopicArn: sqsAndTopic[1]}));
       console.log("Successfully deleted.")
     } catch (err) {
       console.log("Error", err);
     }
   };
   
   runLabelDetectionAndGetResults()
   ```

------
#### [ Java V2 ]

   Questo codice è tratto dal repository degli esempi GitHub di AWS Documentation SDK. Guarda l'esempio completo [qui](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/rekognition/src/main/java/com/example/rekognition/VideoDetect.java).

   ```
   import com.fasterxml.jackson.core.JsonProcessingException;
   import com.fasterxml.jackson.databind.JsonMappingException;
   import com.fasterxml.jackson.databind.JsonNode;
   import com.fasterxml.jackson.databind.ObjectMapper;
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.StartLabelDetectionResponse;
   import software.amazon.awssdk.services.rekognition.model.NotificationChannel;
   import software.amazon.awssdk.services.rekognition.model.S3Object;
   import software.amazon.awssdk.services.rekognition.model.Video;
   import software.amazon.awssdk.services.rekognition.model.StartLabelDetectionRequest;
   import software.amazon.awssdk.services.rekognition.model.GetLabelDetectionRequest;
   import software.amazon.awssdk.services.rekognition.model.GetLabelDetectionResponse;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   import software.amazon.awssdk.services.rekognition.model.LabelDetectionSortBy;
   import software.amazon.awssdk.services.rekognition.model.VideoMetadata;
   import software.amazon.awssdk.services.rekognition.model.LabelDetection;
   import software.amazon.awssdk.services.rekognition.model.Label;
   import software.amazon.awssdk.services.rekognition.model.Instance;
   import software.amazon.awssdk.services.rekognition.model.Parent;
   import software.amazon.awssdk.services.sqs.SqsClient;
   import software.amazon.awssdk.services.sqs.model.Message;
   import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest;
   import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest;
   import java.util.List;
   //snippet-end:[rekognition.java2.recognize_video_detect.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 VideoDetect {
   
    private static String startJobId ="";
    public static void main(String[] args) {
   
        final String usage = "\n" +
            "Usage: " +
            "   <bucket> <video> <queueUrl> <topicArn> <roleArn>\n\n" +
            "Where:\n" +
            "   bucket - The name of the bucket in which the video is located (for example, (for example, amzn-s3-demo-bucket). \n\n"+
            "   video - The name of the video (for example, people.mp4). \n\n" +
            "   queueUrl- The URL of a SQS queue. \n\n" +
            "   topicArn - The ARN of the Amazon Simple Notification Service (Amazon SNS) topic. \n\n" +
            "   roleArn - The ARN of the AWS Identity and Access Management (IAM) role to use. \n\n" ;
   
        if (args.length != 5) {
            System.out.println(usage);
            System.exit(1);
        }
   
        String bucket = args[0];
        String video = args[1];
        String queueUrl = args[2];
        String topicArn = args[3];
        String roleArn = args[4];
        Region region = Region.US_WEST_2;
        RekognitionClient rekClient = RekognitionClient.builder()
            .region(region)
            .credentialsProvider(ProfileCredentialsProvider.create("profile-name"))
            .build();
   
        SqsClient sqs = SqsClient.builder()
            .region(Region.US_WEST_2)
            .credentialsProvider(ProfileCredentialsProvider.create("profile-name"))
            .build();
   
        NotificationChannel channel = NotificationChannel.builder()
            .snsTopicArn(topicArn)
            .roleArn(roleArn)
            .build();
   
        startLabels(rekClient, channel, bucket, video);
        getLabelJob(rekClient, sqs,  queueUrl);
        System.out.println("This example is done!");
        sqs.close();
        rekClient.close();
    }
   
    // snippet-start:[rekognition.java2.recognize_video_detect.main]
    public static void startLabels(RekognitionClient rekClient,
                                   NotificationChannel channel,
                                   String bucket,
                                   String video) {
        try {
            S3Object s3Obj = S3Object.builder()
                .bucket(bucket)
                .name(video)
                .build();
   
            Video vidOb = Video.builder()
                .s3Object(s3Obj)
                .build();
   
            StartLabelDetectionRequest labelDetectionRequest = StartLabelDetectionRequest.builder()
                .jobTag("DetectingLabels")
                .notificationChannel(channel)
                .video(vidOb)
                .minConfidence(50F)
                .build();
   
            StartLabelDetectionResponse labelDetectionResponse = rekClient.startLabelDetection(labelDetectionRequest);
            startJobId = labelDetectionResponse.jobId();
   
            boolean ans = true;
            String status = "";
            int yy = 0;
            while (ans) {
   
                GetLabelDetectionRequest detectionRequest = GetLabelDetectionRequest.builder()
                    .jobId(startJobId)
                    .maxResults(10)
                    .build();
   
                GetLabelDetectionResponse result = rekClient.getLabelDetection(detectionRequest);
                status = result.jobStatusAsString();
   
                if (status.compareTo("SUCCEEDED") == 0)
                    ans = false;
                else
                    System.out.println(yy +" status is: "+status);
   
                Thread.sleep(1000);
                yy++;
            }
   
            System.out.println(startJobId +" status is: "+status);
   
        } catch(RekognitionException | InterruptedException e) {
            e.getMessage();
            System.exit(1);
        }
    }
   
    public static void getLabelJob(RekognitionClient rekClient, SqsClient sqs, String queueUrl) {
   
        List<Message> messages;
        ReceiveMessageRequest messageRequest = ReceiveMessageRequest.builder()
            .queueUrl(queueUrl)
            .build();
   
        try {
            messages = sqs.receiveMessage(messageRequest).messages();
   
            if (!messages.isEmpty()) {
                for (Message message: messages) {
                    String notification = message.body();
   
                    // Get the status and job id from the notification
                    ObjectMapper mapper = new ObjectMapper();
                    JsonNode jsonMessageTree = mapper.readTree(notification);
                    JsonNode messageBodyText = jsonMessageTree.get("Message");
                    ObjectMapper operationResultMapper = new ObjectMapper();
                    JsonNode jsonResultTree = operationResultMapper.readTree(messageBodyText.textValue());
                    JsonNode operationJobId = jsonResultTree.get("JobId");
                    JsonNode operationStatus = jsonResultTree.get("Status");
                    System.out.println("Job found in JSON is " + operationJobId);
   
                    DeleteMessageRequest deleteMessageRequest = DeleteMessageRequest.builder()
                        .queueUrl(queueUrl)
                        .build();
   
                    String jobId = operationJobId.textValue();
                    if (startJobId.compareTo(jobId)==0) {
                        System.out.println("Job id: " + operationJobId );
                        System.out.println("Status : " + operationStatus.toString());
   
                        if (operationStatus.asText().equals("SUCCEEDED"))
                            GetResultsLabels(rekClient);
                        else
                            System.out.println("Video analysis failed");
   
                        sqs.deleteMessage(deleteMessageRequest);
                    }
   
                    else{
                        System.out.println("Job received was not job " +  startJobId);
                        sqs.deleteMessage(deleteMessageRequest);
                    }
                }
            }
   
        } catch(RekognitionException e) {
            e.getMessage();
            System.exit(1);
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
   
    // Gets the job results by calling GetLabelDetection
    private static void GetResultsLabels(RekognitionClient rekClient) {
   
        int maxResults=10;
        String paginationToken=null;
        GetLabelDetectionResponse labelDetectionResult=null;
   
        try {
            do {
                if (labelDetectionResult !=null)
                    paginationToken = labelDetectionResult.nextToken();
   
   
                GetLabelDetectionRequest labelDetectionRequest= GetLabelDetectionRequest.builder()
                    .jobId(startJobId)
                    .sortBy(LabelDetectionSortBy.TIMESTAMP)
                    .maxResults(maxResults)
                    .nextToken(paginationToken)
                    .build();
   
                labelDetectionResult = rekClient.getLabelDetection(labelDetectionRequest);
                VideoMetadata videoMetaData=labelDetectionResult.videoMetadata();
                System.out.println("Format: " + videoMetaData.format());
                System.out.println("Codec: " + videoMetaData.codec());
                System.out.println("Duration: " + videoMetaData.durationMillis());
                System.out.println("FrameRate: " + videoMetaData.frameRate());
   
                List<LabelDetection> detectedLabels= labelDetectionResult.labels();
                for (LabelDetection detectedLabel: detectedLabels) {
                    long seconds=detectedLabel.timestamp();
                    Label label=detectedLabel.label();
                    System.out.println("Millisecond: " + seconds + " ");
   
                    System.out.println("   Label:" + label.name());
                    System.out.println("   Confidence:" + detectedLabel.label().confidence().toString());
   
                    List<Instance> instances = label.instances();
                    System.out.println("   Instances of " + label.name());
   
                    if (instances.isEmpty()) {
                        System.out.println("        " + "None");
                    } else {
                        for (Instance instance : instances) {
                            System.out.println("        Confidence: " + instance.confidence().toString());
                            System.out.println("        Bounding box: " + instance.boundingBox().toString());
                        }
                    }
                    System.out.println("   Parent labels for " + label.name() + ":");
                    List<Parent> parents = label.parents();
   
                    if (parents.isEmpty()) {
                        System.out.println("        None");
                    } else {
                        for (Parent parent : parents) {
                            System.out.println("   " + parent.name());
                        }
                    }
                    System.out.println();
                }
            } while (labelDetectionResult !=null && labelDetectionResult.nextToken() != null);
   
        } catch(RekognitionException e) {
            e.getMessage();
            System.exit(1);
        }
    }
    // snippet-end:[rekognition.java2.recognize_video_detect.main]
   }
   ```

------

1. Crea ed esegui il codice. Il completamento dell'operazione potrebbe richiedere alcuni minuti. Una volta terminata, viene visualizzato un elenco delle etichette rilevate nel video. Per ulteriori informazioni, consulta [Rilevamento di etichette in un video](labels-detecting-labels-video.md).

# Analisi di un video con AWS Command Line Interface
<a name="video-cli-commands"></a>

Puoi usare il AWS Command Line Interface (AWS CLI) per chiamare le operazioni di Amazon Rekognition Video. Il modello di progettazione è lo stesso dell'utilizzo dell'API Amazon Rekognition Video con o altro AWS. AWS SDK per Java SDKs Per ulteriori informazioni, consulta [Panoramica dell'API Video Amazon Rekognition](video.md#video-api-overview). Le seguenti procedure mostrano come utilizzare il per AWS CLI rilevare le etichette in un video.

Puoi iniziare a rilevare le etichette in un video chiamando `start-label-detection`. Quando Video Amazon Rekognition termina l'analisi video, lo stato di completamento viene inviato all'argomento specificato nel parametro `--notification-channel` di `start-label-detection`. Puoi ottenere lo stato di completamento dall'argomento Amazon SNS, utilizzando una coda Amazon Simple Queue Service (Amazon SQS). Puoi quindi eseguire il polling di [receive-message](https://docs.aws.amazon.com/cli/latest/reference/sqs/receive-message.html) per ottenere lo stato di completamento dalla coda Amazon SQS.

Quando chiami`StartLabelDetection`, puoi filtrare i risultati fornendo argomenti di filtraggio agli argomenti `LabelsInclusionFilter` e/o `LabelsExclusionFilter`. Per ulteriori informazioni, consulta [Rilevamento di etichette in un video](labels-detecting-labels-video.md).

La notifica relativa allo stato di completamento è una struttura JSON all'interno della risposta `receive-message`. È necessario estrarre la struttura JSON dalla risposta. Per informazioni sulla struttura JSON dello stato di completamento, consulta [Riferimento: Notifica dei risultati dell'analisi video](video-notification-payload.md). Se il valore del campo `Status` della struttura JSON relativa allo stato di completamento è `SUCCEEDED`, puoi ottenere i risultati della richiesta di analisi video chiamando `get-label-detection`. Durante la chiamata`GetLabelDetection`, è possibile ordinare e aggregare i risultati restituiti utilizzando gli argomenti `SortBy` and`AggregateBy`.

Le seguenti procedure non includono il codice per eseguire il polling della coda Amazon SQS. Inoltre, non includono il codice per analizzare la struttura JSON restituita dalla coda Amazon SQS. Per un esempio in formato Java, consulta [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md). 

## Prerequisiti
<a name="video-prerequisites"></a>

Per eseguire questa procedura, è necessario aver AWS CLI installato il. Per ulteriori informazioni, consulta [Nozioni di base su Amazon Rekognition](getting-started.md). L'account AWS utilizzato deve disporre di autorizzazioni di accesso all'API Amazon Rekognition. Per ulteriori informazioni, [Azioni definite da Video Amazon Rekognition](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions). 

**Per configurare Video Amazon Rekognition e caricare un video**

1. Configura l'accesso utente ad Video Amazon Rekognition e configura l'accesso di Video Amazon Rekognition ad Amazon SNS. Per ulteriori informazioni, consulta [Configurazione di Video Amazon Rekognition](api-video-roles.md).

1. Carica un file video in formato MOV o MPEG-4 nel bucket S3. Durante le fasi di sviluppo e test, consigliamo l'utilizzo di video brevi, non più lunghi 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*.

**Per rilevare le etichette in un video**

1. Esegui il seguente AWS CLI comando per iniziare a rilevare le etichette in un video.

   ```
   aws rekognition start-label-detection --video '{"S3Object":{"Bucket":"amzn-s3-demo-bucket","Name":"video-name"}}' \
    --notification-channel '{"SNSTopicArn":"TopicARN","RoleArn":"RoleARN"}' \
   --region region-name  \ 
   --features GENERAL_LABELS \
   --profile profile-name \
   --settings "{"GeneralLabels":{"LabelInclusionFilters":["Car"]}}
   ```

   Aggiorna i seguenti valori:
   + Modifica `amzn-s3-demo-bucket` e `videofile` con il nome del bucket Amazon S3 e il nome del file specificati nella fase 2.
   + Cambia `us-east-1` con la regione AWS che stai utilizzando.
   + Sostituisci il valore di `profile_name` nella riga che crea la sessione di Rekognition con il nome del tuo profilo di sviluppatore.
   + Cambia `TopicARN` con l'ARN dell'argomento Amazon SNS creato nella fase 3 di [Configurazione di Video Amazon Rekognition](api-video-roles.md).
   + Modifica `RoleARN` con l'ARN del ruolo di servizio IAM creato nella fase 7 di [Configurazione di Video Amazon Rekognition](api-video-roles.md).
   + Se richiesto, puoi specificare `endpoint-url`. L'AWS CLI dovrebbe determinare automaticamente l'URL dell'endpoint corretto in base alla regione fornita. Tuttavia, se utilizzi un endpoint [dal tuo VPC privato](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#what-is-privatelink), potrebbe essere necessario specificare l’`endpoint-url`. La risorsa [AWS Service Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints) elenca la sintassi per specificare gli URL degli endpoint e i nomi e i codici per ogni regione.
   + Puoi anche includere criteri di filtraggio nel parametro delle impostazioni. Ad esempio, è possibile utilizzare un `LabelsInclusionFilter` o a `LabelsExclusionFilter` accanto a un elenco di valori desiderati.

    Se accedi alla CLI da un dispositivo Windows, usa le virgolette doppie anziché le virgolette singole ed evita le virgolette doppie interne tramite barra rovesciata (ovvero, \$1) per risolvere eventuali errori del parser che potresti riscontrare. Un esempio è fornito di seguito: 

   ```
   aws rekognition start-label-detection --video "{\"S3Object\":{\"Bucket\":\"amzn-s3-demo-bucket",\"Name\":\"video-name\"}}" --notification-channel "{\"SNSTopicArn\":\"TopicARN\",\"RoleArn\":\"RoleARN\"}" \
   --region us-east-1 --features GENERAL_LABELS --settings "{\"GeneralLabels\":{\"LabelInclusionFilters\":[\"Car\"]}}" --profile profile-name
   ```

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. Scrivi il codice per eseguire il polling della coda Amazon SQS in base alla struttura JSON dello stato di completamento (utilizzando [receive-message](https://docs.aws.amazon.com/cli/latest/reference/sqs/receive-message.html)).

1. Scrivi il codice per estrarre il campo `Status` dalla struttura JSON dello stato di completamento.

1. Se il valore di `Status` è`SUCCEEDED`, esegui il AWS CLI comando seguente per mostrare i risultati del rilevamento delle etichette.

   ```
   aws rekognition get-label-detection  --job-id JobId \
   --region us-east-1 --sort-by TIMESTAMP aggregate-by TIMESTAMPS
   ```

   Aggiorna i seguenti valori:
   + Modifica `JobId` in modo che corrisponda all'identificatore del processo di cui hai preso nota nella fase 2.
   + Modifica `Endpoint` e `us-east-1` nella regione e nell'endpoint AWS in uso.

   I risultati si presentano in maniera analoga all'esempio di struttura JSON riportato di seguito:

   ```
   {
       "Labels": [
           {
               "Timestamp": 0,
               "Label": {
                   "Confidence": 99.03720092773438,
                   "Name": "Speech"
               }
           },
           {
               "Timestamp": 0,
               "Label": {
                   "Confidence": 71.6698989868164,
                   "Name": "Pumpkin"
               }
           },
           {
               "Timestamp": 0,
               "Label": {
                   "Confidence": 71.6698989868164,
                   "Name": "Squash"
               }
           },
           {
               "Timestamp": 0,
               "Label": {
                   "Confidence": 71.6698989868164,
                   "Name": "Vegetable"
               }
           }, .......
   ```

# Riferimento: Notifica dei risultati dell'analisi video
<a name="video-notification-payload"></a>

Amazon Rekognition pubblica il risultato della richiesta di analisi Video Amazon Rekognition, incluso lo stato di completamento, all’argomento Amazon Simple Notification Service (Amazon SNS). Per ricevere la notifica da un argomento di Amazon SNS, usa una coda o una funzione di Amazon Simple Queue Service. AWS Lambda Per ulteriori informazioni, consulta [Chiamata delle operazioni Video Amazon Rekognition](api-video.md). Per vedere un esempio, consulta [Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md).

Il payload si presenta nel formato JSON seguente:

```
{
  "JobId": "String",
  "Status": "String",
  "API": "String",
  "JobTag": "String",
  "Timestamp": Number,
  "Video": {
    "S3ObjectName": "String",
    "S3Bucket": "String"
  }
}
```


| Nome | Description | 
| --- | --- | 
|  JobId  |  Identificatore del processo. Corrisponde a un identificatore del processo restituito da un'operazione `Start`, ad esempio [StartPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartPersonTracking.html).  | 
|  Status  |  Stato del processo. I valori validi sono SUCCEEDED (RIUSCITO), FAILED (NON RIUSCITO) o ERROR (ERRORE).  | 
|  "Hello, World\$1"  |  L'operazione di Video Amazon Rekognition utilizzata per analizzare il video di input.  | 
|  JobTag  |  Identificatore per il processo. Puoi specificare `JobTag` in una chiamata all'operazione Start, ad esempio [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html).  | 
|  Time stamp  |  Il time stamp Unix con l'ora di completamento del processo.  | 
|  Video  |  Dettagli sul video elaborato. Include il nome del file e il bucket Amazon S3 in cui è archiviato.  | 

Di seguito è riportato un esempio di una notifica corretta inviata a un argomento Amazon SNS.

```
{
  "JobId": "6de014b0-2121-4bf0-9e31-856a18719e22",
  "Status": "SUCCEEDED",
  "API": "LABEL_DETECTION",
  "Message": "",
  "Timestamp": 1502230160926,
  "Video": {
    "S3ObjectName": "video.mpg",
    "S3Bucket": "amzn-s3-demo-bucket"
  }
}
```

# Risoluzione dei problemi di Video Amazon Rekognition
<a name="video-troubleshooting"></a>

Le indicazioni che seguono sono informazioni sulla risoluzione dei problemi nell'utilizzo di Video Amazon Rekognition e dei video archiviati.

## Non ricevo mai lo stato di completamento che viene inviato all'argomento Amazon SNS
<a name="video-no-sns-topic"></a>

 Video Amazon Rekognition pubblica le informazioni sullo stato su un argomento Amazon SNS quando l'analisi video viene completata. In genere, ricevi il messaggio relativo allo stato di completamento sottoscrivendo l'argomento con una coda Amazon SQS o una funzione Lambda. Per facilitare la tua analisi, sottoscrivi l'argomento Amazon SNS per e-mail per ricevere i messaggi inviati all'argomento Amazon SNS nella tua casella di posta elettronica. Per ulteriori informazioni, consulta [Iscrizione a un argomento Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html).

Se non ricevi il messaggio nella tua applicazione, procedi nel seguente modo:
+ Verifica che l'analisi sia stata completata. Verifica il `JobStatus` valore nella risposta dell'operazione Get (`GetLabelDetection`, ad esempio). Se il valore è `IN_PROGRESS`, l'analisi non è completa e lo stato di completamento non è ancora stato pubblicato su un argomento Amazon SNS.
+ Verifica che disponi di un ruolo di servizio IAM che offre a Video Amazon Rekognition le autorizzazioni per pubblicare sui tuoi argomenti Amazon SNS. Per ulteriori informazioni, consulta [Configurazione di Video Amazon Rekognition](api-video-roles.md). 
+ Verifica che il ruolo di servizio IAM che stai utilizzando possa essere pubblicato sull'argomento Amazon SNS utilizzando le credenziali del ruolo e che le autorizzazioni del tuo ruolo di servizio siano limitate in modo sicuro alle risorse che stai utilizzando. Segui questi passaggi:
  + Ottieni il nome della risorsa Amazon (ARN) dell'utente:

    ```
    aws sts get-caller-identity --profile RekognitionUser 
    ```
  + Aggiungere l’utente ARN a una relazione di trust. Per ulteriori informazioni, consulta [Modifica un ruolo](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html). L'esempio seguente di politica di fiducia specifica le credenziali del ruolo dell'utente e limita le autorizzazioni del ruolo di servizio alle sole risorse che stai utilizzando (per ulteriori informazioni sulla limitazione sicura dell'ambito delle autorizzazioni di un ruolo di servizio, consulta): [Prevenzione del problema "confused deputy" tra servizi](cross-service-confused-deputy-prevention.md)
  + Assumi il ruolo: `aws sts assume-role --role-arn arn:Role ARN --role-session-name SessionName --profile RekognitionUser`
  + Pubblica in un argomento Amazon SNS: `aws sns publish --topic-arn arn:Topic ARN --message "Hello World!" --region us-east-1 --profile RekognitionUser`

  Se il comando AWS CLI funziona, riceverai il messaggio (nella tua casella di posta elettronica, se ti sei iscritto all'argomento tramite e-mail). Se non ricevi il messaggio:
  + Controlla che Video Amazon Rekognition sia stato configurato. Per ulteriori informazioni, consulta [Configurazione di Video Amazon Rekognition](api-video-roles.md).
  + Controlla gli altri suggerimenti per la risoluzione dei problemi relativi a questa domanda.
+ Verifica che stai utilizzando l'argomento Amazon SNS corretto:
  + Se utilizzi un ruolo di servizio IAM per fornire a Video Amazon Rekognition l'accesso a un singolo argomento Amazon SNS, controlla di aver concesso le autorizzazioni necessarie all'argomento Amazon SNS corretto. Per ulteriori informazioni, consulta [Accesso a un argomento Amazon SNS esistente](api-video-roles.md#api-video-roles-single-topics).
  + Se utilizzi un ruolo di servizio IAM per consentire ad Amazon Rekognition Video l'accesso a più argomenti SNS, verifica di utilizzare l'argomento corretto e che il nome dell'argomento sia preceduto da. *AmazonRekognition* Per ulteriori informazioni, consulta [Accesso a più argomenti Amazon SNS](api-video-roles.md#api-video-roles-all-topics). 
  + Se usi una AWS Lambda funzione, conferma che la tua funzione Lambda sia iscritta all'argomento Amazon SNS corretto. Per ulteriori informazioni, consulta [Fanout alle funzioni Lambda](https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html).
+ Se sottoscrivi una coda Amazon SQS relativa all'argomento Amazon SNS, verifica che il tuo argomento Amazon SNS disponga delle autorizzazioni per inviare messaggi alla coda Amazon SQS. Per ulteriori informazioni, consulta [Concedere le autorizzazioni a un argomento Amazon SNS per inviare messaggi alla coda Amazon SQS](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html#SendMessageToSQS.sqs.permissions).

## Ho bisogno di ulteriore assistenza per la risoluzione di Amazon SNS
<a name="video-troubleshoot-sns"></a>

Puoi utilizzarlo AWS X-Ray con Amazon SNS per tracciare e analizzare i messaggi che viaggiano attraverso la tua applicazione. Per ulteriori informazioni, consulta [Amazon SNS](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sns.html) e. AWS X-Ray

Per ulteriore assistenza, puoi pubblicare la tua domanda sul forum [Amazon Rekognition](https://forums.aws.amazon.com/forum.jspa?forumID=234) o prendere in considerazione la possibilità di iscriverti al [AWS supporto tecnico.](https://aws.amazon.com/premiumsupport/)