

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation des opérations d'analyse vidéo stockées
<a name="video"></a>

Vidéo Amazon Rekognition est une API que vous pouvez utiliser pour analyser des vidéos. Avec Vidéo Amazon Rekognition, vous pouvez détecter des étiquettes, des visages, des personnes, des célébrités et du contenu pour adulte (suggestif et explicite) dans des vidéos stockées dans un compartiment Amazon Simple Storage Service (Amazon S3). Vous pouvez utiliser Amazon Rekognition Video dans des catégories telles que la sécurité publique. media/entertainment Auparavant, l’analyse de vidéos en vue de la détection d’objets ou de personnes pouvait nécessiter plusieurs heures de visionnage manuel, source d’erreurs potentielles. Vidéo Amazon Rekognition automatise la détection d’éléments et du moment où ceux-ci apparaissent dans une vidéo.

Cette section présente les types d’analyse que Vidéo Amazon Rekognition peut effectuer, une présentation de l’API et des exemples d’utilisation de Vidéo Amazon Rekognition.

**Topics**
+ [Types d’analyse](#video-recognition-types)
+ [Présentation de l’API Vidéo Amazon Rekognition](#video-api-overview)
+ [Appeler les opérations de Vidéo Amazon Rekognition](api-video.md)
+ [Configuration de Vidéo Amazon Rekognition](api-video-roles.md)
+ [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md)
+ [Analyse d'une vidéo à l'aide du AWS Command Line Interface](video-cli-commands.md)
+ [Référence : Notification des résultats d’une analyse vidéo](video-notification-payload.md)
+ [Résolution des problèmes liés à Vidéo Amazon Rekognition](video-troubleshooting.md)

## Types d’analyse
<a name="video-recognition-types"></a>

Vous pouvez utiliser Vidéo Amazon Rekognition pour analyser des vidéos et détecter les informations suivantes :
+ [Segments vidéo](segments.md)
+ [Etiquettes](labels.md)
+ [Contenu pour adulte suggestif et explicite](moderation.md)
+ [Text](text-detection.md)
+ [Célébrités](celebrities.md)
+ [Visages](faces.md)
+ [Personnes](persons.md)

Pour de plus amples informations, veuillez consulter [Fonctionnement d’Amazon Rekognition](how-it-works.md).

## Présentation de l’API Vidéo Amazon Rekognition
<a name="video-api-overview"></a>

Vidéo Amazon Rekognition traite une vidéo stockée dans un compartiment Amazon S3. Le schéma de conception est constitué d’un ensemble asynchrone d’opérations. Vous lancez l'analyse vidéo en appelant une opération `Start` telle que [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html). L’état d’achèvement de la demande est publié dans une rubrique Amazon Simple Notiﬁcation Service (Amazon SNS). Pour connaître l'état d'achèvement à partir de la rubrique Amazon SNS, vous pouvez utiliser une file d'attente ou une fonction Amazon Simple Queue Service (Amazon SQS). AWS Lambda Après avoir obtenu le statut d'achèvement, vous appelez une opération `Get` telle que [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html) pour obtenir le résultat de la demande. 

Le schéma suivant illustre le processus de détection d’étiquettes dans une vidéo stockée dans un compartiment Amazon S3. Dans ce schéma, une file d’attente Amazon SNS obtient le statut d’achèvement à partir de la rubrique SNS. Vous pouvez également utiliser une AWS Lambda fonction. 

![\[Organigramme décrivant les étapes de l'analyse vidéo à l'aide d'Amazon Rekognition Video, Amazon SNS et Amazon SQS, avec des StartLabelDetection composants GetLabelDetection tels que le statut d'achèvement des tâches et de publication dans les files d'attente respectives.\]](http://docs.aws.amazon.com/fr_fr/rekognition/latest/dg/images/VideoRekognition.png)


Le processus est le même pour les autres opérations Vidéo Amazon Rekognition. Le tableau suivant répertorie les opérations `Start` et `Get` pour chacune des opérations Amazon Rekognition hors stockage.


| Détection | Opération Start | Opération Get | 
| --- | --- | --- | 
|  Segments vidéo  |  [StartSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartSegmentDetection.html)  |  [GetSegmentDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetSegmentDetection.html)  | 
|  Étiquettes  |  [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html)  |  [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html)  | 
|  Contenu pour adulte suggestif ou explicite  |  [StartContentModeration](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartContentModeration.html)  |  [GetContentModeration](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetContentModeration.html)  | 
|  Texte  |  [StartTextDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartTextDetection.html)  |  [GetTextDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetTextDetection.html)  | 
|  Célébrités  |  [StartCelebrityRecognition](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartCelebrityRecognition.html)  |  [GetCelebrityRecognition](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetCelebrityRecognition.html)  | 
|  Visages  |  [StartFaceDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartFaceDetection.html)  |  [GetFaceDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetFaceDetection.html)  | 
|  Personnes  |  [StartPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartPersonTracking.html)  |  [GetPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetPersonTracking.html)  | 

Pour les opérations `Get` autres que `GetCelebrityRecognition`, Vidéo Amazon Rekognition renvoie des informations de suivi lorsque des entités sont détectées dans la vidéo en entrée.

Pour de plus amples informations sur l’utilisation de Vidéo Amazon Rekognition, veuillez consulter [Appeler les opérations de Vidéo Amazon Rekognition](api-video.md). Pour obtenir un exemple d’analyse vidéo avec Amazon SQS, consultez [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md). Pour AWS CLI des exemples, voir[Analyse d'une vidéo à l'aide du AWS Command Line Interface](video-cli-commands.md).

### Formats et stockage de vidéos
<a name="video-storage-formats"></a>

Les opérations Amazon Rekognition peuvent analyser des vidéos stockées dans des compartiments Amazon S3. Pour obtenir la liste de toutes les limites liées aux opérations d’analyse vidéo, veuillez consulter la rubrique [Directives et quotas dans Amazon Rekognition](limits.md).

La vidéo doit être encodée à l’aide du codec H.264. Les formats de fichier pris en charge sont MPEG-4 et MOV. 

Un codec est un logiciel ou un matériel qui compresse les données pour une livraison plus rapide, et décompresse les données reçues dans leur format d’origine. Le codec H.264 est couramment utilisé pour l’enregistrement, la compression et la distribution de contenu vidéo. Un format de fichier vidéo peut contenir un ou plusieurs codecs. Si votre fichier vidéo au format MOV ou MPEG-4 ne fonctionne pas avec Vidéo Amazon Rekognition, vérifiez que le codec utilisé pour encoder la vidéo est bien H.264. 

Toute API Vidéo Amazon Rekognition qui analyse les données audio ne prend en charge que les codecs audio AAC.

La taille maximale d’un fichier pour une vidéo stockée est de 10 Go.

### Recherche de personnes
<a name="video-searching-persons-overview"></a>

Vous pouvez utiliser des métadonnées faciales, stockées dans une collection, pour rechercher des personnes dans une vidéo. Par exemple, vous pouvez rechercher une ou plusieurs personnes en particulier dans une vidéo archivée. Vous stockez des métadonnées faciales à partir d'images source dans une collection en utilisant l'opération [IndexFaces](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_IndexFaces.html). Vous pouvez ensuite utiliser [StartFaceSearch](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartFaceSearch.html) pour lancer de manière asynchrone une recherche sur les visages de la collection. Vous utilisez [GetFaceSearch](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GeFaceSearch.html) pour obtenir les résultats de la recherche. Pour de plus amples informations, veuillez consulter [Recherche de visages dans des vidéos stockées](procedure-person-search-videos.md). La recherche de personnes est un exemple d’opération Amazon Rekognition basée sur le stockage. Pour de plus amples informations, veuillez consulter [Opérations d’API de stockage](how-it-works-storage-non-storage.md#how-it-works-storage-based).

Vous pouvez aussi rechercher des personnes dans une vidéo en streaming. Pour de plus amples informations, veuillez consulter [Utilisation des vidéos streaming](streaming-video.md).

# Appeler les opérations de Vidéo Amazon Rekognition
<a name="api-video"></a>

Vidéo Amazon Rekognition est une API asynchrone que vous pouvez utiliser pour analyser des vidéos stockées dans un compartiment Amazon Simple Storage Service (Amazon Simple Storage Service (Amazon S3). Vous commencez l'analyse d'une vidéo en appelant une opération Amazon Rekognition `Start` Video, telle que. [StartPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartPersonTracking.html) Vidéo Amazon Rekognition publie le résultat de la demande d’analyse dans une rubrique Amazon Simple Notiﬁcation Service (Amazon SNS). Vous pouvez utiliser une file d'attente Amazon Simple Queue Service (Amazon SQS) ou AWS Lambda une fonction pour obtenir l'état d'avancement de la demande d'analyse vidéo à partir de la rubrique Amazon SNS. Enfin, vous obtenez les résultats de la demande d'analyse vidéo en appelant une opération `Get` Amazon Rekognition, telle que. [GetPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetPersonTracking.html) 

Les informations contenues dans les sections suivantes utilisent des opérations de détection d’étiquette pour montrer comment Vidéo Amazon Rekognition détecte des étiquettes (objets, événements, concepts et activités) dans une vidéo stockée dans un compartiment Amazon S3. La même approche fonctionne pour les autres opérations Amazon Rekognition Video, par exemple, et. [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’exemple [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md) présente comment analyser une vidéo en utilisant une file d’attente Amazon SQS pour obtenir le statut d’achèvement à partir de la rubrique Amazon SNS. Il est également utilisé comme base pour d’autres exemples Vidéo Amazon Rekognition tels que [Tracé du parcours de personnes](persons.md). Pour AWS CLI des exemples, voir[Analyse d'une vidéo à l'aide du AWS Command Line Interface](video-cli-commands.md).

**Topics**
+ [Démarrage d’une analyse vidéo](#api-video-start)
+ [Obtention du statut d’achèvement d’une demande d’analyse Vidéo Amazon Rekognition](#api-video-get-status)
+ [Obtenir les résultats de l’analyse de Vidéo Amazon Rekognition](#api-video-get)

## Démarrage d’une analyse vidéo
<a name="api-video-start"></a>

Vous lancez une demande de détection d'étiquette Amazon Rekognition Video en appelant. [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html) L’exemple suivant est une demande JSON transmise par `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"
}
```

Le paramètre d’entrée `Video` contient le nom du fichier vidéo et le compartiment Amazon S3 dont ce fichier peut être extrait. `NotificationChannel` contient l’Amazon Resource Name (ARN) de la rubrique Amazon SNS à laquelle Vidéo Amazon Rekognition adresse une notification lorsque la demande d’analyse vidéo est terminée. La rubrique Amazon SNS doit être située dans la même région AWS que le point de terminaison Vidéo Amazon Rekognition que vous appelez. `NotificationChannel` contient également l’ARN pour un rôle qui permet à Vidéo Amazon Rekognition de publier dans la rubrique Amazon SNS. Vous attribuez des autorisations de publication Amazon Rekognition dans vos rubriques Amazon SNS en créant une fonction du service IAM. Pour de plus amples informations, veuillez consulter [Configuration de Vidéo Amazon Rekognition](api-video-roles.md).

Vous pouvez également spécifier un paramètre d’entrée facultatif, `JobTag`, qui vous permet d’identifier la tâche dans le statut d’achèvement publié dans la rubrique Amazon SNS. 

Afin d’éviter toute duplication accidentelle des tâches d’analyse, vous pouvez, si vous le souhaitez, fournir un jeton idempotent, `ClientRequestToken`. Si vous indiquez une valeur pour `ClientRequestToken`, l’opération `Start` renvoie le même `JobId` pour plusieurs appels identiques à l’opération de démarrage, par exemple `StartLabelDetection`. Un jeton `ClientRequestToken` a une durée de vie de 7 jours. Au delà de 7 jours, vous pouvez le réutiliser. Si vous réutilisez le jeton pendant sa durée de vie, ce qui suit se produit : 
+ Si vous réutilisez le jeton avec la même opération `Start` et les mêmes paramètres d’entrée, le même `JobId` est renvoyé. La tâche n’est pas exécutée à nouveau et Vidéo Amazon Rekognition n’envoie pas de statut d’achèvement à la rubrique Amazon SNS enregistrée.
+ Si vous réutilisez le jeton avec la même opération `Start` et une modification mineure du paramètre d’entrée, vous obtenez une exception `IdempotentParameterMismatchException` (code de statut HTTP : 400).
+ Vous ne devez pas réutiliser un jeton avec des opérations `Start` différentes, car vous obtiendrez des résultats imprévisibles d’Amazon Rekognition.

La réponse à l’opération `StartLabelDetection` est un identifiant de tâche (`JobId`). Utilisez `JobId` pour suivre les demandes et obtenir les résultats d’analyse une fois que Vidéo Amazon Rekognition a publié le statut d’achèvement dans la rubrique Amazon SNS. Par exemple :

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

Si vous lancez un trop grand nombre de tâches simultanément, les appels à `StartLabelDetection` génèrent une `LimitExceededException` (code de statut HTTP : 400) jusqu’à ce que le nombre de tâches exécutées simultanément soit inférieur à la limite de service Amazon Rekognition. 

Si vous constatez que les exceptions `LimitExceededException` sont générées lors des pics d’activité, vous devez envisager d’utiliser une file d’attente Amazon SQS afin de gérer les demandes entrantes. Contactez le AWS support si vous constatez que votre nombre moyen de demandes simultanées ne peut pas être géré par une file d'attente Amazon SQS et que vous recevez `LimitExceededException` toujours des exceptions. 

## Obtention du statut d’achèvement d’une demande d’analyse Vidéo Amazon Rekognition
<a name="api-video-get-status"></a>

Vidéo Amazon Rekognition envoie une notification d’achèvement d’analyse à la rubrique Amazon SNS enregistrée. La notification comprend l’identifiant de la tâche et le statut d’achèvement de l’opération dans une chaîne JSON. Une demande d’analyse vidéo réussie a un statut `SUCCEEDED`. Par exemple, le résultat suivant montre la réussite du traitement d’une tâche de détection d’étiquette.

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

Pour de plus amples informations, veuillez consulter [Référence : Notification des résultats d’une analyse vidéo](video-notification-payload.md).

Pour obtenir les informations de statut publiées dans la rubrique Amazon SNS par Vidéo Amazon Rekognition, utilisez l’une des options suivantes :
+ **AWS Lambda** : vous pouvez abonner une fonction AWS Lambda que vous écrivez à une rubrique Amazon SNS. La fonction est appelée quand Amazon Rekognition informe la rubrique Amazon SNS que la demande est terminée. Utilisez une fonction Lambda si vous souhaitez que le code côté serveur traite les résultats d’une demande d’analyse vidéo. Par exemple, vous pouvez utiliser du code côté serveur pour annoter la vidéo ou créer un rapport sur le contenu de la vidéo avant de renvoyer les informations vers une application cliente. Nous recommandons également un traitement côté serveur pour les vidéos volumineuses, car l’API Amazon Rekognition risque de renvoyer d’importants volumes de données. 
+ **Amazon Simple Queue Service** : vous pouvez abonner une file d’attente Amazon SQS à une rubrique Amazon SNS. Vous pouvez ensuite interroger la file d’attente Amazon SQS pour extraire le statut d’achèvement publié par Amazon Rekognition lorsqu’une demande d’analyse vidéo se termine. Pour de plus amples informations, veuillez consulter [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md). Utilisez une file d’attente Amazon SQS si vous souhaitez appeler des opérations Vidéo Amazon Rekognition uniquement à partir d’une application cliente. 

**Important**  
Nous vous déconseillons d’obtenir le statut d’achèvement d’une demande en appelant de manière répétée l’opération `Get` Vidéo Amazon Rekognition. La raison en est que Vidéo Amazon Rekognition limite l’opération `Get` si de trop nombreuses demandes sont lancées. Si vous traitez plusieurs vidéos simultanément, il est plus simple et plus efficace de surveiller la création d’une notification d’achèvement dans une file d’attente SQS que d’interroger Vidéo Amazon Rekognition pour obtenir le statut de chaque vidéo individuellement.

## Obtenir les résultats de l’analyse de Vidéo Amazon Rekognition
<a name="api-video-get"></a>

 Pour obtenir les résultats d’une demande d’analyse vidéo, assurez-vous tout d’abord que le statut d’achèvement extrait de la rubrique est Amazon SNS est `SUCCEEDED`. Ensuite, appelez `GetLabelDetection`, qui transmet la valeur `JobId` renvoyée par `StartLabelDetection`. Le format JSON de la demande est similaire à l’exemple suivant :

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

JobId est l'identifiant de l'opération d'analyse vidéo. Dans la mesure où l’analyse vidéo peut générer de grandes quantités de données, utilisez `MaxResults` pour spécifier le nombre maximum de résultats pouvant être renvoyés dans une opération Get. La valeur par défaut du paramètre `MaxResults` est 1000. Si vous spécifiez une valeur supérieure à 1 000, seuls 1 000 résultats sont renvoyés au maximum. Si l’opération ne renvoie pas l’ensemble des résultats, un jeton de pagination pour la page suivante est renvoyé dans la réponse de l’opération. Si vous obtenez un jeton de pagination transmis par une précédente demande Get, utilisez-le avec `NextToken` pour obtenir la page suivante des résultats.

**Note**  
Amazon Rekognition conserve les résultats d’une opération d’analyse vidéo pendant 7 jours. Passé ce délai, vous ne pourrez pas récupérer les résultats de l’analyse.

Le format JSON d’une réponse d’opération `GetLabelDetection` est similaire à l’exemple suivant :

```
{
    "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
    }
}
```

Les opérations `GetLabelDetection` et `GetContentModeration` vous permettent de trier les résultats de l’analyse par horodatage ou par nom d’étiquette. Vous pouvez également agréger les résultats par horodatage ou par segments vidéo. 

Vous pouvez trier les résultats en fonction de l’heure de détection (millisecondes à partir du début de la vidéo) ou de l’entité détectée (objet, visage, célébrité, étiquette de modération ou personne), par ordre alphabétique. Pour trier en fonction de l’heure, définissez la valeur du paramètre d’entrée `SortBy` sur `TIMESTAMP`. Si `SortBy` n’est pas spécifié, le tri est, par défaut, effectué en fonction de l’heure. L’exemple précédent est trié en fonction de l’heure. Pour trier en fonction de l’entité, utilisez le paramètre d’entrée `SortBy` avec la valeur appropriée pour l’opération que vous exécutez. Par exemple, pour trier en fonction de l’étiquette détectée dans un appel à `GetLabelDetection`, utilisez la valeur `NAME`.

Pour agréger les résultats par horodatage, définissez la valeur du paramètre `AggregateBy` sur `TIMESTAMPS`. Pour agréger par segment vidéo, définissez la valeur de `AggregateBy` à`SEGMENTS`. Le mode d’agrégation `SEGMENTS` agrègera les étiquettes au fil du temps, tandis que `TIMESTAMPS` donne l’horodatage auquel une étiquette a été détectée, en utilisant un échantillonnage à 2 images par seconde et une sortie par image (Remarque : ce taux d’échantillonnage actuel est sujet à modification, aucune hypothèse ne doit être faite quant au taux d’échantillonnage actuel). Si aucune valeur n’est spécifiée, la méthode d’agrégation par défaut est `TIMESTAMPS`. 

# Configuration de Vidéo Amazon Rekognition
<a name="api-video-roles"></a>

Pour utiliser l’API Vidéo Amazon Rekognition avec les vidéos stockées, vous devez configurer l’utilisateur et une fonction du service IAM pour l’accès à vos rubriques Amazon SNS. Vous devez également abonner une file d’attente Amazon SQS à vos rubriques Amazon SNS. 

**Note**  
Si vous utilisez ces instructions pour configurer l’exemple [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md), vous n’avez pas besoin d’effectuer les étapes 3, 4, 5 et 6. L’exemple inclut le code permettant de créer et de configurer la rubrique Amazon SNS et la file d’attente Amazon SQS.

Les exemples de cette section créent une nouvelle rubrique Amazon SNS à l’aide des instructions permettant à Vidéo Amazon Rekognition d’accéder à plusieurs rubriques. Si vous souhaitez utiliser une rubrique Amazon SNS existante, utilisez [Octroi de l’accès à une rubrique Amazon SNS existante](#api-video-roles-single-topics) pour l’étape 3.<a name="configure-rekvid-procedure"></a>

**Pour configurer Vidéo Amazon Rekognition**

1. Créez un AWS compte pour accéder à Amazon Rekognition Video. Pour de plus amples informations, veuillez consulter [Étape 1 : configurer un compte AWS et créer un utilisateur](setting-up.md).

1. Installez et configurez le AWS SDK requis. Pour de plus amples informations, veuillez consulter [Étape 2 : configurer le AWS CLI et AWS SDKs](setup-awscli-sdk.md). 

1. Pour exécuter les exemples de code présentés dans ce guide du développeur, assurez-vous que l’utilisateur que vous avez choisi dispose d’un accès programmatique. Pour plus d’informations, consultez [Octroi d’un accès par programmation](sdk-programmatic-access.md).

   Votre utilisateur doit également disposer au moins des autorisations suivantes :
   + Amazon SQSFull Access
   + AmazonRekognitionFullAccess
   + Amazon S3 FullAccess
   + Amazon SNSFull Access

   Si vous utilisez IAM Identity Center pour vous authentifier, ajoutez les autorisations à l’ensemble d’autorisations pour votre rôle, sinon ajoutez les autorisations à votre rôle IAM.

1. [Créez une rubrique Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) à l’aide de la [console Amazon SNS](https://console.aws.amazon.com/sns/v2/home). Ajoutez le nom du sujet avec *AmazonRekognition*. Notez l’Amazon Resource Name (ARN) de la rubrique. La rubrique doit se trouver dans la même région que le point de terminaison AWS que vous utilisez.

1. [Créez une file d’attente Amazon SQS standard](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) à l’aide de la [console Amazon SQS](https://console.aws.amazon.com/sqs/). Notez l’ARN de la file d’attente.

1. [Abonnez la file d’attente à la rubrique](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-subscribe-queue-sns-topic.html) que vous avez créée à l’étape 3.

1. [Autorisez la rubrique Amazon SNS à envoyer des messages à la file d’attente Amazon SQS](https://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html#SendMessageToSQS.sqs.permissions).

1. Créez une fonction du service IAM pour permettre à Vidéo Amazon Rekognition d’accéder à vos rubriques Amazon SNS. Notez l’Amazon Resource Name (ARN) de la fonction du service. Pour de plus amples informations, veuillez consulter [Accorder l’accès à plusieurs rubriques Amazon SNS](#api-video-roles-all-topics).

1. Pour garantir la sécurité de votre compte, vous devez limiter l’accès de Rekognition aux seules ressources que vous utilisez. Pour cela, attachez une politique de confiance à votre fonction du service IAM. Pour plus d’informations sur la procédure à utiliser, consultez [Prévention du problème de l’adjoint confus entre services](cross-service-confused-deputy-prevention.md).

1. [ Ajoutez la stratégie en ligne suivante](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console) à l’utilisateur que vous avez créé à l’étape 1 : 

   Attribuez le nom de votre choix à la stratégie en ligne.

1. Si vous utilisez une AWS Key Management Service clé gérée par le client pour chiffrer les vidéos de votre compartiment Amazon S3, [ajoutez](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-policy-view) des autorisations à la clé qui permettent au rôle de service que vous avez créé à l'étape 7 de déchiffrer les vidéos. Au minimum, la fonction du service nécessite une autorisation pour des actions `kms:GenerateDataKey` et `kms:Decrypt`. Par exemple :

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

   Pour plus d’informations, consultez la section [Mon compartiment Amazon S3 est crypté par défaut à l’aide d’une clé AWS KMS personnalisée. Comment puis-je autoriser les utilisateurs à effectuer des téléchargements depuis et vers le compartiment ?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-access-default-encryption/) et [Protection des données à l’aide du chiffrement côté serveur avec les clés KMS stockées dans AWS Key Management Service (SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html). 

1. Vous pouvez désormais exécuter les exemples pour [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md) et [Analyse d'une vidéo à l'aide du AWS Command Line Interface](video-cli-commands.md).

## Accorder l’accès à plusieurs rubriques Amazon SNS
<a name="api-video-roles-all-topics"></a>

Vous utilisez une fonction du service IAM pour permettre à Vidéo Amazon Rekognition d’accéder aux rubriques Amazon SNS que vous créez. IAM fournit le cas d’utilisation *Rekognition* pour la création d’une fonction du service Vidéo Amazon Rekognition.

Vous pouvez autoriser Amazon Rekognition Video à accéder à plusieurs rubriques Amazon SNS en utilisant la politique d'autorisation et en faisant précéder `AmazonRekognitionServiceRole` les noms des rubriques par, par exemple,. *AmazonRekognition*`AmazonRekognitionMyTopicName` 

**Pour permettre à Vidéo Amazon Rekognition d’accéder à plusieurs rubriques Amazon SNS**

1. [Créez une fonction du service IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html?icmpid=docs_iam_console). Utilisez les informations suivantes pour créer la fonction du service IAM :

   1. Choisissez **Rekognition** pour le nom du service.

   1. Choisissez **Rekognition** pour le cas d’utilisation de la fonction de service. Vous devriez voir la politique **AmazonRekognitionServiceRole**d'autorisation répertoriée. **AmazonRekognitionServiceRole**permet à Amazon Rekognition Video d'accéder aux rubriques Amazon SNS préfixées par. *AmazonRekognition*

   1. Attribuez le nom de votre choix à la fonction du service.

1. Notez l’ARN de la fonction du service. Vous en aurez besoin pour démarrer les opérations d’analyse vidéo.

## Octroi de l’accès à une rubrique Amazon SNS existante
<a name="api-video-roles-single-topics"></a>

Vous pouvez créer une stratégie d’autorisations qui donne à Vidéo Amazon Rekognition l’accès à une rubrique Amazon SNS existante.

**Pour donner à Vidéo Amazon Rekognition l’accès à une rubrique Amazon SNS existante**

1. [ Créez une nouvelle stratégie d’autorisations avec l’éditeur de stratégie IAM JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor), et utilisez la stratégie suivante. Remplacez `topicarn` par l’Amazon Resource Name (ARN) de la rubrique Amazon SNS souhaitée.

1. [Créez une fonction du service IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html?icmpid=docs_iam_console), ou mettez à jour une fonction du service IAM existant. Utilisez les informations suivantes pour créer la fonction du service IAM :

   1. Choisissez **Rekognition** pour le nom du service.

   1. Choisissez **Rekognition** pour le cas d’utilisation de la fonction du service.

   1. Attachez la stratégie d’autorisations que vous avez créée à l’étape 1.

1. Notez l’ARN de la fonction du service. Vous en aurez besoin pour démarrer les opérations d’analyse vidéo.

# Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)
<a name="video-analyzing-with-sqs"></a>

Cette procédure vous montre comment détecter des étiquettes dans une vidéo en utilisant les opérations de détection d’étiquette Vidéo Amazon Rekognition, une vidéo stockée dans un compartiment Amazon S3 et une rubrique Amazon SNS. La procédure montre également comment utiliser une file d’attente Amazon SQS pour obtenir le statut d’achèvement à partir de la rubrique Amazon SNS. Pour de plus amples informations, veuillez consulter [Appeler les opérations de Vidéo Amazon Rekognition](api-video.md). Vous n’êtes pas limité à l’utilisation d’une file d’attente Amazon SQS. Par exemple, vous pouvez utiliser une AWS Lambda fonction pour obtenir le statut d'achèvement. Pour en savoir plus, consultez [Invocation des fonctions Lambda en utilisant des notifications Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html).

L’exemple de code de cette procédure montre comment effectuer les opérations suivantes :

1. Créer la rubrique Amazon SNS.

1. Créer la file d’attente Amazon SQS.

1. Accorder à Vidéo Amazon Rekognition l’autorisation de publier le statut d’achèvement d’une opération d’analyse vidéo dans la rubrique Amazon SNS.

1. Abonner la file d’attente Amazon SNS à la rubrique Amazon SNS.

1. Lancer la demande d'analyse vidéo en appelant [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html). 

1. Obtenir le statut d’achèvement à partir de la file d’attente Amazon SQS. L’exemple suit l’identifiant de tâche (`JobId`) renvoyé dans `StartLabelDetection` et obtient uniquement les résultats pour les identifiants de tâche correspondants qui sont lus à partir du statut d’achèvement. Ceci doit être pris en considération si d’autres applications utilisent la même file d’attente et la même rubrique. Par souci de simplicité, l’exemple supprime les tâches qui ne correspondent pas. Envisagez de les ajouter à une file d’attente de lettres mortes Amazon SQS pour un examen plus approfondi.

1. Obtenir et afficher les résultats de l'analyse vidéo en appelant [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html).

## Conditions préalables
<a name="video-prerequisites"></a>

L’exemple de code pour cette procédure est fourni en Java et Python. Le AWS SDK approprié doit être installé. Pour de plus amples informations, veuillez consulter [Premiers pas avec Amazon Rekognition](getting-started.md). Le compte AWS que vous utilisez doit avoir les autorisations d’accès à l’API Amazon Rekognition. Pour plus d’informations, consultez [Actions définies par Amazon Rekognition](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions). 

**Pour détecter des étiquettes dans une vidéo**

1. Configurez l’accès des utilisateurs à Vidéo Amazon Rekognition et configurez l’accès de Vidéo Amazon Rekognition à Amazon SNS. Pour de plus amples informations, veuillez consulter [Configuration de Vidéo Amazon Rekognition](api-video-roles.md). Vous n’avez pas besoin d’effectuer les étapes 3, 4, 5 et 6, car l’exemple de code crée et configure la rubrique Amazon SNS et la file d’attente Amazon SQS. 

1. Chargez un fichier vidéo au format MOV ou MPEG-4 dans un compartiment Amazon S3. À des fins de test, téléchargez une vidéo de 30 secondes au maximum.

   Pour en savoir plus, consultez [Chargement d’objets dans Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UploadingObjectsintoAmazonS3.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.

   

1. Utilisez les exemples de code suivants pour détecter des étiquettes dans une vidéo. 

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

   Dans la fonction `main` :
   + Remplacez `roleArn` par l’ARN de la fonction du service IAM que vous avez créé au cours de l’étape 7 de [Pour configurer Vidéo Amazon Rekognition](api-video-roles.md#configure-rekvid-procedure).
   + Remplacez les valeurs de `amzn-s3-demo-bucket` et `video` par le nom du compartiment et le nom du fichier vidéo que vous avez spécifiés à l’étape 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 ]

   Dans la fonction `main` :
   + Remplacez `roleArn` par l’ARN de la fonction du service IAM que vous avez créé au cours de l’étape 7 de [Pour configurer Vidéo Amazon Rekognition](api-video-roles.md#configure-rekvid-procedure).
   + Remplacez les valeurs de `amzn-s3-demo-bucket` et `video` par le nom du compartiment et le nom du fichier vidéo que vous avez spécifiés à l’étape 2. 
   + Remplacez la valeur de `profile_name` dans la ligne qui crée la session de Rekognition par le nom de votre profil de développeur.
   + Vous pouvez également inclure des critères de filtrage dans le paramètre des paramètres. Par exemple, vous pouvez utiliser un `LabelsInclusionFilter` ou un `LabelsExclusionFilter` à côté d’une liste de valeurs souhaitées. Dans le code ci-dessous, vous pouvez supprimer les commentaires de la section `Features` et `Settings` et fournir vos propres valeurs afin de limiter les résultats renvoyés aux seules étiquettes qui vous intéressent.
   + Dans l’appel à `GetLabelDetection`, vous pouvez fournir des valeurs pour les arguments `SortBy` et `AggregateBy`. Pour trier en fonction de l’heure, définissez la valeur du paramètre d’entrée `SortBy` sur `TIMESTAMP`. Pour trier en fonction de l’entité, utilisez le paramètre d’entrée `SortBy` avec la valeur appropriée pour l’opération que vous exécutez. Pour agréger les résultats par horodatage, définissez la valeur du paramètre `AggregateBy` sur `TIMESTAMPS`. Pour agréger par segment vidéo, utilisez `SEGMENTS`. 

   Dans l'exemple de code, placez la politique IAM suivante entre guillemets sur la ligne. `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 ]

   Dans l’exemple de code suivant :
   + Remplacez la valeur de `REGION` par le nom de la région d’exploitation de votre compte.
   + Remplacez la valeur de `amzn-s3-demo-bucket` par le nom du compartiment Amazon S3 qui contient votre fichier vidéo.
   + Remplacez la valeur de `videoName` par le nom du fichier vidéo dans votre compartiment Amazon S3.
   +  Remplacez la valeur de `profile_name` dans la ligne qui crée la session de Rekognition par le nom de votre profil de développeur. 
   + Remplacez `roleArn` par l’ARN de la fonction du service IAM que vous avez créé au cours de l’étape 7 de [Pour configurer Vidéo 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 ]

   Ce code est extrait du GitHub référentiel d'exemples du SDK de AWS documentation. Voir l’exemple complet [ici](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. Créez et exécutez le code. L’opération peut prendre un certain temps pour s’exécuter. Lorsqu’elle est terminée, une liste des étiquettes détectées dans la vidéo s’affiche. Pour de plus amples informations, veuillez consulter [Détection des étiquettes dans une vidéo](labels-detecting-labels-video.md).

# Analyse d'une vidéo à l'aide du AWS Command Line Interface
<a name="video-cli-commands"></a>

Vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour appeler les opérations Amazon Rekognition Video. Le modèle de conception est identique à celui de l'utilisation de l'API Amazon Rekognition Video avec AWS ou un autre AWS. AWS SDK pour Java SDKs Pour de plus amples informations, veuillez consulter [Présentation de l’API Vidéo Amazon Rekognition](video.md#video-api-overview). Les procédures suivantes montrent comment utiliser le AWS CLI pour détecter des étiquettes dans une vidéo.

Vous commencez à détecter des étiquettes dans une vidéo en appelant `start-label-detection`. Lorsque Amazon Rekognition a terminé l’analyse de la vidéo, le statut d’achèvement est envoyé à la rubrique Amazon SNS spécifiée dans le paramètre `--notification-channel` de `start-label-detection`. Vous pouvez obtenir le statut d’achèvement en abonnant une file d’attente Amazon Simple Queue Service (Amazon SQS) à la rubrique Amazon SNS. Vous pouvez ensuite interroger [receive-message](https://docs.aws.amazon.com/cli/latest/reference/sqs/receive-message.html) pour obtenir le statut d’achèvement à partir de la file d’attente Amazon SQS.

Lorsque vous appelez `StartLabelDetection`, vous pouvez filtrer vos résultats en fournissant des arguments de filtration aux arguments `LabelsInclusionFilter` et/ou `LabelsExclusionFilter`. Pour plus d’informations, consultez [Détection des étiquettes dans une vidéo](labels-detecting-labels-video.md).

La notification de statut d’achèvement est une structure JSON dans la réponse `receive-message`. Vous devez extraire le code JSON de la réponse. Pour plus d’informations sur le code JSON du statut d’achèvement, consultez [Référence : Notification des résultats d’une analyse vidéo](video-notification-payload.md). Si la valeur du champ `Status` du code JSON du statut d’achèvement est `SUCCEEDED`, vous pouvez obtenir les résultats de la demande d’analyse vidéo en appelant `get-label-detection`. Lorsque vous appelez `GetLabelDetection`, vous pouvez trier et agréger les résultats renvoyés à l’aide `SortBy` et `AggregateBy`.

Les procédures suivantes n’incluent pas le code requis pour interroger la file d’attente Amazon SQS. Elles n’incluent également pas le code requis pour analyser le code JSON renvoyé à partir de la file d’attente Amazon SQS. Pour obtenir un exemple en Java, consultez [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md). 

## Conditions préalables
<a name="video-prerequisites"></a>

Pour exécuter cette procédure, vous devez avoir AWS CLI installé le. Pour de plus amples informations, veuillez consulter [Premiers pas avec Amazon Rekognition](getting-started.md). Le compte AWS que vous utilisez doit avoir les autorisations d’accès à l’API Amazon Rekognition. Pour plus d’informations, [Actions définies par Amazon Rekognition](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions). 

**Pour configurer Vidéo Amazon Rekognition et télécharger une vidéo**

1. Configurez l’accès des utilisateurs à Vidéo Amazon Rekognition et configurez l’accès de Vidéo Amazon Rekognition à Amazon SNS. Pour de plus amples informations, veuillez consulter [Configuration de Vidéo Amazon Rekognition](api-video-roles.md).

1. Chargez un fichier vidéo au format MOV ou MPEG-4 dans votre compartiment S3. Pendant le développement et les tests, nous suggérons d’utiliser des vidéos courtes de moins de 30 secondes.

   Pour en savoir plus, consultez [Chargement d’objets dans Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UploadingObjectsintoAmazonS3.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.

**Pour détecter des étiquettes dans une vidéo**

1. Exécutez la AWS CLI commande suivante pour commencer à détecter les étiquettes dans une vidéo.

   ```
   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"]}}
   ```

   Mettez à jour les valeurs suivantes :
   + Remplacez `amzn-s3-demo-bucket` et `videofile` par le nom du compartiment Amazon S3 et le nom du fichier que vous avez spécifiés à l’étape 2.
   + Remplacez `us-east-1` par la région AWS que vous utilisez.
   + Remplacez la valeur de `profile_name` dans la ligne qui crée la session de Rekognition par le nom de votre profil de développeur.
   + Remplacez `TopicARN` par l’ARN de la rubrique Amazon SNS que vous avez créée à l’étape 3 de [Configuration de Vidéo Amazon Rekognition](api-video-roles.md).
   + Remplacez `RoleARN` par l’ARN de la fonction du service que vous avez créé à l’étape 7 de [Configuration de Vidéo Amazon Rekognition](api-video-roles.md).
   + Si nécessaire, vous pouvez spécifier le `endpoint-url`. La CLI AWS doit déterminer automatiquement l’URL du point de terminaison approprié en fonction de la région fournie. Toutefois, si vous utilisez un point de terminaison [de votre VPC privé](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#what-is-privatelink), il peut être nécessaire de spécifier le `endpoint-url`. La ressource [AWS Service Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints) répertorie la syntaxe permettant de spécifier les URL des points de terminaison ainsi que les noms et codes de chaque région.
   + Vous pouvez également inclure des critères de filtrage dans le réglage des paramètres. Par exemple, vous pouvez utiliser un `LabelsInclusionFilter` ou un `LabelsExclusionFilter` à côté d’une liste de valeurs souhaitées.

    Si vous accédez à la CLI sur un périphérique Windows, utilisez des guillemets doubles au lieu de guillemets simples et évitez les guillemets doubles internes par une barre oblique inverse (c’est-à-dire \$1) pour corriger les erreurs d’analyse que vous pourriez rencontrer. Pour un exemple, voir ci-dessous : 

   ```
   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. Notez la valeur de `JobId` dans la réponse. La réponse est semblable à l’exemple JSON suivant.

   ```
   {
       "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn"
   }
   ```

1. Écrivez le code pour interroger la file d’attente Amazon SQS sur le statut d’achèvement JSON (à l’aide de [receive-message](https://docs.aws.amazon.com/cli/latest/reference/sqs/receive-message.html)).

1. Écrivez le code pour extraire le champ `Status` du code JSON de statut d’achèvement.

1. Si la valeur de `Status` est`SUCCEEDED`, exécutez la AWS CLI commande suivante pour afficher les résultats de détection des étiquettes.

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

   Mettez à jour les valeurs suivantes :
   + Remplacez `JobId` par l’identifiant de tâche que vous avez noté à l’étape 2.
   + Remplacez `Endpoint` et `us-east-1` par le point de terminaison et la région AWS que vous utilisez.

   Les résultats sont semblables à l’exemple JSON suivant :

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

# Référence : Notification des résultats d’une analyse vidéo
<a name="video-notification-payload"></a>

Amazon Rekognition publie les résultats d’une demande d’analyse Vidéo Amazon Rekognition, y compris l’état d’achèvement, dans une rubrique Amazon Simple Notiﬁcation Service (Amazon SNS). Pour recevoir la notification d'une rubrique Amazon SNS, utilisez une file d'attente ou une AWS Lambda fonction Amazon Simple Queue Service. Pour de plus amples informations, veuillez consulter [Appeler les opérations de Vidéo Amazon Rekognition](api-video.md). Pour obtenir un exemple, consultez [Analyse d’une vidéo stockée dans un compartiment Amazon S3 avec Java or Python (SDK)](video-analyzing-with-sqs.md).

La charge utile est au format JSON suivant :

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


| Nom | Description | 
| --- | --- | 
|  JobId  |  Identifiant de tâche. Correspond à l'identifiant de tâche renvoyé par une opération `Start`, par exemple [StartPersonTracking](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartPersonTracking.html).  | 
|  Statut  |  Statut de la tâche. Les valeurs valides sont SUCCEEDED, FAILED ou ERROR.  | 
|  API  |  Opération Vidéo Amazon Rekognition utilisée pour analyser la vidéo d’entrée.  | 
|  JobTag  |  Identifiant de la tâche. Vous spécifiez `JobTag` dans un appel à une opération Start, par exemple [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html).  | 
|  Horodatage  |  L’horodatage Unix du moment où la tâche s’est terminée.  | 
|  Vidéo  |  Détails sur la vidéo qui a été traitée. Comprend le nom du fichier et le compartiment Amazon S3 dans lequel le fichier est stocké.  | 

L’exemple suivant montre une notification réussie envoyée à une rubrique 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"
  }
}
```

# Résolution des problèmes liés à Vidéo Amazon Rekognition
<a name="video-troubleshooting"></a>

La section suivante fournit des informations de dépannage relatives à l’utilisation de Vidéo Amazon Rekognition et des vidéos stockées.

## Je ne reçois jamais le statut d’achèvement qui est envoyé à la rubrique Amazon SNS
<a name="video-no-sns-topic"></a>

 Vidéo Amazon Rekognition publie les informations sur le statut dans une rubrique Amazon SNS à la fin de l’analyse d’une vidéo. En général, vous obtenez le message relatif au statut d’achèvement en vous abonnant à la rubrique dotée d’une fonction de file d’attente Amazon SQS, ou d’une fonction Lambda. Pour tenter de résoudre votre problème, abonnez-vous à la rubrique Amazon SNS par e-mail afin de recevoir les messages qui sont envoyés à votre rubrique Amazon SNS dans votre boîte de réception. Pour plus d’informations, consultez [Abonnement à une rubrique Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html).

Si vous ne recevez pas le message dans votre application, prenez en considération les éléments suivants :
+ Vérifiez que l’analyse est terminée. Vérifiez la valeur `JobStatus` dans la réponse de l’opération Get (`GetLabelDetection`, par exemple). Si la valeur est `IN_PROGRESS`, l’analyse n’est pas terminée, et le statut d’achèvement n’a pas encore été publié dans la rubrique Amazon SNS.
+ Vérifiez que vous disposez d’une fonction du service IAM autorisant Vidéo Amazon Rekognition à publier dans vos rubriques Amazon SNS. Pour de plus amples informations, veuillez consulter [Configuration de Vidéo Amazon Rekognition](api-video-roles.md). 
+ Vérifiez que la fonction du service IAM que vous utilisez peut publier sur la rubrique Amazon SNS à l’aide des informations d’identification du rôle, et que les autorisations de votre fonction du service sont correctement limitées aux ressources que vous utilisez. Pour ce faire, procédez comme suit :
  + Récupérez l’Amazon Resource Name (ARN) d’utilisateur :

    ```
    aws sts get-caller-identity --profile RekognitionUser 
    ```
  + Ajoutez une relation d’approbation au rôle d’utilisateur ARN. Pour plus d’informations, consultez [Modification d’un rôle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html). L’exemple de politique de confiance suivant spécifie les informations d’identification du rôle de l’utilisateur et limite les autorisations de la fonction du service aux seules ressources que vous utilisez (pour plus d’informations sur la limitation sécurisée de l’étendue des autorisations d’une fonction du service, voir [Prévention du problème de l’adjoint confus entre services](cross-service-confused-deputy-prevention.md)) :
  + Prenez le rôle : `aws sts assume-role --role-arn arn:Role ARN --role-session-name SessionName --profile RekognitionUser`
  + Publiez dans une rubrique Amazon SNS :`aws sns publish --topic-arn arn:Topic ARN --message "Hello World!" --region us-east-1 --profile RekognitionUser`

  Si la commande AWS CLI fonctionne, vous recevez le message (dans votre boîte de réception, si vous vous êtes abonné au sujet par e-mail). Si vous ne recevez pas le message :
  + Vérifiez que vous avez correctement configuré Vidéo Amazon Rekognition. Pour de plus amples informations, veuillez consulter [Configuration de Vidéo Amazon Rekognition](api-video-roles.md).
  + Consultez les autres conseils de dépannage pour cette question.
+ Vérifiez que vous utilisez la rubrique Amazon SNS adéquate :
  + Si vous utilisez une fonction du service IAM pour permettre à Vidéo Amazon Rekognition d’accéder à une seule rubrique Amazon SNS, vérifiez que vous avez accordé les autorisations pour la rubrique Amazon SNS adéquate. Pour de plus amples informations, veuillez consulter [Octroi de l’accès à une rubrique Amazon SNS existante](api-video-roles.md#api-video-roles-single-topics).
  + Si vous utilisez un rôle de service IAM pour donner à Amazon Rekognition Video l'accès à plusieurs rubriques SNS, vérifiez que vous utilisez la bonne rubrique et que le nom de la rubrique est précédé d'un. *AmazonRekognition* Pour de plus amples informations, veuillez consulter [Accorder l’accès à plusieurs rubriques Amazon SNS](api-video-roles.md#api-video-roles-all-topics). 
  + Si vous utilisez une AWS Lambda fonction, vérifiez que votre fonction Lambda est abonnée à la rubrique Amazon SNS appropriée. Pour de plus amples informations, consultez [Diffusion en éventail vers fonctions Lambda](https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html).
+ Si vous abonnez une file d’attente Amazon SQS à votre rubrique Amazon SNS, vérifiez que votre rubrique Amazon SNS est autorisée à envoyer des messages à la file d’attente Amazon SQS. Pour en savoir plus, consultez [Donner l’autorisation d’envoi de messages à la rubrique Amazon SNS pour envoyer des messages à la file d’attente Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html#SendMessageToSQS.sqs.permissions).

## J’ai besoin d’une aide supplémentaire pour résoudre des problèmes liés à la rubrique Amazon SNS
<a name="video-troubleshoot-sns"></a>

Vous pouvez utiliser AWS X-Ray Amazon SNS pour suivre et analyser les messages qui transitent par votre application. Pour plus d'informations, consultez [Amazon SNS et. AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sns.html)

Pour obtenir de l’aide supplémentaire, vous pouvez publier votre question sur le forum [Amazon Rekognition](https://forums.aws.amazon.com/forum.jspa?forumID=234) ou envisager de vous inscrire au [support technique AWS](https://aws.amazon.com/premiumsupport/).