Inserir objetos em uma imagem usando retoque

Nesta página, descrevemos como inserir objetos em uma imagem, um processo também conhecido como inpainting. 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 gere uma para você.

Exemplo de inserção de conteúdo

Com o retoque, é 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 frasco 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 de máscara no console do Google Cloud

Uma captura de tela de uma edição gerada de um pote de vidro contendo 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 contendo 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 contendo 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. 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.

    Python

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

      Instale a CLI do Google Cloud.

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

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

      gcloud auth application-default login

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

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

    Saiba mais em 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 desta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

      Instale a CLI do Google Cloud.

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

    Saiba mais em 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 enviar uma solicitação de repintura usando o modelo Imagen 3.

    Console

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. Clique em Fazer upload e selecione um arquivo para enviar.

    2. Clique em Pintar.

      Escolha uma destas opções:

      • Faça upload da sua própria máscara:

        1. Crie uma máscara no computador.

        2. Clique em Fazer upload da máscara e selecione uma máscara para enviar.

      • 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.

    3. 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: descreva o que você quer excluir das imagens geradas.

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

    5. 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

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

    • REGION: a região em que o projeto está localizado. Para mais informações sobre as regiões com suporte, consulte Locais da IA generativa na Vertex AI.
    • PROJECT_ID: o ID do projeto do Google Cloud .
    • TEXT_PROMPT: Opcional. Um comando de texto para orientar as imagens geradas pelo modelo. Para ter os melhores resultados, use uma descrição da área mascarada e evite comandos de uma só palavra. Por exemplo, use "um corgi fofo" em vez de "corgi".
    • B64_BASE_IMAGE: Uma imagem codificada em base64 da imagem que está sendo editada com tamanho de 10 MB ou menos. Para mais informações sobre a codificação em base64, consulte Codificar e decodificar arquivos em base64.
    • B64_MASK_IMAGE: Uma imagem de máscara em preto e branco codificada em base64 com tamanho de até 10 MB.
    • MASK_DILATION: Opcional. Um valor de ponto flutuante entre 0 e 1, inclusive, que representa a porcentagem da largura da imagem para aumentar a máscara. Usar dilation ajuda a compensar máscaras imprecisas. Recomendamos um valor de 0.01.
    • EDIT_STEPS: Opcional. Um número inteiro que representa o número de etapas de amostragem. Um valor mais alto oferece melhor qualidade de imagem, e um valor mais baixo oferece melhor latência.

      Recomendamos que você siga as etapas 35 para começar. Se a qualidade não atender aos seus requisitos, aumente o valor até um limite superior de 75.

    • SAMPLE_COUNT: Opcional. Um número inteiro que descreve a quantidade de imagens a serem geradas. O intervalo de valores aceito é 1-4. O valor padrão é 4.

    Método HTTP e URL:

    POST https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/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",
              "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": SAMPLE_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 abaixo:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/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 abaixo:

    $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://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/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"
        }
      ]
    }
    

    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.

    Console

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. Clique em Fazer upload e selecione um arquivo para enviar.

    2. Clique em Pintar.

    3. Na barra de ferramentas de edição, clique em background_replaceExtrair máscara.

    4. 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_replace Pessoas: detecta pessoas e cria uma máscara ao redor delas.

    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: descreva o que você quer excluir das imagens geradas.

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

    7. 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

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

    • 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 abaixo:

    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"
        }
      ]
    }
    

    Limitações

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

    Pixels modificados

    O modelo gera pixels na própria resolução (por exemplo, 1024 x 1024), que pode ser diferente da resolução da imagem de entrada. Isso significa que a imagem gerada pode ter pequenas mudanças que não estavam na imagem original.

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

    Inserir limitação

    Embora o objeto inserido geralmente corresponda ao estilo da imagem de base, algumas palavras-chave podem produzir resultados semelhantes a desenhos animados em vez de uma saída fotorrealista.

    Por exemplo, pedir uma "girafa amarela" pode resultar em uma imagem de desenho animado, porque as girafas são naturalmente marrons e castanhas. Gerar imagens fotorrealistas com cores não naturais pode ser difícil.

    A seguir

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