Linkedinpost New.jpg

Muchos clientes, incluidos los de publicidad creativa, medios y entretenimiento, comercio electrónico y moda, a menudo necesitan cambiar el fondo de una gran cantidad de imágenes. Normalmente, esto implica editar manualmente cada imagen con un software fotográfico. Esto puede requerir mucho esfuerzo, especialmente para grandes lotes de imágenes. Sin embargo, Roca Amazónica y Funciones de paso de AWS simplifique la automatización de este proceso a escala.

Amazon Bedrock ofrece el modelo básico de IA generativa Generador de imágenes Amazon Titan G1que puede cambiar automáticamente el fondo de una imagen usando una técnica llamada pintar. Step Functions le permite crear un flujo de trabajo automatizado que se conecta perfectamente con Amazon Bedrock y otros servicios de AWS. Juntos, Amazon Bedrock y Step Functions agilizan todo el proceso de cambio automático de fondos en varias imágenes.

Esta publicación presenta una solución que simplifica el proceso de cambiar fondos en varias imágenes. Aprovechando las capacidades de IA generativa con Amazon Bedrock y el modelo Titan Image Generator G1, combinado con Step Functions, esta solución genera eficientemente imágenes con el fondo deseado. Esta publicación brinda información sobre el funcionamiento interno de la solución y lo ayuda a comprender las opciones de diseño tomadas para crear esta propia solución personalizada.

Ver el repositorio de GitHub para obtener instrucciones detalladas sobre cómo implementar esta solución.

Descripción general de la solución

Veamos cómo funciona la solución a un alto nivel antes de profundizar en elementos específicos y los servicios de AWS utilizados. El siguiente diagrama proporciona una vista simplificada de la arquitectura de la solución y resalta los elementos clave.

El flujo de trabajo consta de los siguientes pasos:

  1. Un usuario carga varias imágenes en un Servicio de almacenamiento simple de Amazon (Amazon S3) a través de una aplicación web Streamlit.
  2. La aplicación web Streamlit llama a un Puerta de enlace API de Amazon Punto final API REST integrado con el Reconocimiento de Amazon API de detección de etiquetasque detecta etiquetas para cada imagen.
  3. Tras el envío, la aplicación web Streamlit actualiza una AmazonDynamoDB tabla con detalles de la imagen.
  4. La actualización de DynamoDB desencadena una AWS Lambda función, que inicia un flujo de trabajo de Step Functions.
  5. El flujo de trabajo de Step Functions ejecuta los siguientes pasos para cada imagen:
    5.1 Construye una carga útil de solicitud para Amazon Bedrock InvokeModel API.
    5.2 Invoca el lecho de roca del Amazonas InvokeModel Acción API.
    5.3 Analiza una imagen de la respuesta y la guarda en una ubicación de S3.
    5.4 Actualiza el estado de la imagen en una tabla de DynamoDB.
  6. El flujo de trabajo de Step Functions invoca una función Lambda para generar un informe de estado.
  7. El flujo de trabajo envía un correo electrónico usando Servicio de notificación simple de Amazon (Amazon SNS).

Como se muestra en la siguiente captura de pantalla, la aplicación web Streamlit le permite cargar imágenes e ingresar mensajes de texto para especificar los fondos deseados, los mensajes negativos y el modo de pintura exterior para la generación de imágenes. También puede ver y eliminar etiquetas no deseadas asociadas con cada imagen cargada que no desea conservar en las imágenes finales generadas.

Aplicación web optimizada

En este ejemplo, el mensaje para el fondo es «Fondo de la ciudad de Londres». El proceso de automatización genera nuevas imágenes basadas en las imágenes originales cargadas con Londres como fondo.

Imágenes generadas

Carga de imágenes y aplicaciones web Streamlit

Una aplicación web Streamlit sirve como interfaz para esta solución. Para proteger la aplicación del acceso no autorizado, se integra con un Cognito Amazonas grupo de usuarios. API Gateway utiliza un Autorizador de Amazon Cognito para autenticar solicitudes. La aplicación web completa los siguientes pasos:

  1. Para cada imagen seleccionada, recupera etiquetas a través de Amazon Rekognition utilizando un punto final API REST de API Gateway.
  2. Tras el envío, la aplicación carga imágenes en un depósito de S3.
  3. La aplicación actualiza una tabla de DynamoDB con parámetros relevantes, nombres de imágenes y etiquetas asociadas para cada imagen mediante otro punto final de la API REST de API Gateway.

Flujo de trabajo de procesamiento de imágenes

Cuando se actualiza la tabla de DynamoDB, Secuencias de DynamoDB Activa una función Lambda para iniciar un nuevo flujo de trabajo de Step Functions. La siguiente es una solicitud de muestra para el flujo de trabajo:

{
  "Id": "621fa85a-38bb-4d98-a656-93bbbcf5477f",
  "S3Bucket": "<Image Bucket>",
  "InputS3Prefix": "image-files/<year>/<month>/<day>/<timestamp>",
  "OutputS3Prefix": "generated-image-files/<year>/<month>/<day>/<timestamp>",
  "StatusS3Prefix": "status-report-files/<year>/<month>/<day>/<timestamp>",
  "Prompt": "london city background",
  "NegativePrompt": "low quality, low resolution",
  "Mode": "PRECISE",
  "Images": [
    {
      "ImageName": "bus.png",
      "Labels": "Bus, Person"
    },
    {
      "ImageName": "cop.png",
      "Labels": "Person, Adult, Male, Man, Helmet, Jacket"
    },
    {
      "ImageName": "iguana-2.png",
      "Labels": "Lizard”
    },
    {
      "ImageName": "dog.png",
      "Labels": "Dog"
    }
  ]
}

Posteriormente, el flujo de trabajo de Step Functions realiza los siguientes tres pasos:

  1. Reemplace el fondo de todas las imágenes.
  2. Generar un informe de estado.
  3. Envíe un correo electrónico a través de Amazon SNS.

La siguiente captura de pantalla ilustra el flujo de trabajo de Step Functions.

Flujo de trabajo de funciones de pasos de AWS

Veamos cada paso con más detalle.

Reemplazar el fondo de todas las imágenes

Step Functions utiliza un Mapa distribuido para procesar cada imagen en flujos de trabajo secundarios paralelos. El mapa distribuido permite un procesamiento de alta concurrencia. Cada flujo de trabajo secundario tiene su propio historial de ejecución independiente del del flujo de trabajo principal.

Step Functions utiliza un Acción API optimizada de InvokeModel para Amazon Bedrock. La API acepta solicitudes y respuestas de hasta 25 MB. Sin embargo, Step Functions tiene un límite de 256 KB en la entrada y salida de la carga útil del estado. Para admitir imágenes más grandes, la solución utiliza un depósito S3 donde InvokeModel API lee datos y escribe el resultado. La siguiente es la configuración para el InvokeModel API para la integración de Amazon Bedrock:

{
    "ModelId": "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-image-generator-v1",
    "ContentType": "application/json",
    "Input": {  
        "S3Uri": “s3://<Image Bucket>/image-files/<year>/<month>/<day>/<timestamp>/<Image name>.json",
    },  
    "Output": {  
        "S3Uri": “s3://<Image Bucket>/generated-image-files/<year>/<month>/<day>/<timestamp>/<Image name>.json”
    } 
}

El Input S3Uri El parámetro especifica la ubicación de origen para recuperar los datos de entrada. El Output S3Uri El parámetro especifica el destino para escribir la respuesta API.

Una función Lambda guarda la carga útil de la solicitud como un archivo JSON en el formato especificado. Input S3Uri ubicación. El InvokeModel La API utiliza esta carga útil de entrada para generar imágenes con el fondo especificado:

{
    "taskType": "OUTPAINTING",
    "outPaintingParams": {
        "text": "london city background",
        "negativeText": "low quality, low resolution",        
        "image": "<base64-encoded string>",                         
        "maskPrompt": "Bus",                      
        "maskImage": "base64-encoded string",                             
        "outPaintingMode": "DEFAULT | PRECISE"                 
    },                                                 
    "imageGenerationConfig": {
        "numberOfImages": 1,
        "quality": "premium",
        "height": 1024,
        "width": 1024,
        "cfgScale": 8.0
    }
}

El modelo Titan Image Generator G1 admite los siguientes parámetros para la generación de imágenes:

  • tipo de tarea – Especifica el método de pintura para reemplazar el fondo de la imagen.
  • texto – Un mensaje de texto para definir el fondo.
  • texto negativo – Un mensaje de texto para definir qué no incluir en la imagen.
  • máscara rápida – Un mensaje de texto que define la máscara. Corresponde a etiquetas que desea conservar en las imágenes finales generadas.
  • máscaraImagen – La imagen JPEG o PNG codificada en base64.
  • fueraPaintingMode – Especifica si se permite o no la modificación de los píxeles dentro de la máscara. DEFAULT permite modificar la imagen dentro de la máscara para mantenerla consistente con el fondo reconstruido. PRECISE evita la modificación de la imagen dentro de la máscara.
  • númerodeimágenes – El número de imágenes a generar.
  • calidad – La calidad de las imágenes generadas: standard o premium.
  • cfgEscala – Especifica con qué fuerza la imagen generada debe adherirse al mensaje.
  • altura – La altura de la imagen en píxeles.
  • ancho – El ancho de la imagen en píxeles.

El lecho rocoso del Amazonas InvokeModel API genera una respuesta con una imagen codificada en el Output S3Uri ubicación. Otra función Lambda analiza la imagen de la respuesta, la decodifica desde base64 y guarda el archivo de imagen en la siguiente ubicación: s3://<Image Bucket>/generated-image-file/<year>/<month>/<day>/<timestamp>/.

Finalmente, un flujo de trabajo secundario actualiza una tabla de DynamoDB con el estado de generación de imágenes, marcándola como Tuvo éxito o Fallidoe incluyendo detalles como ImageName, Cause, Errory Status.

Generar un informe de estado

Después del proceso de generación de imágenes, una función Lambda recupera los detalles del estado de DynamoDB. Compila dinámicamente estos detalles en un informe de estado completo en formato JSON. Luego guarda el informe de estado generado en un archivo JSON en la siguiente ubicación: s3://<Image Bucket>/status-report-files/<year>/<month>/<day>/<timestamp>/. El equipo de ITOps puede integrar este informe con su sistema de notificación existente para realizar un seguimiento si el procesamiento de imágenes se completó correctamente. Para los usuarios empresariales, pueden ampliar esto aún más para generar un informe en formato CSV.

Enviar un correo electrónico a través de Amazon SNS

Step Functions invoca una acción API de Amazon SNS para enviar un correo electrónico. El correo electrónico contiene detalles que incluyen la ubicación S3 para el informe de estado y los archivos de imágenes finales. El siguiente es el ejemplo de correo electrónico de notificación.

Correo electrónico de notificación

Conclusión

En esta publicación, brindamos una descripción general de una solución de muestra que demuestra la automatización del cambio de fondos de imágenes a escala utilizando Amazon Bedrock y Step Functions. También explicamos cada elemento de la solución en detalle. Al utilizar la integración optimizada de Step Functions con Amazon Bedrock, Distributed Map y el modelo Titan Image Generator G1, la solución reemplaza eficientemente los fondos de las imágenes en paralelo, mejorando la productividad y la escalabilidad.

Para implementar la solución, consulte las instrucciones en el repositorio de GitHub.

Recursos

Para obtener más información sobre Amazon Bedrock, consulte los siguientes recursos:

Para obtener más información sobre el modelo Titan Image Generator G1, consulte los siguientes recursos:

Para obtener más información sobre el uso de Amazon Bedrock con Step Functions, consulte los siguientes recursos:


Sobre el Autor

Chetan Makvana es arquitecto senior de soluciones en Amazon Web Services. Trabaja con socios y clientes de AWS para brindarles orientación arquitectónica para crear una arquitectura escalable e implementar estrategias para impulsar la adopción de los servicios de AWS. Es un entusiasta de la tecnología y un constructor con un área principal de interés en IA generativa, sin servidor y DevOps. Fuera del trabajo, le gusta ver programas, viajar y la música.