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

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

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

Ejemplo de eliminación de contenido

En el siguiente ejemplo, se usa el relleno y una máscara de imagen para quitar contenido de 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

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

Instrucción: Quita los objetos seleccionados de la imagen.

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

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

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

Ver la ficha del modelo de Imagen para edición y personalización

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si es la primera vez que usas 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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  8. Configura la autenticación para tu entorno.

    Selecciona la pestaña según cómo 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.

    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 .

Cómo quitar con un área de máscara definida

Usa los siguientes ejemplos a la hora de especificar el relleno para quitar contenido. En estas muestras, especifica una imagen base, una instrucción de texto y 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 contenido multimedia.

  3. Haz clic en Imagen.

  4. En la lista Tarea, selecciona Inpaint-remove.

  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 herramienta invertir de masked_transitions) para especificar el área o las áreas a las que se agregará contenido.
  9. Haz clic en Ejecutar.

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 endpoint determina dónde se procesa la solicitud, y este LOCATION en la ruta de acceso del recurso se ignora si hay un conflicto.
  • prompt: En el caso del relleno de imágenes, puedes proporcionar una cadena vacía para crear las imágenes editadas. Si decides proporcionar una instrucción, usa una descripción del área enmascarada para obtener 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 requiere una imagen de referencia sin procesar RGB normal (REFERENCE_TYPE_RAW) para los casos de uso de edición. Puede existir como máximo una imagen de referencia sin procesar en una solicitud. La imagen de salida tiene la misma altura y ancho que la imagen de referencia sin procesar. Se requiere una imagen de referencia de máscara (REFERENCE_TYPE_MASK) para los casos de uso de edición con máscara. Si hay una imagen de referencia sin procesar, la imagen de la máscara debe tener la misma altura y el mismo ancho que la imagen de referencia sin procesar. Si la imagen de referencia de la máscara está vacía y maskMode no está establecido en 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 se editará o mejorará. La imagen debe especificarse como una cadena de bytes codificada en base64. Límite de tamaño: 10 MB.
  • B64_OUTPAINTING_MASK: Es la imagen en blanco y negro que deseas 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 imagen de entrada. Esta imagen de máscara 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.03 para la extensión de imagen. Establecer "dilation": 0.0 podría generar bordes evidentes en el punto de extensión o causar un efecto de borde blanco.
  • EDIT_STEPS: Es un número entero. Es la cantidad de pasos de muestreo para el modelo base. Para la extensión de imagen, comienza con 35 pasos. Aumenta los pasos si la calidad no cumple con tus requisitos.
  • 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": "",
      "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 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 quitar elementos con la detección automática de máscaras

Usa los siguientes ejemplos a la hora de especificar el relleno para quitar 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 Tarea, selecciona Inpaint-remove.

  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.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, haz 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 endpoint determina dónde se procesa la solicitud, y este LOCATION en la ruta de acceso del recurso se ignora si hay un conflicto.
  • prompt: Para obtener mejores resultados, omite una instrucción y negativePrompt cuando uses la función de retoque para quitar elementos.
  • 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. Usa este parámetro de configuración para modificar el contenido de fondo.
    • MASK_MODE_FOREGROUND: Genera automáticamente una máscara con la segmentación de primer plano. Usa este parámetro de configuración para modificar el contenido en primer plano, como quitar estos objetos en primer plano (eliminación con restauración).
    • MASK_MODE_SEMANTIC: Genera automáticamente una máscara con la segmentación semántica basada en las clases de segmentación que especificas 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 eliminación de la expansión, comienza con 12 pasos. Aumenta los pasos hasta el límite superior de 75 si la calidad no cumple con tus requisitos. Aumentar los pasos también aumenta 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": "",
      "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 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

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

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, se requiere la combinación si la resolución de la imagen de entrada es de 2K o superior.

Limitación de eliminación

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

Quitar grandes áreas del cielo en imágenes de exteriores puede generar artefactos no deseados. Para obtener mejores resultados, te recomendamos que proporciones una instrucción.

¿Qué sigue?

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