Eliminar objetos de una imagen con la función de retoque

En esta página se describe cómo eliminar objetos de una imagen mediante un área de máscara, un proceso también conocido como "pintar". Puedes proporcionar tu propia máscara o dejar que Imagen genere una por ti.

Ejemplo de retirada de contenido

En el siguiente ejemplo se usa la pintura de relleno y una máscara de imagen para eliminar contenido de una imagen:

Entradas

Imagen base* que se va a editar

Área de máscara especificada con las herramientas de la consola Google Cloud

Petición de texto

Imagen base de ejemplo de un sofá rojo con una bolsa de limones colocada a la derecha y un cojín en la esquina izquierda. El sofá está colocado en ángulo, con un solo pie sobre una alfombra blanca. Delante del sofá, sobre la alfombra, hay dos limones. Se muestra la imagen base de muestra del sofá rojo, con las áreas enmascaradas definidas para la bolsa de limones del sofá y los dos limones de la alfombra.

Petición: Remove selected objects from the image

* Crédito de la imagen: Inside Weather en Unsplash.

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

Una imagen de muestra editada muestra el sofá y la alfombra del ejemplo de entrada sin limones. Una imagen de muestra editada muestra el sofá y la alfombra del ejemplo de entrada sin limones. Una imagen de muestra editada muestra el sofá y la alfombra del ejemplo de entrada sin limones.

Ver la tarjeta de modelo de Imagen para edición y personalización

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  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 de tu entorno.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    Python

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    REST

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre Google Cloud autenticación.

    Eliminar con un área de máscara definida

    Usa los siguientes ejemplos para especificar el retoque y eliminar contenido. En estos ejemplos, se especifica una imagen base, una petición de texto y un área de máscara para modificar la imagen base.

    Consola

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. Haz clic en Subir. En el cuadro de diálogo de archivos que se muestra, seleccione el archivo que quiera subir.

    2. Haz clic en Inpaint.

    3. En el panel Parámetros, haz clic en Pintar (eliminar).

    4. Elige una de estas opciones:

      • Subir tu propia máscara:

        1. Crea una máscara en tu ordenador.

        2. Haz clic en Subir máscara. En el cuadro de diálogo que se muestra, selecciona una máscara para subirla.

      • Define tu propia máscara: en la barra de herramientas de edición, usa las herramientas de máscara (cuadro, pincel o masked_transitionsinvertir herramienta) para especificar la zona o las zonas a las que quieres añadir contenido.

    5. Opcional: En el panel Parámetros, ajusta las siguientes opciones:

      • Modelo: el modelo de Imagen que se va a usar.

      • Número de resultados: el número de resultados que se van a generar.

      • Petición negativa: elementos que se deben evitar

    6. En el campo de petición, escribe una petición para modificar la imagen.

    7. Haz clic en Generar.

    Python

    Instalar

    pip install --upgrade google-genai

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

    Define 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="",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_REMOVAL",
        ),
    )
    
    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

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu Google Cloud ID de proyecto.
    • LOCATION: la región de tu proyecto. Por ejemplo, us-central1, europe-west2 o asia-northeast3. Para ver una lista de las regiones disponibles, consulta Ubicaciones de la IA generativa en Vertex AI.
    • prompt: Para la expansión de imágenes, puedes proporcionar una cadena vacía para crear las imágenes editadas. Si decides proporcionar una petición, usa una descripción de la zona oculta para obtener los mejores resultados. Por ejemplo, "un cielo azul" en lugar de "inserta un cielo azul".
    • referenceType: una ReferenceImage es una imagen que proporciona contexto adicional para la edición de imágenes. Se necesita una imagen de referencia sin procesar RGB normal (REFERENCE_TYPE_RAW) para los casos prácticos 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 anchura que la imagen de referencia sin procesar. Se necesita una imagen de referencia de máscara (REFERENCE_TYPE_MASK) para los casos prácticos de edición con máscara. Si hay una imagen de referencia sin procesar, la imagen de máscara debe tener la misma altura y anchura que la imagen de referencia sin procesar. Si la imagen de referencia de la máscara está vacía y maskMode no tiene el valor MASK_MODE_USER_PROVIDED, la máscara se calcula en función de la imagen de referencia sin procesar.
    • B64_BASE_IMAGE: la imagen base que quieres editar o aumentar de resolución. La imagen debe especificarse como una cadena de bytes codificada en Base64. Tamaño máximo: 10 MB.
    • B64_OUTPAINTING_MASK: la imagen en blanco y negro que quieras usar como capa de máscara para editar la imagen original. La máscara debe tener la misma resolución que la imagen de entrada. La imagen de salida tendrá la misma resolución que la de entrada. Esta imagen de máscara debe especificarse como una cadena de bytes codificada en Base64. Tamaño máximo: 10 MB.
    • MASK_DILATION: número flotante. Porcentaje de la anchura de la imagen para dilatar esta máscara. Se recomienda un valor de 0.03 para la extensión de imagen. Si se define "dilation": 0.0, es posible que se muestren bordes claros en el punto de extensión o que se produzca un efecto de borde blanco.
    • EDIT_STEPS: número entero. Número de pasos de muestreo del modelo base. Para ampliar la imagen, empieza con 35 pasos. Aumenta los pasos si la calidad no cumple tus requisitos.
    • EDIT_IMAGE_COUNT: número de imágenes editadas. Valores enteros aceptados: del 1 al 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": "",
          "referenceImages": [
            {
              "referenceType": "REFERENCE_TYPE_RAW",
              "referenceId": 1,
              "referenceImage": {
                "bytesBase64Encoded": "B64_BASE_IMAGE"
              }
            },
            {
              "referenceType": "REFERENCE_TYPE_MASK",
              "referenceId": 2,
              "referenceImage": {
                "bytesBase64Encoded": "B64_OUTPAINTING_MASK"
              },
              "maskImageConfig": {
                "maskMode": "MASK_MODE_USER_PROVIDED",
                "dilation": MASK_DILATION
              }
            }
          ]
        }
      ],
      "parameters": {
        "editConfig": {
          "baseSteps": EDIT_STEPS
        },
        "editMode": "EDIT_MODE_OUTPAINT",
        "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 ejemplo corresponde a una solicitud con "sampleCount": 2. La respuesta devuelve dos objetos de predicción con los bytes de la imagen generada codificados en Base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Eliminar con detección automática de máscaras

    Usa los siguientes ejemplos para especificar el retoque y eliminar contenido. En estos ejemplos, se especifica una imagen base y una petición de texto. Imagen detecta y crea automáticamente un área de máscara para modificar la imagen base.

    Consola

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. Haz clic en Subir. En el cuadro de diálogo de archivos que se muestra, seleccione el archivo que quiera subir.

    2. Haz clic en Inpaint.

    3. En el panel Parámetros, haz clic en Inpaint (Remove) [Pintar (Eliminar)].

    4. En la barra de herramientas de edición, haz clic en background_replaceExtraer.

      Selecciona una de las opciones de extracción de máscara:

      • Elementos de fondo: detecta los elementos de fondo y crea una máscara alrededor de ellos.

      • Elementos en primer plano: detecta los objetos en primer plano y crea una máscara a su alrededor.

      • background_replacePersonas: detecta a las personas y crea una máscara a su alrededor.

    5. Opcional: En el panel Parámetros, ajusta las siguientes opciones:

      • Modelo: el modelo de Imagen que se va a usar.

      • Número de resultados: el número de resultados que se van a generar.

      • Petición negativa: elementos que se deben evitar

    6. En el campo de petición, introduce una nueva petición para modificar la imagen.

    7. Haz clic en EnviarGenerar.

    Python

    Instalar

    pip install --upgrade google-genai

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

    Define 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",
        ),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_REMOVAL",
        ),
    )
    
    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

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu Google Cloud ID de proyecto.
    • LOCATION: la región de tu proyecto. Por ejemplo, us-central1, europe-west2 o asia-northeast3. Para ver una lista de las regiones disponibles, consulta Ubicaciones de la IA generativa en Vertex AI.
    • prompt: Para obtener los mejores resultados, omite una petición y negativePrompt cuando uses la pintura para eliminar elementos.
    • B64_BASE_IMAGE: la imagen base que quieres editar o aumentar de resolución. La imagen debe especificarse como una cadena de bytes codificada en Base64. Tamaño máximo: 10 MB.
    • MASK_MODE: cadena que define 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 mediante la segmentación del fondo. Usa este ajuste para modificar el contenido de fondo.
      • MASK_MODE_FOREGROUND: genera automáticamente una máscara mediante la segmentación del primer plano. Usa este ajuste para modificar el contenido en primer plano, como eliminar estos objetos (eliminación mediante pintura).
      • MASK_MODE_SEMANTIC: genera automáticamente una máscara mediante la segmentación semántica basada en las clases de segmentación que especifiques en la matriz maskImageConfig.maskClasses. Por ejemplo:
                  "maskImageConfig": {
                    "maskMode": "MASK_MODE_SEMANTIC",
                    "maskClasses": [175, 176], // bicycle, car
                    "dilation": 0.01
                  }
                
    • MASK_DILATION: número flotante. Porcentaje de la anchura de la imagen por el que se va a dilatar esta máscara. Se recomienda usar el valor 0.01 para compensar las máscaras de entrada imperfectas.
    • EDIT_STEPS: número entero. Número de pasos de muestreo del modelo base. Para eliminar elementos con la función de relleno generativo, empieza por el paso 12. Aumenta los pasos hasta el límite superior de 75 si la calidad no cumple tus requisitos. Aumentar los pasos también aumenta la latencia de las solicitudes.
    • EDIT_IMAGE_COUNT: número de imágenes editadas. Valores enteros aceptados: del 1 al 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": "",
          "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_REMOVAL",
        "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 ejemplo corresponde a una solicitud con "sampleCount": 2. La respuesta devuelve dos objetos de predicción con los bytes de la imagen generada 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 eliminar objetos de Imagen.

    Píxeles modificados

    Los píxeles generados por el modelo que no están en la máscara se generan con la resolución del modelo (por ejemplo, 1024x1024) y no se garantiza que sean idénticos a la entrada. Esto puede provocar pequeños cambios en la imagen generada.

    Para conservar la imagen a la perfección, te recomendamos que combines la imagen generada con la imagen de entrada mediante la máscara. Normalmente, es necesario combinar las imágenes si la resolución de la imagen de entrada es de 2K o superior.

    Limitación de la retirada

    También se pueden eliminar objetos pequeños adyacentes a la máscara. Para obtener los mejores resultados, haz que la máscara sea lo más precisa posible.

    Si eliminas grandes zonas del cielo en imágenes de exteriores, es posible que aparezcan artefactos no deseados. Para obtener los mejores resultados, te recomendamos que proporciones una petición.

    Siguientes pasos

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