[AWS] Coût d'une solution Serverless d'analyse vidéo temps réel

Nous souhaitons mettre en place une solution d’analyse vidéo temps réel à partir d’un parc de caméras IP positionnées sur les parkings et stations-service partout en Europe dans le but d’alerter la sécurité lorsqu’un véhicule suspect est détecté (par sa plaque d’immatriculation).
Pour répondre à cela, AWS permet, grâce à sa panoplie de services managés, de déployer une architecture telle que celle-ci :

Architecture complète (détaillée dans cet article) :

Hypothèses :

  • Nous disposons donc de 1000 caméras IP filmant en continu en 720p à 24 images/sec (en supposant que les caméras intègrent la vision nocturne)
  • Les caméras disposent de la détection de mouvement, et on considère que sur les 1440 minutes qu’il y a dans une journée, seulement 300 minutes sont capturées (soit environ 20%), car les mouvements sont rares (parkings, stations-services), ce qui est d’autant plus vrai la nuit
  • Chacune de ces caméras génère 5 Go de vidéo par jour, soit 5 To/j pour l’ensemble des 1000 caméras du parc
  • Le flux vidéo cumulé est donc d’environ 60 Mo/sec en moyenne pour l’ensemble du parc
  • Nous utilisons la région eu-west-1 (Irlande) d’AWS (qui propose des tarifs intéressants, tout en conservant les données en Europe)
  • Les flux vidéos sont conservés 1 mois

Coûts des services AWS

Attention : les chiffres présentés ci-dessous ne sont que des estimations

1. Amazon Kinesis Video Streams

Tarifs en vigueur à l’heure de rédaction de cet article :

Ingestion de données dans Kinesis Video Streams (par Go de données ingérées) 0,00944 USD
Consommation de données depuis Kinesis Video Streams (par Go de données extraites) 0,00944 USD
Stockage de données dans Kinesis Video Streams (par Go-mois de données stockées) 0,02300 USD

(source : https://aws.amazon.com/fr/kinesis/video-streams/pricing/)
Soit dans notre cas :

  • Données ingérées = 30 jours * (5 * 1 024) Go * (0,00944 USD/Go) = 1450 USD
  • Données consommées = Données ingérées = 1450 USD (chaque donnée ingérée sera consommée)
  • Données stockées = (5 * 1 024) Go * (0,023 USD/Go) = 118 USD
  • Total : 3018 USD

2. Amazon Rekognition

Solution 1 : Rekognition Video

Nombre de minutes de vidéo à analyser par mois = 1000 (caméras) * 30 (jours) * 300 minutes capturées = 9 000 000 minutes.
Tarifs en vigueur à l’heure de rédaction de cet article : 0,12 USD par minute de flux vidéo analysée.
(source : https://aws.amazon.com/fr/rekognition/pricing/)
Soit dans notre cas : 9 000 000 * 0.12 USD = 1 080 000 USD.

Solution 2 : Rekognition Image

Pour diminuer la facture de Rekognition, on peut considérer qu’il n’est pas nécessaire d’analyser les 24 images/sec des vidéos, mais on pourrait analyser une image extraite de ces vidéos toutes les 5 secondes, soit une image sur 120.
Il reste néanmoins pertinent de recevoir et conserver les vidéos en 24 images/sec, afin de pouvoir les visionner de manière fluide si nécessaire.
Pour cela il faut ajouter une fonction Lambda d’extraction d’images ainsi qu’un Bucket S3 pour stocker les images extraites, comme dans la solution présentée ici :
https://aws.amazon.com/fr/answers/media-entertainment/video-frame-based-analysis/
Cette fonction Lambda traiterait à chaque fois 1 minute de vidéos pour en extraire donc 12 images.
Elle serait donc appelée 9 000 000 de fois par mois pour générer 108 000 000 d’images (de 1 Mo chacune, et autant d’entrées dans DynamoDB), lesquelles occuperaient donc un total de 108 To sur S3.
Tarifs en vigueur à l’heure de rédaction de cet article :

  • S3 (avec choix du mode RRS (Reduced Redundancy Storage) car les images sont reproductibles) :
    • 108 To (à 0,024 USD par Go environ) = 2654 USD
    • 108 000 000 opérations GET * (0,004 USD par tranche de 10 000 demandes) = 43,2 USD
  • Lambda : 108 000 000 d’appels * 0,000000834 * 5000 ms / 100 (5 secondes d’exécution à 0,000000834 USD par 100 ms (sur 512 Mo de mémoire)) = 4503 USD
  • DynamoDB : moins de 100 USD par mois pour stocker les métadonnées

Soit un total d’environ 7300 USD.

3. Amazon Lambda

A l’issue de la détection des plaques d’immatriculation, une fonction Lambda est déclenchée régulièrement (toutes les 10 minutes par exemple) pour scanner par lots (éventuellement via AWS Batch) les dernières données détectées dans les vidéos, stockées dans DynamoDB ou Redshift par exemple, et les compare à une liste de plaques d’immatriculation recensées comme suspectes, stockées également dans DynamoDB ou Redshift.
Hypothèses :

  • La fonction Lambda ne nécessite pas plus de 128 Mo
  • Elle s’exécute en moins d’1 seconde
  • Elle est exécutée 144 fois par jour, soit environ 4320 fois par mois

Tarifs en vigueur à l’heure de rédaction de cet article :

  • Nombre de secondes offertes par mois : 3 200 000
  • Tarif par 100 ms : 0,000000208 USD

Soit dans notre cas :

  • Nombre de secondes de traitement consommées par mois : 4320 secondes (< 3 200 000 secondes (offertes))
  • Total : 0 USD

Remarques :

  • Le cold start d’une fonction Lambda est la phase d’initialisation (téléchargement des packages + chargement en mémoire)
  • Cette phase peut être longue et peut « plomber » les performances du traitement, mais n’intervient qu’à la 1ère exécution (ou lorsque la fonction n’a pas été exécutée pendant plus de 3h, ce qui n’est pas notre cas)

4. Amazon SNS (Simple Notification Service)

Lorsque des plaques d’immatriculation suspectes sont détectées, alors SNS est déclenché par la précédente fonction Lambda afin d’envoyer une notification par e-mail (à une liste de diffusion) contenant la liste des plaques identifiées, ainsi que l’heure et le lieu de détection.
Tarifs en vigueur à l’heure de rédaction de cet article : 2 USD par 100 000 e-mails (au-delà des 1000 gratuits).
Dans notre, le coût sera donc quasiment nul.

Coût total

Avec la solution 2 de reconnaissance d’images, le coût total mensuel s’élèverait donc à :

  • 3018 USD + 7300 USD = 10 318 USD par mois
  • Soit environ 10 USD par caméra par mois

3 réflexions sur “[AWS] Coût d'une solution Serverless d'analyse vidéo temps réel”

  1. Bonjour,
    Cet article est très intéressant.
    Est-ce que vous avez une analyse des implications de cette initiative sur le plan du respect de la réglementation sur la protection des données personnelles?
    Merci

  2. Romain Spinelli

    Bonjour,
    Merci pour votre commentaire.
    Le déclencheur est à définir dans votre fonction Lambda (Kinesis ou S3 seront les 2 types de déclencheurs adaptés dans votre cas).
    Kinesis Video Streams stocke les flux dans S3, une fonction Lambda peut donc être déclenchée sur détection de nouvelles données entrantes dans S3 ou par « polling » à intervalles de temps réguliers.
    Cordialement.

  3. Bonjour,
    votre article est très instructif.
    Dans le schéma il a un « Amazon Kinesis Stream » et pas de « Kinesis video streams ».
    Je n’ai pas trouvé le moyen de déclencher une fonction Lambda (3) avec un « Kinesis video streams »
    Finalement vous utilisez le Amazon Kinesis Stream ou le Kinesis video streams?
    Cordialement

Les commentaires sont fermés.