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, lo que también se conoce como reconstrucción. 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 en Vertex AI genere una máscara por ti.

Ejemplo de inserción de contenido

Con el relleno completo para insertar contenido, puedes usar una imagen base, una máscara de imagen y una instrucción de texto a la hora de 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
Es un ejemplo de imagen base. 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 Google Cloud consola

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 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 para edición y personalización

Antes de comenzar

  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.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Enable the API

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Enable the API

  8. Configura la autenticación para 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.

    Java

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

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. 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.

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

    Node.js

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

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. 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.

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

    Python

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

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. 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.

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

    REST

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

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    Si deseas obtener más información, consulta Autentica para usar REST en la Google Cloud documentación de autenticación.

    Inserción con un área de máscara definida

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

    Imagen 3

    Usa los siguientes ejemplos para enviar una solicitud de restauración con el modelo de Imagen 3.

    Console

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

      Ir a Media Studio

    2. Haz clic en Subir. En el cuadro de diálogo de archivo que se muestra, selecciona un archivo para subir.
    3. Haz clic en Inpaint.
    4. Realiza una de las siguientes acciones:

      • Sube tu propia máscara:
        1. Crea una máscara en tu computadora.
        2. Haz clic en Subir máscara. En el diálogo que se muestra, 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 invertida demasked_transitions) para especificar el área o áreas a las que se agregará contenido.
    5. Opcional: En el panel Parámetros, ajusta las siguientes opciones:
      • Modelo: Es el modelo de Imagen que se usará.
      • Cantidad de resultados: Es la cantidad de resultados que se generarán.
      • Instrucción negativa: Elementos que se deben evitar generar
    6. En el campo de mensaje, ingresa un mensaje 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.

    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, 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: 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.
    • TEXT_PROMPT: El mensaje de texto guía qué imágenes genera el modelo. Cuando uses una instrucción para la inserción de retoque, 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.
    • 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.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,
              "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": 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"
        }
      ]
    }
    

    Imagen 2

    Usa los siguientes ejemplos para enviar una solicitud de restauración con el modelo de Imagen 2.

    Console

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

      Ir a Media Studio

    2. Haz clic en Subir. En el cuadro de diálogo de archivo que se muestra, selecciona un archivo para subir.
    3. Haz clic en Inpaint.
    4. Realiza una de las siguientes acciones:

      • Sube tu propia máscara:
        1. Crea una máscara en tu computadora.
        2. Haz clic en Subir máscara. En el diálogo que se muestra, 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 invertida demasked_transitions) para especificar el área o áreas las que se agregará contenido.
    5. Opcional. En el panel Parámetros, ajusta las siguientes opciones:
      • Modelo: Es el modelo de Imagen que se usará.
      • Cantidad de resultados: Es la cantidad de resultados que se generarán.
      • Instrucción negativa: Elementos que se deben evitar generar
    6. En el campo de mensaje, ingresa un mensaje nuevo para modificar la imagen.
    7. Haz clic en Generar .

    Python

    Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API de Python.

    
    import vertexai
    from vertexai.preview.vision_models import Image, ImageGenerationModel
    
    # TODO(developer): Update and un-comment below lines
    # PROJECT_ID = "your-project-id"
    # input_file = "input-image.png"
    # mask_file = "mask-image.png"
    # output_file = "output-image.png"
    # prompt = "red hat" # The text prompt describing what you want to see inserted.
    
    vertexai.init(project=PROJECT_ID, location="us-central1")
    
    model = ImageGenerationModel.from_pretrained("imagegeneration@006")
    base_img = Image.load_from_file(location=input_file)
    mask_img = Image.load_from_file(location=mask_file)
    
    images = model.edit_image(
        base_image=base_img,
        mask=mask_img,
        prompt=prompt,
        edit_mode="inpainting-insert",
    )
    
    images[0].save(location=output_file, include_generation_parameters=False)
    
    # Optional. View the edited image in a notebook.
    # images[0].show()
    
    print(f"Created output image using {len(images[0]._image_bytes)} bytes")
    # Example response:
    # Created output image using 1400814 bytes
    

    REST

    Para obtener más información sobre las solicitudes del modelo imagegeneration, consulta la referencia de la API del modelo imagegeneration.

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

    • PROJECT_ID: 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.
    • 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.
    • 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.
    • EDIT_IMAGE_COUNT: la cantidad de imágenes editadas. El valor predeterminado es 4.
    • GUIDANCE_SCALE_VALUE: Un parámetro (número entero) que controla hasta qué punto el modelo cumple con la instrucción de texto. Los valores más grandes aumentan la alineación entre la instrucción de texto y las imágenes generadas, pero pueden comprometer la calidad de la imagen. Valores: 0 : 500. Configuración predeterminada: 60.

    Método HTTP y URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagegeneration@006:predict

    Cuerpo JSON de la solicitud:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "image": {
              "bytesBase64Encoded": "B64_BASE_IMAGE"
          },
          "mask": {
            "image": {
              "bytesBase64Encoded": "B64_MASK_IMAGE"
            }
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "editConfig": {
          "editMode": "inpainting-insert",
          "guidanceScale": GUIDANCE_SCALE_VALUE
        }
      }
    }
    

    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/imagegeneration@006: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/imagegeneration@006: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"
        }
      ]
    }
    

    Java

    Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Java.

    Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

    En este ejemplo, especificas el modelo como parte de un EndpointName. EndpointName se pasa al método predict, al que se llama en un PredictionServiceClient. El servicio devuelve una versión editada de la imagen, que luego se guarda de forma local.

    Para obtener más información sobre las versiones y las características de los modelos, consulta Modelos de Imagen.

    
    import com.google.api.gax.rpc.ApiException;
    import com.google.cloud.aiplatform.v1.EndpointName;
    import com.google.cloud.aiplatform.v1.PredictResponse;
    import com.google.cloud.aiplatform.v1.PredictionServiceClient;
    import com.google.cloud.aiplatform.v1.PredictionServiceSettings;
    import com.google.gson.Gson;
    import com.google.protobuf.InvalidProtocolBufferException;
    import com.google.protobuf.Value;
    import com.google.protobuf.util.JsonFormat;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.Base64;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    public class EditImageInpaintingInsertMaskSample {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "my-project-id";
        String location = "us-central1";
        String inputPath = "/path/to/my-input.png";
        String maskPath = "/path/to/my-mask.png";
        String prompt =
            ""; // The text prompt describing what you want to see inserted in the mask area.
    
        editImageInpaintingInsertMask(projectId, location, inputPath, maskPath, prompt);
      }
    
      // Edit an image using a mask file. Inpainting can insert the object designated by the prompt
      // into the masked area.
      public static PredictResponse editImageInpaintingInsertMask(
          String projectId, String location, String inputPath, String maskPath, String prompt)
          throws ApiException, IOException {
        final String endpoint = String.format("%s-aiplatform.googleapis.com:443", location);
        PredictionServiceSettings predictionServiceSettings =
            PredictionServiceSettings.newBuilder().setEndpoint(endpoint).build();
    
        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (PredictionServiceClient predictionServiceClient =
            PredictionServiceClient.create(predictionServiceSettings)) {
    
          final EndpointName endpointName =
              EndpointName.ofProjectLocationPublisherModelName(
                  projectId, location, "google", "imagegeneration@006");
    
          // Encode image and mask to Base64
          String imageBase64 =
              Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(inputPath)));
          String maskBase64 =
              Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(maskPath)));
    
          // Create the image and image mask maps
          Map<String, String> imageMap = new HashMap<>();
          imageMap.put("bytesBase64Encoded", imageBase64);
    
          Map<String, String> maskMap = new HashMap<>();
          maskMap.put("bytesBase64Encoded", maskBase64);
          Map<String, Map> imageMaskMap = new HashMap<>();
          imageMaskMap.put("image", maskMap);
    
          Map<String, Object> instancesMap = new HashMap<>();
          instancesMap.put("prompt", prompt); // [ "prompt", "<my-prompt>" ]
          instancesMap.put(
              "image", imageMap); // [ "image", [ "bytesBase64Encoded", "iVBORw0KGgo...==" ] ]
          instancesMap.put(
              "mask",
              imageMaskMap); // [ "mask", [ "image", [ "bytesBase64Encoded", "iJKDF0KGpl...==" ] ] ]
          instancesMap.put("editMode", "inpainting-insert"); // [ "editMode", "inpainting-insert" ]
          Value instances = mapToValue(instancesMap);
    
          // Optional parameters
          Map<String, Object> paramsMap = new HashMap<>();
          paramsMap.put("sampleCount", 1);
          Value parameters = mapToValue(paramsMap);
    
          PredictResponse predictResponse =
              predictionServiceClient.predict(
                  endpointName, Collections.singletonList(instances), parameters);
    
          for (Value prediction : predictResponse.getPredictionsList()) {
            Map<String, Value> fieldsMap = prediction.getStructValue().getFieldsMap();
            if (fieldsMap.containsKey("bytesBase64Encoded")) {
              String bytesBase64Encoded = fieldsMap.get("bytesBase64Encoded").getStringValue();
              Path tmpPath = Files.createTempFile("imagen-", ".png");
              Files.write(tmpPath, Base64.getDecoder().decode(bytesBase64Encoded));
              System.out.format("Image file written to: %s\n", tmpPath.toUri());
            }
          }
          return predictResponse;
        }
      }
    
      private static Value mapToValue(Map<String, Object> map) throws InvalidProtocolBufferException {
        Gson gson = new Gson();
        String json = gson.toJson(map);
        Value.Builder builder = Value.newBuilder();
        JsonFormat.parser().merge(json, builder);
        return builder.build();
      }
    }
    

    Node.js

    Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Node.js.

    Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

    En este ejemplo, llamas al método predict en un PredictionServiceClient. El servicio genera imágenes que, luego, se guardan de forma local. Para obtener más información sobre las versiones y los atributos del modelo, consulta Modelos de Imagen.

    /**
     * TODO(developer): Update these variables before running the sample.
     */
    const projectId = process.env.CAIP_PROJECT_ID;
    const location = 'us-central1';
    const inputFile = 'resources/woman.png';
    const maskFile = 'resources/woman_inpainting_insert_mask.png';
    const prompt = 'hat';
    
    const aiplatform = require('@google-cloud/aiplatform');
    
    // Imports the Google Cloud Prediction Service Client library
    const {PredictionServiceClient} = aiplatform.v1;
    
    // Import the helper module for converting arbitrary protobuf.Value objects
    const {helpers} = aiplatform;
    
    // Specifies the location of the api endpoint
    const clientOptions = {
      apiEndpoint: `${location}-aiplatform.googleapis.com`,
    };
    
    // Instantiates a client
    const predictionServiceClient = new PredictionServiceClient(clientOptions);
    
    async function editImageInpaintingInsertMask() {
      const fs = require('fs');
      const util = require('util');
      // Configure the parent resource
      const endpoint = `projects/${projectId}/locations/${location}/publishers/google/models/imagegeneration@006`;
    
      const imageFile = fs.readFileSync(inputFile);
      // Convert the image data to a Buffer and base64 encode it.
      const encodedImage = Buffer.from(imageFile).toString('base64');
    
      const maskImageFile = fs.readFileSync(maskFile);
      // Convert the image mask data to a Buffer and base64 encode it.
      const encodedMask = Buffer.from(maskImageFile).toString('base64');
    
      const promptObj = {
        prompt: prompt, // The text prompt describing what you want to see inserted
        editMode: 'inpainting-insert',
        image: {
          bytesBase64Encoded: encodedImage,
        },
        mask: {
          image: {
            bytesBase64Encoded: encodedMask,
          },
        },
      };
      const instanceValue = helpers.toValue(promptObj);
      const instances = [instanceValue];
    
      const parameter = {
        // Optional parameters
        seed: 100,
        // Controls the strength of the prompt
        // 0-9 (low strength), 10-20 (medium strength), 21+ (high strength)
        guidanceScale: 21,
        sampleCount: 1,
      };
      const parameters = helpers.toValue(parameter);
    
      const request = {
        endpoint,
        instances,
        parameters,
      };
    
      // Predict request
      const [response] = await predictionServiceClient.predict(request);
      const predictions = response.predictions;
      if (predictions.length === 0) {
        console.log(
          'No image was generated. Check the request parameters and prompt.'
        );
      } else {
        let i = 1;
        for (const prediction of predictions) {
          const buff = Buffer.from(
            prediction.structValue.fields.bytesBase64Encoded.stringValue,
            'base64'
          );
          // Write image content to the output file
          const writeFile = util.promisify(fs.writeFile);
          const filename = `output${i}.png`;
          await writeFile(filename, buff);
          console.log(`Saved image ${filename}`);
          i++;
        }
      }
    }
    await editImageInpaintingInsertMask();

    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.

    Imagen 3

    Usa los siguientes ejemplos para enviar una solicitud de restauración con el modelo de Imagen 3.

    Console

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

      Ir a Media Studio

    2. Haz clic en Subir. En el cuadro de diálogo de archivo que se muestra, selecciona un archivo para subir.
    3. Haz clic en Inpaint.
    4. En la barra de herramientas de edición, haz clic en background_replaceExtraer máscara.
    5. 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_replacePersonas: Detecta personas y crea una máscara a su alrededor.
    6. Opcional: En el panel Parámetros, ajusta las siguientes opciones:
      • Modelo: Es el modelo de Imagen que se usará.
      • Cantidad de resultados: Es la cantidad de resultados que se generarán.
      • Instrucción negativa: Elementos que se deben evitar generar
    7. En el campo de mensaje, ingresa un mensaje nuevo para modificar la imagen.
    8. 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.

    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, 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: 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.
    • TEXT_PROMPT: El mensaje de texto guía qué imágenes genera el modelo. Cuando uses una instrucción para la inserción de retoque, 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 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 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"
        }
      ]
    }
    

    Imagen 2

    Usa los siguientes ejemplos para enviar una solicitud de restauración con el modelo de Imagen 2.

    Console

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

      Ir a Media Studio

    2. En el panel de tareas inferior, haz clic en Editar imagen.

    3. Haz clic en Subir para seleccionar la imagen almacenada de forma local y, luego, editarla.

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

    5. 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: Detecta personas y crea una máscara a su alrededor.
    6. Opcional: En el panel Parámetros, ajusta la Cantidad de resultados, la Instrucción negativa, la Guía de la instrucción de texto y demás parámetros.

    7. En el campo de mensaje, ingresa un mensaje para modificar la imagen.

    8. Haz clic en Generar .

    Python

    Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API de Python.

    
    import vertexai
    from vertexai.preview.vision_models import Image, ImageGenerationModel
    
    # TODO(developer): Update and un-comment below lines
    # PROJECT_ID = "your-project-id"
    # input_file = "input-image.png"
    # mask_mode = "background" # 'background', 'foreground', or 'semantic'
    # output_file = "output-image.png"
    # prompt = "beach" # The text prompt describing what you want to see inserted.
    
    vertexai.init(project=PROJECT_ID, location="us-central1")
    
    model = ImageGenerationModel.from_pretrained("imagegeneration@006")
    base_img = Image.load_from_file(location=input_file)
    
    images = model.edit_image(
        base_image=base_img,
        mask_mode=mask_mode,
        prompt=prompt,
        edit_mode="inpainting-insert",
    )
    
    images[0].save(location=output_file, include_generation_parameters=False)
    
    # Optional. View the edited image in a notebook.
    # images[0].show()
    
    print(f"Created output image using {len(images[0]._image_bytes)} bytes")
    # Example response:
    # Created output image using 1234567 bytes
    

    REST

    Para obtener más información sobre las solicitudes del modelo imagegeneration, consulta la referencia de la API del modelo imagegeneration.

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

    • PROJECT_ID: 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.
    • 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.
    • 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.
    • EDIT_IMAGE_COUNT: la cantidad de imágenes editadas. El valor predeterminado es 4.
    • MASK_TYPE: Le solicita al modelo que genere una máscara en lugar de que tengas que proporcionar una. Por lo tanto, cuando proporcionas este parámetro, debes omitir un objeto mask. Valores disponibles:
      • background: Genera automáticamente una máscara en todas las regiones, excepto el objeto principal, la persona o el sujeto en la imagen.
      • foreground: Genera automáticamente una máscara para el objeto, la persona o el sujeto principales en la imagen.
      • semantic: Usa la segmentación automática a la hora de crear un área de máscara para una o más de las clases de segmentación. Configura las clases de segmentación con el parámetro classes y los valores class_id correspondientes. Puedes especificar hasta 5 clases. Cuando usas el tipo de máscara semántica, el objeto maskMode debe verse de la siguiente manera:
        "maskMode": {
          "maskType": "semantic",
          "classes": [class_id1, class_id2]
        }
    • GUIDANCE_SCALE_VALUE: Un parámetro (número entero) que controla hasta qué punto el modelo cumple con la instrucción de texto. Los valores más grandes aumentan la alineación entre la instrucción de texto y las imágenes generadas, pero pueden comprometer la calidad de la imagen. Valores: 0 : 500. Configuración predeterminada: 60.

    Método HTTP y URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagegeneration@006:predict

    Cuerpo JSON de la solicitud:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "image": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "editConfig": {
          "editMode": "inpainting-insert",
          "maskMode": {
            "maskType": "MASK_TYPE"
          },
          "guidanceScale": GUIDANCE_SCALE_VALUE
        }
      }
    }
    

    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/imagegeneration@006: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/imagegeneration@006: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

    No se garantiza que los píxeles generados por el modelo que no están en la máscara sean idénticos a la entrada, y se generan en la resolución del modelo (por ejemplo, 1024 x 1024). Es posible que haya cambios muy pequeños en la imagen generada.

    Si deseas conservar la imagen a la perfección, te recomendamos que combines 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 2K o superior, se requiere combinar la imagen generada y la imagen de entrada.

    Limitación de inserción

    Por lo general, la inserción coincide con el estilo de la imagen base. Sin embargo, ciertas palabras clave pueden activar resultados que se asemejan a estilos de dibujos animados, a pesar de tu intención de crear un resultado fotorrealista.

    Un ejemplo que vimos en particular son los colores inexactos. Por ejemplo, "jirafa amarilla" tiende a producir una jirafa de dibujos animados, ya que las jirafas fotorrealistas son marrones y beige. Del mismo modo, los colores fotorrealistas, pero poco naturales, son difíciles de generar.

    ¿Qué sigue?

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