Inserir objetos em uma imagem usando retoque

Nesta página, descrevemos como inserir objetos em uma imagem, também chamado de repintura. Com o Imagen na Vertex AI, é possível especificar uma área de máscara para inserir objetos em uma imagem. É possível usar sua própria máscara ou permitir que o Imagen na Vertex AI gere uma máscara para você.

Exemplo de inserção de conteúdo

Com o retoque para inserir conteúdo, é possível usar uma imagem de base, uma máscara de imagem e uma solicitação de texto para adicionar conteúdo a uma imagem.

Entradas

Imagem de base* para editar Mascarar a área especificada usando ferramentas no console Google Cloud Comando de texto
Um exemplo de imagem de base. Um pote de vidro contém um líquido vermelho com uma fatia de limão na lateral e um canudo saindo. Fatias de limão visíveis em primeiro plano à esquerda A imagem de base de um pote de vidro, agora com uma área de máscara especificada no console do Cloud morangos

* Crédito da imagem: Alex Lvrs no Unsplash.

Saída após especificar uma área da máscara no Google Cloud console

Uma captura de tela de uma edição gerada de um pote de vidro com um líquido vermelho. Nesta captura de tela, as fatias de limão que estavam em primeiro plano na imagem foram substituídas por dois morangos diretamente na frente do pote. Uma captura de tela de uma edição gerada de um pote de vidro com um líquido vermelho. Nesta captura de tela, as fatias de limão que estavam em primeiro plano na imagem foram substituídas por três morangos à esquerda do pote. Uma captura de tela de uma edição gerada de um pote de vidro com um líquido vermelho. Nesta captura de tela, as fatias de limão que estavam em primeiro plano na imagem foram substituídas por dois morangos, um pouco à frente e à esquerda do pote.

Ver o card do modelo do Imagen para edição e personalização

Antes de começar

  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. Configure a autenticação do ambiente.

    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 os exemplos Java desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud .

    Node.js

    Para usar os exemplos Node.js desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud .

    Python

    Para usar os exemplos Python desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud .

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI 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.

    Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud .

    Inserir com uma área de máscara definida

    Use os exemplos a seguir para especificar o retoque a fim de inserir conteúdo. Nessas amostras, você especifica uma imagem de base, um prompt de texto e uma área de máscara para modificar a imagem de base.

    Imagen 3

    Use os exemplos a seguir para enviar uma solicitação de repintura usando o modelo Imagen 3.

    Console

    1. No Google Cloud console, acesse a página Vertex AI > Media Studio .

      Acessar o Media Studio

    2. Clique em Fazer upload. Na caixa de diálogo de arquivos exibida, selecione um arquivo para fazer upload.
    3. Clique em Pintar.
    4. Escolha uma destas opções:

      • Fazer upload da sua própria máscara:
        1. Crie uma máscara no computador.
        2. Clique em Fazer upload da máscara. Na caixa de diálogo exibida, selecione uma máscara para fazer upload.
      • Defina sua máscara:na barra de ferramentas de edição, use as ferramentas de máscara (caixa, pincel ou masked_transitions inverter) para especificar a área ou áreas às quais adicionar conteúdo.
    5. Opcional: no painel Parâmetros, ajuste as seguintes opções:
      • Modelo: o modelo do Imagen a ser usado
      • Número de resultados: o número de resultados a serem gerados.
      • Comando negativo: itens a serem evitados na geração
    6. No campo de comando, digite um comando para modificar a imagem.
    7. Clique em Gerar.

    Python

    Instalar

    pip install --upgrade google-genai

    Para saber mais, consulte a documentação de referência do SDK.

    Defina variáveis de ambiente para usar o SDK de IA generativa com a 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 mais informações, consulte a referência da API Editar imagens.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Google Cloud .
    • LOCATION: a região do seu projeto. Por exemplo, us-central1, europe-west2 ou asia-northeast3. Para uma lista de regiões disponíveis, consulte IA generativa em locais da Vertex AI.
    • TEXT_PROMPT: o prompt de texto fornece orientações sobre quais imagens o modelo gera. Ao usar um comando para inserção de repintura, use uma descrição da área mascarada para ter os melhores resultados. Evite comandos de uma só palavra. Por exemplo, use "um corgi fofo" em vez de "corgi".
    • B64_BASE_IMAGE: a imagem de base que será editada ou aprimorada. A imagem precisa ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
    • B64_MASK_IMAGE: a imagem em preto e branco que você quer usar como uma camada de máscara para editar a imagem original. A imagem precisa ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
    • MASK_DILATION: ponto flutuante. A porcentagem da largura da imagem para dilatar essa máscara. Um valor de 0.01 é recomendado para compensar máscaras de entrada imperfeitas.
    • EDIT_STEPS: número inteiro. O número de etapas de amostragem para o modelo de base. Para inserção de inpainting, comece com 35 etapas. Aumente as etapas até o limite superior de 75 se a qualidade não atender aos seus requisitos. Aumentar as etapas também aumenta a latência da solicitação.
    • EDIT_IMAGE_COUNT: o número de imagens editadas. Valores inteiros aceitos: 1 a 4. Valor padrão: 4.

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

    {
      "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 a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    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

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    $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
    O exemplo de resposta a seguir é para uma solicitação com "sampleCount": 2. A resposta retorna dois objetos de previsão, com os bytes de imagem gerados codificados em base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Imagen 2

    Use os exemplos a seguir para enviar uma solicitação de repintura usando o modelo do Imagen 2.

    Console

    1. No Google Cloud console, acesse a página Vertex AI > Media Studio .

      Acessar o Media Studio

    2. Clique em Fazer upload. Na caixa de diálogo de arquivos exibida, selecione um arquivo para fazer upload.
    3. Clique em Pintar.
    4. Escolha uma destas opções:

      • Fazer upload da sua própria máscara:
        1. Crie uma máscara no computador.
        2. Clique em Fazer upload da máscara. Na caixa de diálogo exibida, selecione uma máscara para fazer upload.
      • Defina sua máscara:na barra de ferramentas de edição, use as ferramentas de máscara (caixa, pincel ou masked_transitions inverter) para especificar a área ou áreas às quais adicionar conteúdo.
    5. Opcional. No painel Parâmetros, ajuste as seguintes opções:
      • Modelo: o modelo do Imagen a ser usado
      • Número de resultados: o número de resultados a serem gerados.
      • Comando negativo: itens a serem evitados na geração
    6. No campo de prompt, digite um novo prompt para modificar a imagem.
    7. Clique em Gerar.

    Python

    Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API 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 mais informações sobre solicitações de modelo imagegeneration, consulte a referência da API do modelo imagegeneration.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Google Cloud .
    • LOCATION: a região do seu projeto. Por exemplo, us-central1, europe-west2 ou asia-northeast3. Para uma lista de regiões disponíveis, consulte IA generativa em locais da Vertex AI.
    • TEXT_PROMPT: o comando de texto que orienta quais imagens o modelo gera. Este campo é obrigatório para geração e edição.
    • B64_BASE_IMAGE: a imagem de base que será editada ou aprimorada. A imagem precisa ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
    • B64_MASK_IMAGE: a imagem em preto e branco que você quer usar como uma camada de máscara para editar a imagem original. A imagem precisa ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
    • EDIT_IMAGE_COUNT: o número de imagens editadas. Valor padrão: 4.
    • GUIDANCE_SCALE_VALUE: um parâmetro (número inteiro) que controla quanto o modelo adere ao comando de texto. Valores maiores aumentam o alinhamento entre o comando de texto e as imagens geradas, mas podem comprometer a qualidade da imagem. Valores: 0 - 500. Padrão: 60.

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

    {
      "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 a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    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

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    $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
    O exemplo de resposta a seguir é para uma solicitação com "sampleCount": 2. A resposta retorna dois objetos de previsão, com os bytes de imagem gerados codificados em base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Java

    Antes de testar essa amostra, siga as instruções de configuração para Java Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Java.

    Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

    Neste exemplo, você especifica o modelo como parte de um EndpointName. O EndpointName é transmitido ao método predict, que é chamado em um PredictionServiceClient. O serviço retorna uma versão editada da imagem, que é salva localmente.

    Para mais informações sobre versões e recursos do modelo, consulte Modelos do 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 testar esse exemplo, siga as instruções de configuração para Node.js no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Node.js.

    Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

    Neste exemplo, você chama o método predict em um PredictionServiceClient. O serviço gera imagens que são salvas localmente. Para mais informações sobre versões e recursos do modelo, consulte Modelos do 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();

    Inserir com detecção automática de máscaras

    Use os exemplos a seguir para especificar o retoque a fim de inserir conteúdo. Nessas amostras, você especifica uma imagem de base e um comando de texto. O Imagen detecta e cria automaticamente uma área de máscara para modificar a imagem de base.

    Imagen 3

    Use os exemplos a seguir para enviar uma solicitação de repintura usando o modelo Imagen 3.

    Console

    1. No Google Cloud console, acesse a página Vertex AI > Media Studio .

      Acessar o Media Studio

    2. Clique em Fazer upload. Na caixa de diálogo de arquivos exibida, selecione um arquivo para fazer upload.
    3. Clique em Pintar.
    4. Na barra de ferramentas de edição, clique em background_replaceExtrair máscara.
    5. Selecione uma das opções de extração de máscara:

      • Elementos de segundo plano: detecta os elementos de segundo plano e cria uma máscara em torno deles.
      • Elementos em primeiro plano: detecta os objetos em primeiro plano e cria uma máscara ao redor deles.
      • background_replacePessoas: detecta pessoas e cria uma máscara ao redor delas.
    6. Opcional: no painel Parâmetros, ajuste as seguintes opções:
      • Modelo: o modelo do Imagen a ser usado
      • Número de resultados: o número de resultados a serem gerados.
      • Comando negativo: itens a serem evitados na geração
    7. No campo de prompt, digite um novo prompt para modificar a imagem.
    8. Clique em enviarGerar.

    Python

    Instalar

    pip install --upgrade google-genai

    Para saber mais, consulte a documentação de referência do SDK.

    Defina variáveis de ambiente para usar o SDK de IA generativa com a 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 mais informações, consulte a referência da API Editar imagens.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Google Cloud .
    • LOCATION: a região do seu projeto. Por exemplo, us-central1, europe-west2 ou asia-northeast3. Para uma lista de regiões disponíveis, consulte IA generativa em locais da Vertex AI.
    • TEXT_PROMPT: o prompt de texto fornece orientações sobre quais imagens o modelo gera. Ao usar um comando para inserção de repintura, use uma descrição da área mascarada para ter os melhores resultados. Evite comandos de uma só palavra. Por exemplo, use "um corgi fofo" em vez de "corgi".
    • B64_BASE_IMAGE: a imagem de base que será editada ou aprimorada. A imagem precisa ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
    • MASK_MODE: uma string que define o tipo de criação automática de máscara usada pelo modelo. Valores disponíveis:
      • MASK_MODE_BACKGROUND: gera automaticamente uma máscara usando a segmentação de segundo plano.
      • MASK_MODE_FOREGROUND: gera automaticamente uma máscara usando a segmentação em primeiro plano.
      • MASK_MODE_SEMANTIC: gera automaticamente uma máscara usando a segmentação semântica com base nas classes de segmentação especificadas na matriz maskImageConfig.maskClasses. Por exemplo:
                  "maskImageConfig": {
                    "maskMode": "MASK_MODE_SEMANTIC",
                    "maskClasses": [175, 176], // bicycle, car
                    "dilation": 0.01
                  }
                
    • MASK_DILATION: ponto flutuante. A porcentagem da largura da imagem para dilatar essa máscara. Um valor de 0.01 é recomendado para compensar máscaras de entrada imperfeitas.
    • EDIT_STEPS: número inteiro. O número de etapas de amostragem para o modelo de base. Para inserção de inpainting, comece com 35 etapas. Aumente as etapas até o limite superior de 75 se a qualidade não atender aos seus requisitos. Aumentar as etapas também aumenta a latência da solicitação.
    • EDIT_IMAGE_COUNT: o número de imagens editadas. Valores inteiros aceitos: 1 a 4. Valor padrão: 4.

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

    {
      "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 a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    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

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    $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
    O exemplo de resposta a seguir é para uma solicitação com "sampleCount": 2. A resposta retorna dois objetos de previsão, com os bytes de imagem gerados codificados em base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Imagen 2

    Use os exemplos a seguir para enviar uma solicitação de repintura usando o modelo do Imagen 2.

    Console

    1. No Google Cloud console, acesse a página Vertex AI > Media Studio .

      Acessar o Media Studio

    2. No painel inferior de tarefas, clique em Editar imagem.

    3. Clique em Fazer upload para selecionar a imagem armazenada localmente a ser editada.

    4. Na barra de ferramentas de edição, clique em background_replaceExtract.

    5. Selecione uma das opções de extração de máscara:

      • Elementos de segundo plano: detecta os elementos de segundo plano e cria uma máscara em torno deles.
      • Elementos em primeiro plano: detecta os objetos em primeiro plano e cria uma máscara ao redor.
      • background_replacePessoas: detecta pessoas e cria uma máscara ao redor delas.
    6. Opcional: no painel Parâmetros, ajuste o Número de resultados, o Comando negativo, as Orientações sobre as solicitações de texto ou outros parâmetros.

    7. No campo de comando, digite um comando para modificar a imagem.

    8. Clique em Gerar.

    Python

    Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API 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 mais informações sobre solicitações de modelo imagegeneration, consulte a referência da API do modelo imagegeneration.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Google Cloud .
    • LOCATION: a região do seu projeto. Por exemplo, us-central1, europe-west2 ou asia-northeast3. Para uma lista de regiões disponíveis, consulte IA generativa em locais da Vertex AI.
    • TEXT_PROMPT: o comando de texto que orienta quais imagens o modelo gera. Este campo é obrigatório para geração e edição.
    • B64_BASE_IMAGE: a imagem de base que será editada ou aprimorada. A imagem precisa ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
    • EDIT_IMAGE_COUNT: o número de imagens editadas. Valor padrão: 4.
    • MASK_TYPE: solicita que o modelo gere uma máscara em vez de você precisar fornecer uma. Consequentemente, ao fornecer esse parâmetro, você precisará omitir um objeto mask. Valores disponíveis:
      • background: gera automaticamente uma máscara para todas as regiões, exceto o objeto, a pessoa ou o assunto principal na imagem.
      • foreground: gera automaticamente uma máscara para o objeto, a pessoa ou o assunto principal na imagem.
      • semantic: use a segmentação automática para criar uma área de máscara para uma ou mais das classes de segmentação. Defina as classes de segmentação usando o parâmetro classes e os valores class_id correspondentes. É possível especificar até cinco classes. Quando você usa o tipo de máscara semântica, o objeto maskMode precisa ter a seguinte aparência:
        "maskMode": {
          "maskType": "semantic",
          "classes": [class_id1, class_id2]
        }
    • GUIDANCE_SCALE_VALUE: um parâmetro (número inteiro) que controla quanto o modelo adere ao comando de texto. Valores maiores aumentam o alinhamento entre o comando de texto e as imagens geradas, mas podem comprometer a qualidade da imagem. Valores: 0 - 500. Padrão: 60.

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

    {
      "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 a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    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

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

    $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
    O exemplo de resposta a seguir é para uma solicitação com "sampleCount": 2. A resposta retorna dois objetos de previsão, com os bytes de imagem gerados codificados em base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Limitações

    As seções a seguir explicam as limitações do recurso de remoção de objetos da Imagen.

    Pixels modificados

    Não há garantia de que os pixels gerados pelo modelo que não estão na máscara sejam idênticos à entrada. Eles são gerados na resolução do modelo (como 1024 x 1024). Pode haver mudanças muito pequenas na imagem gerada.

    Se você quiser preservar a imagem perfeitamente, recomendamos misturar a imagem gerada com a de entrada usando a máscara. Normalmente, se a resolução da imagem de entrada for 2K ou superior, é necessário combinar a imagem gerada e a imagem de entrada.

    Limitação de inserção

    A inserção geralmente corresponde ao estilo da imagem de base. No entanto, algumas palavras-chave podem acionar saídas que se parecem com estilos de desenhos animados, apesar da sua intenção de criar uma saída fotorrealista.

    Um exemplo que vimos em particular são cores imprecisas. Por exemplo, "girafa amarela" tende a produzir uma girafa de desenho animado, porque as girafas fotorrealistas são marrons e castanhas. Da mesma forma, cores fotorrealistas, mas não naturais, são difíceis de gerar.

    A seguir

    Confira artigos sobre o Imagen e outras IAs generativas nos produtos da Vertex AI: