Cómo insertar objetos en una imagen con la función de retoque

En esta página, se describe cómo insertar objetos en una imagen, un proceso que también se conoce como inpainting. Imagen en Vertex AI te permite especificar un área de máscara para insertar objetos en una imagen. Puedes usar tu propia máscara o dejar que Imagen genere una máscara por ti.

Los siguientes modelos admiten la inserción de objetos en una imagen:

Ejemplo de inserción de contenido

Con el relleno completo, puedes usar una imagen base, una máscara de imagen y una instrucción de texto para agregar contenido a una imagen existente.

Entradas

Imagen base* para editar Área de la máscara especificada con las herramientas de la consola de Google Cloud Instrucción de texto
Una imagen base de ejemplo. Un frasco de vidrio contiene un líquido rojo con una rodaja de limón en el costado y una pajita que sobresale. Rodajas de limón visibles en el primer plano izquierdo La imagen base de un frasco de vidrio, ahora con un área de la máscara especificada en la consola de Cloud fresas

* Crédito de la imagen: Alex Lvrs en Unsplash.

Resultado después de especificar un área de la máscara en la consola de Google Cloud

Captura de pantalla de una edición generada de un frasco de vidrio que contiene un líquido rojo. En esta captura de pantalla, las rodajas de limón que antes estaban en el primer plano de la imagen se reemplazan por dos frutillas directamente frente al frasco. Captura de pantalla de una edición generada de un frasco de vidrio que contiene un líquido rojo. En esta captura de pantalla, las rodajas de limón que antes estaban en primer plano en la imagen se reemplazaron por tres frutillas a la izquierda del frasco. Captura de pantalla de una edición generada de un frasco de vidrio que contiene un líquido rojo. En esta captura de pantalla, las rodajas de limón que antes estaban en el primer plano de la imagen se reemplazaron por dos frutillas, que se encuentran un poco delante y a la izquierda del frasco.

Consulta la tarjeta del modelo de Imagen for Editing and Customization

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Configura la autenticación para tu entorno.

    Selecciona la pestaña que corresponda a la forma en que planeas usar las muestras de esta página:

    Console

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud , no necesitas configurar la autenticación.

    Python

    Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa la gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Instala Google Cloud CLI.

    2. Si usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.

    3. Si usas un shell local, crea credenciales de autenticación locales para tu cuenta de usuario:

      gcloud auth application-default login

      No es necesario que lo hagas si usas Cloud Shell.

      Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud .

    REST

    Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.

      Instala Google Cloud CLI.

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

Inserta con un área de máscara definida

Usa los siguientes ejemplos para enviar una solicitud de relleno con el modelo de Imagen 3.

Console

  1. En la consola de Google Cloud , ve a la página Vertex AI > Vertex AI Studio .

    Ir a Vertex AI Studio

  2. Haz clic en Generar medios.

  3. Haz clic en Imagen.

  4. En la lista Task, selecciona Inpaint-add.

  5. En la lista Modelo, selecciona el modelo de Imagen que deseas usar.

  6. En Input image, haz clic en Add y selecciona la imagen que estás editando para subirla.

  7. En el cuadro Instrucción, ingresa una instrucción que describa cómo editar la imagen.

  8. Realiza una de las siguientes acciones para especificar una máscara:

    • Sube tu propia máscara:
      1. Crea una máscara en tu computadora.
      2. Haz clic en subir Importar máscara y selecciona una máscara para subir.
    • Define tu máscara: En la barra de herramientas de edición, usa las herramientas de máscara (cuadro, pincel o la herramienta masked_transitions invertir) para especificar el área o las áreas a las que se agregará contenido.
  9. Haz clic en Ejecutar.

Python

Instalar

pip install --upgrade google-genai

Para obtener más información, consulta la documentación de referencia del SDK.

Establece variables de entorno para usar el SDK de IA generativa con Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=us-central1
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import (
    RawReferenceImage,
    MaskReferenceImage,
    MaskReferenceConfig,
    EditImageConfig,
)

client = genai.Client()

# TODO(developer): Update and un-comment below line
# output_file = "output-image.png"

raw_ref = RawReferenceImage(
    reference_image=Image.from_file(location="test_resources/fruit.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=Image.from_file(location="test_resources/fruit_mask.png"),
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_USER_PROVIDED",
        mask_dilation=0.01,
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A plate of cookies",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_INPAINT_INSERTION",
    ),
)

image.generated_images[0].image.save(output_file)

print(f"Created output image using {len(image.generated_images[0].image.image_bytes)} bytes")
# Example response:
# Created output image using 1234567 bytes

REST

Para obtener más información sobre la API de Imagen, consulta los siguientes recursos:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • REGION: Es la región en la que se encuentra tu proyecto. Para obtener más información sobre las regiones admitidas, consulta IA generativa en ubicaciones de Vertex AI.
  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • TEXT_PROMPT: Opcional. Es una instrucción de texto para guiar las imágenes que genera el modelo. Para obtener mejores resultados, usa una descripción del área enmascarada y evita las instrucciones de una sola palabra. Por ejemplo, usa "un corgi tierno" en lugar de "corgi".
  • B64_BASE_IMAGE: Imagen codificada en Base64 de la imagen que se está editando, con un tamaño de 10 MB o menos. Para obtener más información sobre la codificación en Base64, consulta Codifica y decodifica archivos en Base64.
  • B64_MASK_IMAGE: Imagen de máscara en blanco y negro codificada en Base64 con un tamaño de 10 MB o menos.
  • MASK_DILATION: Opcional. Es un valor de número de punto flotante entre 0 y 1, inclusive, que representa el porcentaje del ancho de la imagen en el que se debe aumentar la máscara. El uso de dilation ayuda a compensar las máscaras imprecisas. Recomendamos un valor de 0.01.
  • EDIT_STEPS: Opcional. Es un número entero que representa la cantidad de pasos de muestreo. Un valor más alto ofrece una mejor calidad de imagen, mientras que un valor más bajo ofrece una mejor latencia.

    Te recomendamos que pruebes con 35 pasos para comenzar. Si la calidad no cumple con tus requisitos, te recomendamos que aumentes el valor hasta un límite superior de 75.

  • SAMPLE_COUNT: Opcional. Es un número entero que describe la cantidad de imágenes que se generarán. El rango de valores aceptado es de 1 a 4. El valor predeterminado es 4.

Método HTTP y URL:

POST https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict

Cuerpo JSON de la solicitud:

{
  "instances": [
    {
      "prompt": "TEXT_PROMPT",
      "referenceImages": [
        {
          "referenceType": "REFERENCE_TYPE_RAW",
          "referenceId": 1,
          "referenceImage": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        },
        {
          "referenceType": "REFERENCE_TYPE_MASK",
          "referenceImage": {
            "bytesBase64Encoded": "B64_MASK_IMAGE"
          },
          "maskImageConfig": {
            "maskMode": "MASK_MODE_USER_PROVIDED",
            "dilation": MASK_DILATION
          }
        }
      ]
    }
  ],
  "parameters": {
    "editConfig": {
      "baseSteps": EDIT_STEPS
    },
    "editMode": "EDIT_MODE_INPAINT_INSERTION",
    "sampleCount": SAMPLE_COUNT
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict" | Select-Object -Expand Content
La siguiente respuesta de muestra es para una solicitud con "sampleCount": 2. La respuesta muestra dos objetos de predicción, con los bytes de imagen generados codificados en base64.
{
  "predictions": [
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    },
    {
      "mimeType": "image/png",
      "bytesBase64Encoded": "BASE64_IMG_BYTES"
    }
  ]
}

Cómo insertar con detección automática de máscaras

Usa los siguientes ejemplos para especificar el relleno a la hora de insertar contenido. En estas muestras, especifica una imagen base y una instrucción de texto. Imagen detecta y crea de automáticamente un área de máscara para modificar la imagen base.

Console

  1. En la consola de Google Cloud , ve a la página Vertex AI > Vertex AI Studio .

    Ir a Vertex AI Studio

  2. Haz clic en Generar medios.

  3. Haz clic en Imagen.

  4. En la lista Task, selecciona Inpaint-add.

  5. En la lista Modelo, selecciona el modelo de Imagen que deseas usar.

  6. En Input image, haz clic en Add y selecciona la imagen que estás editando para subirla.

  7. En el cuadro Instrucción, ingresa una instrucción que describa cómo editar la imagen.

  8. En la barra de herramientas de edición, haz clic en background_replaceExtraer máscara.

  9. Elige una de las siguientes opciones de extracción de máscaras:

    • Elementos en segundo plano: Detecta los elementos en segundo plano y crea una máscara a su alrededor.

    • Elementos en primer plano: Detecta los objetos en primer plano y crea una máscara alrededor de ellos.

    • background_replace Personas: Detecta personas y crea una máscara a su alrededor.

  10. Haz clic en Ejecutar.

Python

Instalar

pip install --upgrade google-genai

Para obtener más información, consulta la documentación de referencia del SDK.

Establece variables de entorno para usar el SDK de IA generativa con Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=us-central1
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import (
    RawReferenceImage,
    MaskReferenceImage,
    MaskReferenceConfig,
    EditImageConfig,
)

client = genai.Client()

# TODO(developer): Update and un-comment below line
# output_file = "output-image.png"

raw_ref = RawReferenceImage(
    reference_image=Image.from_file(location="test_resources/fruit.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=None,
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_FOREGROUND",
        mask_dilation=0.1,
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A small white ceramic bowl with lemons and limes",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_INPAINT_INSERTION",
    ),
)

image.generated_images[0].image.save(output_file)

print(f"Created output image using {len(image.generated_images[0].image.image_bytes)} bytes")
# Example response:
# Created output image using 1234567 bytes

REST

Para obtener más información sobre la API de Imagen, consulta los siguientes recursos:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el Google Cloud ID del proyecto.
  • LOCATION: La región del proyecto. Por ejemplo, us-central1, europe-west2 o asia-northeast3. Para obtener una lista de las regiones disponibles, consulta IA generativa en ubicaciones de Vertex AI. Cuando se usa un extremo de API regional, la región de la URL del extremo determina dónde se procesa la solicitud, y este LOCATION en la ruta de acceso del recurso se ignora si hay un conflicto.
  • TEXT_PROMPT: El mensaje de texto guía qué imágenes genera el modelo. Cuando uses una instrucción para la inserción de la expansión, usa una descripción del área enmascarada para obtener mejores resultados. Evita las instrucciones de una sola palabra. Por ejemplo, usa "un corgi tierno" en lugar de "corgi".
  • B64_BASE_IMAGE: La imagen base que se editará o mejorará. La imagen debe especificarse como una cadena de bytes codificada en base64. Límite de tamaño: 10 MB.
  • MASK_MODE: Es una cadena que establece el tipo de creación automática de máscaras que usa el modelo. Valores disponibles:
    • MASK_MODE_BACKGROUND: Genera automáticamente una máscara con la segmentación de fondo.
    • MASK_MODE_FOREGROUND: Genera automáticamente una máscara con la segmentación del primer plano.
    • MASK_MODE_SEMANTIC: Genera automáticamente una máscara con la segmentación semántica en función de las clases de segmentación que especifiques en el array maskImageConfig.maskClasses. Por ejemplo:
                "maskImageConfig": {
                  "maskMode": "MASK_MODE_SEMANTIC",
                  "maskClasses": [175, 176], // bicycle, car
                  "dilation": 0.01
                }
              
  • MASK_DILATION: Número de punto flotante. Es el porcentaje del ancho de la imagen por el que se dilatará esta máscara. Se recomienda un valor de 0.01 para compensar las máscaras de entrada imperfectas.
  • EDIT_STEPS: Es un número entero. Es la cantidad de pasos de muestreo para el modelo base. Para la inserción de la expansión, comienza en 35 pasos. Aumenta los pasos hasta el límite superior de 75 si la calidad no cumple con tus requisitos. Aumentar los pasos también incrementa la latencia de la solicitud.
  • EDIT_IMAGE_COUNT: Es la cantidad de imágenes editadas. Valores de números enteros aceptados: de 1 a 4. Valor predeterminado: 4.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict

Cuerpo JSON de la solicitud:

{
  "instances": [
    {
      "prompt": "TEXT_PROMPT",
      "referenceImages": [
        {
          "referenceType": "REFERENCE_TYPE_RAW",
          "referenceId": 1,
          "referenceImage": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        },
        {
          "referenceType": "REFERENCE_TYPE_MASK",
          "referenceId": 2,
          "maskImageConfig": {
            "maskMode": "MASK_MODE",
            "dilation": MASK_DILATION
          }
        }
      ]
    }
  ],
  "parameters": {
    "editConfig": {
      "baseSteps": EDIT_STEPS
    },
    "editMode": "EDIT_MODE_INPAINT_INSERTION",
    "sampleCount": EDIT_IMAGE_COUNT
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict" | Select-Object -Expand Content
La siguiente respuesta de muestra es para una solicitud con "sampleCount": 2. La respuesta muestra dos objetos de predicción, con los bytes de imagen generados codificados en base64.
{
  "predictions": [
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    },
    {
      "mimeType": "image/png",
      "bytesBase64Encoded": "BASE64_IMG_BYTES"
    }
  ]
}

Limitaciones

En las siguientes secciones, se explican las limitaciones de la función de eliminación de objetos de Imagen.

Píxeles modificados

El modelo genera píxeles en su propia resolución (por ejemplo, 1024 x 1024), que puede diferir de la resolución de la imagen de entrada. Esto significa que la imagen generada podría tener pequeños cambios que no estaban en la imagen original.

Para conservar la imagen a la perfección, recomendamos combinar la imagen generada con la imagen de entrada usando la máscara. Por lo general, si la resolución de la imagen de entrada es de 2 K o superior, se requiere combinar la imagen generada y la imagen de entrada.

Limitación de inserción

Si bien el objeto insertado suele coincidir con el estilo de la imagen base, algunas palabras clave pueden producir resultados similares a dibujos animados en lugar de un resultado fotorrealista.

Por ejemplo, si le pides que cree una "jirafa amarilla", es posible que obtengas una imagen de caricatura, ya que las jirafas son naturalmente marrones y beige. Generar imágenes fotorrealistas con colores poco naturales puede ser difícil.

¿Qué sigue?

Lee artículos sobre Imagen y otros productos de IA generativa en Vertex AI: