Reemplazar el fondo de una imagen

En esta página, se describe cómo reemplazar el fondo de una imagen. Imagen en Vertex AI te permite usar la segmentación automática de objetos para mantener ese contenido y modificar otro contenido de imagen. Con Imagen 3, también puedes proporcionar tu propia área de máscara para tener más control al editar.

Los siguientes modelos admiten el reemplazo de fondos de imágenes:

Consulta la tarjeta del modelo de Imagen for Editing and Customization

Ejemplo de edición de imágenes del producto

En el siguiente caso de uso, se destaca la mejora de una imagen de producto a través de la modificación del fondo de la imagen, pero preservando la apariencia del producto dentro de la imagen.

Imagen generada de muestra en la consola
Imagen generada con la función de edición de fondos de productos de Imagen según la siguiente instrucción: en una mesa en una tienda boutique. Fuente de la imagen original: Irene Kredenets en Unsplash.

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 .

Edita con una máscara de fondo detectada automáticamente

Usa las siguientes instrucciones para habilitar y usar la edición de imágenes de productos con detección automática de fondos.

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 Tarea, selecciona Product-background-editing.

  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. Selecciona 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.
  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/suitcase.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=None,
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_BACKGROUND",
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A light blue suitcase in front of a window in an airport",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_BGSWAP",
    ),
)

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, consulta la referencia de la API de Edit images.

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: Es la instrucción de texto que guía qué imágenes genera el modelo. Este campo es obligatorio para la generación y la edición.
  • referenceType: Una ReferenceImage es una imagen que proporciona contexto adicional para la edición de imágenes. Se requiere una imagen de referencia sin procesar RGB normal (REFERENCE_TYPE_RAW) para los casos de uso de edición. En una solicitud, puede haber como máximo una imagen de referencia sin procesar. La imagen de salida tiene la misma altura y el mismo ancho que la imagen de referencia sin procesar. Se requiere una imagen de referencia de la máscara (REFERENCE_TYPE_MASK) para los casos de uso de edición con máscara.
  • referenceId: Es el ID de número entero de la imagen de referencia. En este ejemplo, los dos objetos de imagen de referencia son de diferentes tipos, por lo que tienen valores de referenceId distintos (1 y 2).
  • 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.
  • maskImageConfig.maskMode: Es el modo de máscara para la edición de máscaras. MASK_MODE_BACKGROUND se usa para enmascarar automáticamente el fondo sin una máscara proporcionada por el usuario.
  • 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.00 para evitar extender el producto en primer plano. El valor mínimo es 0 y el máximo es 1. El valor predeterminado es 0.03.
  • EDIT_STEPS: Es un número entero. Es la cantidad de pasos de muestreo para el modelo base. Para editar imágenes de productos, comienza en los pasos de 75.
  • 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_BACKGROUND",
            "dilation": MASK_DILATION
          }
        }
      ]
    }
  ],
  "parameters": {
    "editConfig": {
      "baseSteps": EDIT_STEPS
    },
    "editMode": "EDIT_MODE_BGSWAP",
    "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 de edición de fondos de productos. La respuesta muestra cuatro 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"
    },
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    },
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    }
  ]
}

Edita con un área de máscara definida

Puedes elegir enmascarar el área que se reemplaza, en lugar de permitir que Imagen detecte la máscara automáticamente.

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 Tarea, selecciona Product-background-editing.

  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/suitcase.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=Image.from_file(location="test_resources/suitcase_mask.png"),
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_USER_PROVIDED",
        mask_dilation=0.0,
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A light blue suitcase in an airport",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_BGSWAP",
    ),
)

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:

  • Método: endpoints.predict
  • VisionGenerativeModelInstance
  • VisionGenerativeModelParams
  • VisionGenerativeModelResult

    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: Es la instrucción de texto que guía qué imágenes genera el modelo. Este campo es obligatorio para la generación y la edición.
    • referenceId: Es el ID de número entero de la imagen de referencia. En este ejemplo, los dos objetos de imagen de referencia son de diferentes tipos, por lo que tienen valores de referenceId distintos (1 y 2).
    • 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.
    • B64_MASK_IMAGE: La imagen en blanco y negro que deseas usar como capa de máscara para editar la imagen original. La imagen debe especificarse como una cadena de bytes codificada en base64. Límite de tamaño: 10 MB.
    • 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.00 para evitar extender el producto en primer plano. El valor mínimo es 0 y el máximo es 1. El valor predeterminado es 0.03.
    • EDIT_STEPS: Es un número entero. Es la cantidad de pasos de muestreo para el modelo base. Para editar imágenes de productos, comienza en los pasos de 75.
    • 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": [
            {
              "referenceType": "REFERENCE_TYPE_RAW",
              "referenceId": 1,
              "referenceImage": {
                "bytesBase64Encoded": "B64_BASE_IMAGE"
              }
            },
            {
              "referenceType": "REFERENCE_TYPE_MASK",
              "referenceId": 2,
              "referenceImage": {
                "bytesBase64Encoded": "B64_MASK_IMAGE"
              },
              "maskImageConfig": {
                "maskMode": "MASK_MODE_USER_PROVIDED",
                "dilation": MASK_DILATION
              }
            }
          ]
        }
      ],
      "parameters": {
        "editConfig": {
          "baseSteps": EDIT_STEPS
        },
        "editMode": "EDIT_MODE_BGSWAP",
        "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 de edición de fondos de productos.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        },
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        }
      ]
    }
    

Limitaciones

Debido a que las máscaras a veces están incompletas, el modelo puede intentar completar el objeto en primer plano cuando faltan bits extremadamente pequeños en el límite. Como efecto secundario poco frecuente, cuando el objeto en primer plano ya está completo, el modelo puede crear extensiones leves.

Una solución alternativa es segmentar la salida del modelo y, luego, combinarla. A continuación, se muestra un ejemplo de fragmento de Python que demuestra una solución alternativa:

blended = Image.composite(out_images[0].resize(image_expanded.size), image_expanded, mask_expanded)

¿Qué sigue?

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