30
Escanea videos de Amazon S3 para moderación de contenido utilizando Amazon Scan Amazon Rekognition.. CDK deploy
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.

La arquitectura que plantea Virgil Ennes en su publicación, consiste en 6 partes
Para esta zona de juego le hice algunas modificaciones.

Para crear la aplicación debes seguir los siguientes pasos:
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.
git clone https://github.com/elizabethfuentes12/AWS_ScanVideoS3Rekognition
cd AWS_ScanVideoS3Rekognition/ScanVideoS3Rekognition
python3 -m venv .venv
source .venv/bin/activate
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.
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'
Antes de iniciar debes agregar una dirección de correo valida en scan_video_s3_rekognition.py :
email="tucorreo@correo.com"
En el GitHub esta el código listo para desplegar, a continuación una breve explicación:
Lambdas:
startModerationLabelDetection = rekognition.start_content_moderation(
Video = {'S3Object': {
'Bucket' : bucket1,
'Name' : filename, }
},
ClientRequestToken = userIdentity,
NotificationChannel = {
'SNSTopicArn': SNS_REKOGNITION,
'RoleArn': SNS_ROLE_ARN_REKOGNITION
},
JobTag = userIdentity)
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
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
getContentModeration = rekognition.get_content_moderation(
JobId = moderationJobId,
SortBy = 'TIMESTAMP')
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())
})
y enviá el correo con SNS.
message = client.publish(TargetArn = SNS_ARN,
Message = mailer,
Subject ='Amazon Rekognition Video Detection')
Para que el ambiente pueda desplegarse, debemos agregar todas las librerías CDK necesarias en el archivo requirements.txt
pip install -r requirements.txt
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
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
Procedemos a desplegar la aplicación:
cdk deploy
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
o simplemente exporte en una variable de entorno
export AWS_PROFILE=mi-profile-custom
cdk deploy
Cuando realices el despliegue te llegara un correo solicitando confirmación para la suscripción del SNS, el correo es como este:

Y cuando aceptes debes ver el siguiente mensaje:

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
Accede al bucket y carga el video, recuerda que debe ser en formato .mp4

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:

Y cada Item debe tener la siguiente estructura:

Con esta data en DynamoDB puedes hacer dashboard en Amazon Quicksight, hacer ETL con AWS Glue... en realidad todo lo que te ocurra. 🧞♂️🌈🌪️🔥💥🐲🛼🏰🎡🚀🛸🛰️
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
ó via consola cloudformation, seleccione el stack (mismo nombre del proyecto cdk) y lo borra.
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 Lambda es un servicio de computo sin servidor que le permite ejecutar código sin aprovisionar ni administrar servidores.
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.
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.
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
30