Aplicaciones del mundo real de Amazon Nova Canvas para diseño de interiores y fotografía de productos

A medida que la generación de imágenes de IA se vuelve cada vez más central para los flujos de trabajo comerciales modernos, las organizaciones buscan formas prácticas de implementar esta tecnología para desafíos específicos de la industria. Aunque el potencial de la generación de imágenes de IA es vasto, muchas empresas luchan por aplicarlo de manera efectiva a sus casos de uso únicos.

En esta publicación, exploramos cómo Canvas de Amazon Nova Puede resolver los desafíos comerciales del mundo real a través de técnicas avanzadas de generación de imágenes. Nos centramos en dos casos de uso específicos que demuestran la potencia y la flexibilidad de esta tecnología:

  • Diseño interior – El acondicionamiento de la imagen con segmentación ayuda a los diseñadores de interiores a iterar rápidamente a través de conceptos de diseño, reduciendo drásticamente el tiempo y el costo asociados con la creación de presentaciones del cliente.
  • Fotografía de productos – La superación permite a los fotógrafos de productos crear diversos contextos ambientales para productos sin sesiones de fotos extensas

Ya sea que sea una empresa de diseño de interiores que busque optimizar su proceso de visualización o un negocio minorista con el objetivo de reducir los costos de fotografía, esta publicación puede ayudarlo a utilizar las características avanzadas de Amazon Nova Canvas para lograr sus objetivos comerciales específicos. Vamos a sumergirnos en cómo estas poderosas herramientas pueden transformar su flujo de trabajo de generación de imágenes.

Requisitos previos

Debe tener los siguientes requisitos previos:

Diseño interior

Una empresa de diseño de interiores tiene el siguiente problema: sus diseñadores pasan horas creando diseños fotorrealistas para presentaciones de clientes, lo que necesita múltiples iteraciones de la misma habitación con diferentes temas y elementos decorativos. La representación 3D tradicional lleva mucho tiempo y costoso. Para resolver este problema, puede usar las características de acondicionamiento de imágenes (segmentación) de Amazon Nova Canvas para iterar rápidamente en las fotos de la habitación existentes. La imagen de condición se analiza para identificar formas de contenido prominentes, lo que resulta en una máscara de segmentación que guía la generación. La imagen generada sigue de cerca el diseño de la imagen de la condición al tiempo que permite que el modelo tenga libertad creativa dentro de los límites de cada área de contenido.

Las siguientes imágenes muestran ejemplos de la entrada inicial, una máscara de segmentación basada en la entrada y la salida basada en dos indicaciones diferentes.

Mapa de segmentación semántica generada por IA de una sala de estar, con objetos etiquetados en diferentes colores
Imagen de entrada de una sala de estar Máscara de segmentación de la sala de estar
Sala de estar minimalista con muebles blancos, acentos de madera oscura y pisos de aspecto de mármol Sala de estar con temas costeros con vista al mar y una decoración inspirada en la playa
Aviso: una sala de estar minimalista Aviso: una sala de estar con temas de playa costera

Esta publicación demuestra cómo mantener la integridad estructural mientras se transforma los elementos interiores, por lo que puede generar múltiples variaciones en minutos con imágenes simples de solicitación y entrada. El siguiente bloque de código presenta la estructura de solicitud de API para el acondicionamiento de la imagen con segmentación. Los parámetros para realizar estas transformaciones se pasan al modelo a través de la solicitud API. Asegúrese de que la imagen de salida tenga las mismas dimensiones que la imagen de entrada para evitar resultados distorsionados.

{
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "conditionImage": string (Base64 encoded image), #Original living room
        "controlMode": "SEGMENTATION", 
        "controlStrength": float, #Specify how closely to follow the condition       #image (0.0-1.0; Default: 0.7).
        "text": string, #A minimalistic living room
        "negativeText": string
    },
    "imageGenerationConfig": {
        "width": int,
        "height": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int,
        "numberOfImages": int
    }
}

El taskType El objeto determina el tipo de operación que se realiza y tiene su propio conjunto de parámetros, y el imageGenerationConfig El objeto contiene parámetros generales comunes a todos los tipos de tareas (excepto la eliminación de antecedentes). Para obtener más información sobre la estructura de solicitud/respuesta para diferentes tipos de generaciones, consulte Estructura de solicitud y respuesta para la generación de imágenes.

El siguiente código Python demuestra una generación de acondicionamiento de imagen invocando el modelo Amazon Nova Canvas V1.0 en Amazon Bedrock:

import base64  #For encoding/decoding base64 data
import io  #For handling byte streams
import json  #For JSON operations
import boto3  #AWS SDK for Python
from PIL import Image  #Python Imaging Library for image processing
from botocore.config import Config  #For AWS client configuration
#Create a variable to fix the region to where Nova Canvas is enabled 
region = "us-east-1"

#Create Bedrock client with 300 second timeout
bedrock = boto3.client(service_name="bedrock-runtime", region_name=region,
        config=Config(read_timeout=300))

#Original living room image in current working directory
input_image_path = "Original Living Room.jpg"

#Read and encode the image
def prepare_image(image_path):
    with open(image_path, 'rb') as image_file:
        image_data = image_file.read()
        base64_encoded = base64.b64encode(image_data).decode('utf-8')
    return base64_encoded

#Get the base64 encoded image
input_image = prepare_image(input_image_path)

#Set the content type and accept headers for the API call
accept = "application/json"
content_type = "application/json"

#Prepare the request body
api_request = json.dumps({
       "taskType": "TEXT_IMAGE",  #Type of generation task
       "textToImageParams": {
             "text": "A minimalistic living room",  #Prompt
             "negativeText": "bad quality, low res",  #What to avoid
             "conditionImage": input_image,  #Base64 encoded original living room
             "controlMode": "SEGMENTATION"  #Segmentation mode
            },
       "imageGenerationConfig": {
             "numberOfImages": 1,  #Generate one image
             "height": 1024,  #Image height, same as the input image
             "width": 1024,  #Image width, same as the input image
             "seed": 0, #Modify seed value to get variations on the same prompt
             "cfgScale": 7.0  #Classifier Free Guidance scale
            }
})

#Call the model to generate image
response = bedrock.invoke_model(body=api_request, modelId='amazon.nova-canvas-v1:0', accept=accept, contentType=content_type)

#Parse the response body
response_json = json.loads(response.get("body").read())

#Extract and decode the base64 image
base64_image = response_json.get("images")[0]  #Get first image
base64_bytes = base64_image.encode('ascii')  #Convert to ASCII
image_data = base64.b64decode(base64_bytes)  #Decode base64 to bytes

#Display the generated image
output_image = Image.open(io.BytesIO(image_data))
output_image.show()
#Save the image to current working directory
output_image.save('output_image.png')

Fotografía de productos

Una compañía de calzado deportivo tiene el siguiente problema: necesita mostrar sus nuevas zapatillas versátiles en múltiples entornos (pista de atletismo, aire libre y más), que requieren costosas sesiones de ubicación y múltiples sesiones de fotografía para cada variante. Para resolver este problema, puede usar el lienzo de Amazon Nova para generar diversas tomas a partir de una sola foto de producto. La superación se puede usar para reemplazar el fondo de una imagen. Puede instruir al modelo para preservar partes de la imagen proporcionando un mensaje de máscara, por ejemplo, “zapatos”. Un mensaje de máscara es una descripción del lenguaje natural de los objetos en su imagen que no debe cambiarse durante la superación. Luego puede generar los zapatos en diferentes fondos con nuevas indicaciones.

Las siguientes imágenes muestran ejemplos de la entrada inicial, una máscara creada para “zapatos” y salida basadas en dos indicaciones diferentes.

Foto de producto estilizado de zapatillas de deporte de rendimiento con detalles contrastantes de la parte superior azul marino/blanco y naranja Silueta negra de una zapatilla deportiva en la vista de perfil
Foto de estudio de zapatos para correr Máscara creada para “zapatos”
Zapatería atlética con colores azul marino y naranja en la pista roja de carreras Zapato atlético fotografiado en la superficie rocosa con fondo del bosque
Aviso: Sota de fotos de productos de zapatos deportivos colocados en una pista de atletismo al aire libre Aviso: Sota de fotos de productos de zapatos deportivos en terreno rocoso, fondo del bosque

En lugar de usar un mensaje de máscara, puede ingresar una imagen de máscara, que define las áreas de la imagen para preservar. La imagen de la máscara debe ser del mismo tamaño que la imagen de entrada. Las áreas a editar están sombreadas de blanco puro y las áreas para preservar están sombreadas de negro puro. El modo de extracción es un parámetro para definir cómo se trata la máscara. Usar DEFAULT a la transición suavemente entre el área enmascarada y el área no masticada. Este modo es generalmente mejor cuando desea que el nuevo fondo use colores similares al fondo original. Sin embargo, puede obtener un efecto de halo si su aviso requiere un nuevo fondo que sea significativamente diferente al fondo original. Usar PRECISE para adherirse estrictamente a los límites de la máscara. Este modo es generalmente mejor cuando está haciendo cambios significativos en el fondo.

Esta publicación demuestra cómo usar la superación para capturar la precisión del producto, y luego convertir una foto de estudio en diferentes entornos sin problemas. El siguiente código ilustra la estructura de solicitud de API para la superación:

{
    "taskType": "OUTPAINTING",
    "outPaintingParams": {
        "image": string (Base64 encoded image),
        "maskPrompt": string, #Shoes
        "maskImage": string, #Base64 encoded image
        "outPaintingMode": "DEFAULT" | "PRECISE", 
        "text": string,  #Product photoshoot of sports shoes on rocky terrain
        "negativeText": string
    },
    "imageGenerationConfig": {
        "numberOfImages": int,
        "quality": "standard" | "premium",
        "cfgScale": float,
        "seed": int
    }
}

El siguiente código de Python demuestra un reemplazo de fondo basado en desacuerdo invocando el modelo Amazon Nova Canvas V1.0 en Amazon Bedrock. Para más ejemplos de código, ver Ejemplos de código.

import base64  #For encoding/decoding base64 data
import io  #For handling byte streams
import json  #For JSON operations
import boto3  #AWS SDK for Python
from PIL import Image  #Python Imaging Library for image processing
from botocore.config import Config  #For AWS client configuration
#Create a variable to fix the region to where Nova Canvas is enabled 
region = "us-east-1"

#Create Bedrock client with 300 second timeout
bedrock = boto3.client(service_name="bedrock-runtime", region_name=region,
        config=Config(read_timeout=300))

#Original studio image of shoes in current working directory
input_image_path = "Shoes.png"

#Read and encode the image
def prepare_image(image_path):
    with open(image_path, 'rb') as image_file:
        image_data = image_file.read()
        base64_encoded = base64.b64encode(image_data).decode('utf-8')
    return base64_encoded

#Get the base64 encoded image
input_image = prepare_image(input_image_path)

#Set the content type and accept headers for the API call
accept = "application/json"
content_type = "application/json"

#Prepare the request body
api_request = json.dumps({
        "taskType": "OUTPAINTING",
        "outPaintingParams": {
             "image": input_image,
             "maskPrompt": "Shoes", 
             "outPaintingMode": "DEFAULT", 
             "text": "Product photoshoot of sports shoes placed on a running track outdoor",
             "negativeText": "bad quality, low res"
            },
        "imageGenerationConfig": {
             "numberOfImages": 1,
             "seed": 0, #Modify seed value to get variations on the same prompt
             "cfgScale": 7.0
            }
})

#Call the model to generate image
response = bedrock.invoke_model(body=api_request, modelId='amazon.nova-canvas-v1:0', accept=accept, contentType=content_type)

#Parse the response body
response_json = json.loads(response.get("body").read())

#Extract and decode the base64 image
base64_image = response_json.get("images")[0]  #Get first image
base64_bytes = base64_image.encode('ascii')  #Convert to ASCII
image_data = base64.b64decode(base64_bytes)  #Decode base64 to bytes

#Display the generated image
output_image = Image.open(io.BytesIO(image_data))
output_image.show()
#Save the image to current working directory
output_image.save('output_image.png')

Limpiar

Cuando haya terminado de probar esta solución, limpie sus recursos para evitar que se incurran en los cargos de AWS:

  1. Realice una copia de seguridad de los cuadernos Jupyter en la instancia de cuaderno de Sagemaker.
  2. Apague y elimine la instancia del cuaderno de Sagemaker.

Consideraciones de costos

Considere los siguientes costos de la solución implementada en AWS:

Conclusión

En esta publicación, exploramos implementaciones prácticas de Amazon Nova Canvas para dos escenarios comerciales de alto impacto. Ahora puede generar múltiples variaciones de diseño o entornos diversos en minutos en lugar de horas. Con el lienzo de Amazon Nova, puede reducir significativamente los costos asociados con la creación tradicional de contenido visual. Referirse a Generando imágenes con Amazon Nova Para conocer las otras capacidades respaldadas por Amazon Nova Canvas.

Como próximos pasos, comience con un solo caso de uso que coincida estrechamente con las necesidades de su negocio. Use nuestros ejemplos de código proporcionados como base y adaptarlos a sus requisitos específicos. Después de estar familiarizado con las implementaciones básicas, explore la combinación de múltiples técnicas y escala gradualmente. No olvide rastrear el ahorro de tiempo y las reducciones de costos para medir el ROI. Póngase en contacto con su equipo de cuenta de AWS para obtener la guía de implementación empresarial.


Sobre el autor

Arjun Singh es un científico de datos Sr. en Amazon, experimentado en inteligencia artificial, aprendizaje automático e inteligencia empresarial. Es una persona visual y es muy curiosa sobre las tecnologías generativas de IA en la creación de contenido. Él colabora con los clientes para construir soluciones ML/AI para lograr los resultados deseados. Se graduó con una maestría en sistemas de información de la Universidad de Cincinnati. Fuera del trabajo, le gusta jugar al tenis, hacer ejercicio y aprender nuevas habilidades.