DEV Community

Cover image for Escanea videos de Amazon S3 para moderaci贸n de contenido utilizando Amazon Scan Amazon Rekognition.. CDK deploy
Elizabeth Fuentes L
Elizabeth Fuentes L

Posted on • Updated on

 

Escanea videos de Amazon S3 para moderaci贸n de contenido utilizando Amazon Scan Amazon Rekognition.. CDK deploy

馃嚮馃嚜馃嚚馃嚤 Dev.to Linkedin GitHub Twitter Instagram Youtube

github: https://github.com/elizabethfuentes12/AWS_ScanVideoS3Rekognition

Introducci贸n

Revisando arquitecturas me encontr茅 con esta arquitectura s煤per genial馃槺, que crea una aplicaci贸n capaz de escanear videos alojados en Buckets de S3 y con operaciones Batch de S3 y Amazon Rekognition permite identificar el tipo de contenido que este contiene.

Tratar con contenido a gran escala es a menudo desafiante, costoso y una operaci贸n pesada. El volumen de contenido generado por usuarios y de terceros ha aumentado sustancialmente en industrias como las redes sociales, el comercio electr贸nico, la publicidad en l铆nea y el intercambio de medios. Es posible que los clientes deseen revisar este contenido para asegurarse de que cumple con las regulaciones y el gobierno corporativo. Pero necesitan una soluci贸n para manejar la escala y la automatizaci贸n.


Arquitectura 馃 鈿欙笍

Diagrama

La arquitectura que plantea Virgil Ennes en su publicaci贸n, consiste en 6 partes

  1. El trabajo por Batch de S3 lee el archivo de video.
  2. El trabajo por Batch de S3 invoca la funci贸n Lambda.
  3. La funci贸n Lambda invoca Amazon Rekogintion para realizar la revisi贸n de moderaci贸n de contenido en el video.
  4. La actividad se registra en Amazon CloudWatch.
  5. Las etiquetas encontradas por Amazon Rekogintion son almacenadas en una DynamoDB.
  6. Amazon SNS env铆a una notificaci贸n por correo electr贸nico.

Mi Arquitectura 馃懇馃徎 鈿欙笍 馃О

Para esta zona de juego le hice algunas modificaciones.

Diagrama_2

  1. Al agregar el video en el Bucket data-bucket este activa un Event Notification que gatilla la Lambda_invokes_Rekognition. Solo procesa videos en mp4, debes asegurar que sea mp4
  2. Lambda_invokes_Rekognition invoca Amazon Rekogintion para realizar la revisi贸n de moderaci贸n de contenido en el video, con la API getContentModeration.
  3. Una vez lista la revisi贸n del contenido Amazon Rekogintion notifica a traves de SNS a la lambda Lambda_porcess_Rekognition que esta listo el proceso. Esto lo modifique debido a que la lamnbda de la arquitectura original no finaliza hasta que Amazon Rekognition informe que el proceso es exitoso, si el video es muy largo la lambda quedar谩 a la espera por mucho tiempo lo cual no es costo efectivo.
  4. La Lambda_porcess_Rekognition procesa los resultados de la revision de Amazon Rekognition invocando a getContentModeration.
  5. Las etiquetas encontradas por Amazon Rekogintion son almacenadas en una DynamoDB.
  6. Amazon SNS env铆a una notificaci贸n por correo electr贸nico.

Despliegue 馃殌 馃懇馃徎鈥嶐煔

Para crear la aplicaci贸n debes seguir los siguientes pasos:

1. Instalar CDK

Para realizar el despliegue de los recursos, debes instalar y configurar la cli (command line interface) de CDK, en este caso estamos utilizando CDK con Python.

Instalaci贸n y configuraci贸n de CDK

Documentaci贸n CDK para Python

2. Clonamos el repo y vamos la carpeta de nuestro proyecto.

git clone https://github.com/elizabethfuentes12/AWS_ScanVideoS3Rekognition
cd AWS_ScanVideoS3Rekognition/ScanVideoS3Rekognition
Enter fullscreen mode Exit fullscreen mode

3. Creamos e iniciamos el ambiente virtual

python3 -m venv .venv
source .venv/bin/activate
Enter fullscreen mode Exit fullscreen mode

Este ambiente virtual (venv) nos permite aislar las versiones del python que vamos a utilizar como tambi茅n de librer铆as asociadas. Con esto podemos tener varios proyectos con distintas configuraciones.

4. Explicaci贸n del c贸digo

Esta herramienta esta desplegada en us-east-1, si quieres cambiar la regi贸n debes hacerlo en scan_video_s3_rekognition.py

REGION_NAME = 'tu_region'
Enter fullscreen mode Exit fullscreen mode

Antes de iniciar debes agregar una direcci贸n de correo valida en scan_video_s3_rekognition.py :

email="tucorreo@correo.com"
Enter fullscreen mode Exit fullscreen mode

En el GitHub esta el c贸digo listo para desplegar, a continuaci贸n una breve explicaci贸n:

Lambdas:

  • lambda_invokes_rekognition : Lambda que invoca Amazon Rekogintion para realizar la revisi贸n de moderaci贸n de contenido en el video, con la API getContentModeration y subscribe al SNS Topic para que se notifique una vez termine la revisi贸n.
startModerationLabelDetection = rekognition.start_content_moderation(
            Video = {'S3Object': {
                     'Bucket'  : bucket1, 
                     'Name'    : filename, }
                     },
            ClientRequestToken = userIdentity,
            NotificationChannel = {
            'SNSTopicArn': SNS_REKOGNITION,
            'RoleArn': SNS_ROLE_ARN_REKOGNITION
                                },
            JobTag = userIdentity)
Enter fullscreen mode Exit fullscreen mode

Puedes informarte m谩s sobre esta API en la documentaci贸n:
https://docs.aws.amazon.com/cli/latest/reference/rekognition/start-content-moderation.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html#Rekognition.Client.start_content_moderation

  • lambda_process_Rekognition : Lambda que procesa los resultados de la revisi贸n de Amazon Rekognition invocando a getContentModeration,
getContentModeration = rekognition.get_content_moderation(
              JobId  = moderationJobId,
              SortBy = 'TIMESTAMP')
Enter fullscreen mode Exit fullscreen mode

escribe en DynamoDB

table.put_item(
                    Item={
                        "Id": str(uuid.uuid4()),
                        'Timestamp': timestamp,
                        "Jobtag" : request["JobTag"],
                        'Confidence': str(round(conf_level, 1)),
                        'Name': name,
                        'ParentName': parent,
                        'Video': filename,
                        'Date': str(datetime.datetime.now())
                    })
Enter fullscreen mode Exit fullscreen mode

y envi谩 el correo con SNS.

message = client.publish(TargetArn = SNS_ARN, 
                         Message   = mailer,
                         Subject ='Amazon Rekognition Video Detection')
Enter fullscreen mode Exit fullscreen mode

5. Instalamos los requerimientos para el ambiente de python

Para que el ambiente pueda desplegarse, debemos agregar todas las librer铆as CDK necesarias en el archivo requirements.txt

pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

6. Desplegando la aplicaci贸n

Previo al despliegue de la aplicaci贸n en AWS Cloud debemos asegurarnos que este sin errores para que no salten errores durante el despliegue, eso lo hacemos con el siguiente comando que genera un template de cloudformation con nuestra definici贸n de recursos en python.

cdk synth
Enter fullscreen mode Exit fullscreen mode

Si hay alg煤n error en tu c贸digo este comando te indicara cual es con su ubicaci贸n.

En el caso de estar cargando una nueva versi贸n de la aplicaci贸n puedes revisar que es lo nuevo con el siguiente comando:

cdk diff
Enter fullscreen mode Exit fullscreen mode

Procedemos a desplegar la aplicaci贸n:

cdk deploy
Enter fullscreen mode Exit fullscreen mode

7. Tips Para el despliegue

El despliegue lo utiliza utilizando las credenciales por defecto de AWS, si desea usar un profile espec铆fico agregue --profile al comando deploy:

cdk deploy --profile mi-profile-custom
Enter fullscreen mode Exit fullscreen mode

o simplemente exporte en una variable de entorno

export AWS_PROFILE=mi-profile-custom
cdk deploy
Enter fullscreen mode Exit fullscreen mode

8. La aplicaci贸n

Cuando realices el despliegue te llegara un correo solicitando confirmaci贸n para la suscripci贸n del SNS, el correo es como este:

confirmacion

Y cuando aceptes debes ver el siguiente mensaje:

aceptado

Esto es importante porque, ya que de lo contrario no recibir谩s el e-mail.

Para iniciar la aplicaci贸n debes identificar el bucket S3 en el Stack de cloudformation, el nombre del bucket debe ser algo como:

s3://scan-video-s3-rekognition-databucketxxxxxxxxxx
Enter fullscreen mode Exit fullscreen mode

Accede al bucket y carga el video, recuerda que debe ser en formato .mp4

bucket

Cuando cargues el archivo de video las lambdas se empezaran a ejecutar, esto puede tardar unos minutos mientras lo puedes monitorear en Amazon CloudWatch.

Una vez finalizada la revisi贸n podr谩s ser capaz de ver las etiquetas del video en Dynamodb:

Dynamodb

Y cada Item debe tener la siguiente estructura:

Item

Con esta data en DynamoDB puedes hacer dashboard en Amazon Quicksight, hacer ETL con AWS Glue... en realidad todo lo que te ocurra. 馃鈥嶁檪锔忦煂堭煂笍馃敟馃挜馃惒馃浖馃彴馃帯馃殌馃浉馃洶锔

9. Eliminar el stack de la aplicaci贸n

Esta aplicaci贸n no elimina el bucket si contiene videos, por lo que primero debes vaciar el bucket y luego proceder a destruir el stak.

Para eliminar el stack lo puedes hacer v铆a comando:

cdk destroy
Enter fullscreen mode Exit fullscreen mode

贸 via consola cloudformation, seleccione el stack (mismo nombre del proyecto cdk) y lo borra.

隆隆Happy developing 馃榿!!


Adicional

  • Te dejo este proyecto m谩s grande que te puede interesar

https://github.com/aws-samples/amazon-rekognition-serverless-large-scale-image-and-video-processing

  • Una soluci贸n que puedes agregar al principio que convierta el video previamente a formato mp4

AWS Elemental MediaConvert

  • La arquitectura original

https://aws.amazon.com/es/blogs/machine-learning/scan-amazon-s3-buckets-for-content-moderation-using-s3-batch-and-amazon-rekognition/


Servicios involucrados en la soluci贸n son

Amazon S3 (Simple Storage Service):

S3 es un servicio de computo sin servidor que le permite ejecutar c贸digo sin aprovisionar ni administrar servidores.

Amazon Rekognition Video:

Amazon Rekognition Video
Amazon Rekognition le permite analizar im谩genes y videos autom谩ticamente en sus aplicaciones y contenido. Proporciona una imagen o un video a la API de Amazon Rekognition, y el servicio puede identificar los objetos, las personas, el texto, las escenas y las actividades, adem谩s de detectar cualquier contenido inapropiado.

Amazon Rekognition Video es un servicio de an谩lisis de videos con tecnolog铆a de aprendizaje autom谩tico que detecta objetos, escenas, celebridades, texto, actividades y cualquier contenido inapropiado en los videos almacenados en Amazon S3. Rekognition Video tambi茅n proporciona un an谩lisis de rostros muy preciso y funciones de b煤squeda de rostros para detectarlos, analizarlos y compararlos; y ayuda a comprender el movimiento de las personas en los videos.

AWS Lamdba:

AWS Lambda es un servicio de computo sin servidor que le permite ejecutar c贸digo sin aprovisionar ni administrar servidores.

Amazon DynamoDB:

Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un desempe帽o r谩pido y predecible, as铆 como una escalabilidad 贸ptima. DynamoDB le permite reducir las cargas administrativas que supone tener que utilizar y escalar una base de datos distribuida, lo que le evita tener que preocuparse por el aprovisionamiento del hardware, la configuraci贸n y la configuraci贸n, la replicaci贸n, los parches de software o el escalado de cl煤steres.

Amazon Simple Notification Service (SNS)

SNS es un servicio de mensajer铆a completamente administrado para la comunicaci贸n aplicaci贸n a aplicaci贸n (A2A) y aplicaci贸n a persona (A2P).

La funcionalidad de publicaci贸n/suscripci贸n A2A brinda temas para la mensajer铆a de alto rendimiento, de muchos a muchos, basada en push entre sistemas distribuidos, microservicios y aplicaciones sin servidores controladas por eventos. Mediante el uso de temas de Amazon SNS, los sistemas de publicadores pueden distribuir los mensajes a una gran cantidad de sistemas de suscriptores, entre otros, colas de Amazon SQS, funciones de AWS Lambda y puntos de enlace HTTPS, para procesamiento paralelo y Amazon Kinesis Data Firehose. La funcionalidad A2P permite enviar mensajes a usuarios a escala a trav茅s de SMS, email y push m贸vil.

CDK (Cloud Development Kit):

El kit de desarrollo de la nube de AWS (AWS CDK) es un framework de c贸digo abierto que sirve para definir los recursos destinados a aplicaciones en la nube mediante lenguajes de programaci贸n conocidos.

Una vez lo conozcas... no vas a querer desarrollar aplicaciones en AWS de otra forma ;)

Conoce m谩s ac谩: CDK



隆Gracias!

Te dejo mis redes:
Dev.to Linkedin GitHub Twitter Instagram Youtube

Sigue mi comunidad:
AWS Girls Chile
AWS Girls Chile Instagram
AWS Girls Chile Youtube
AWS Girls Chile meetup

Top comments (0)

50 CLI Tools You Can't Live Without

The top 50 must-have CLI tools, including some scripts to help you automate the installation and updating of these tools on various systems/distros.