Expandir o conteúdo de uma imagem usando a outpainting

Nesta página, descrevemos como usar a pintura externa para ampliar o conteúdo de uma imagem para uma área maior ou com dimensões diferentes.

Os seguintes modelos são compatíveis com a pintura externa:

Exemplo de pintura externa

A pintura externa é um método de edição baseado em máscara que expande o conteúdo de uma imagem de base para caber em uma tela de máscara maior ou de tamanho diferente.

imagem de base de amostra
Imagem original com padding para corresponder ao tamanho da imagem da máscara (destino).
Fonte da imagem: Kari Shea no Unsplash.
imagem de máscara de amostra
Mascare as dimensões da saída de destino da imagem, com as dimensões e o local do pixel da imagem original marcados.
imagem de saída de amostra
Exibição da imagem de saída (sem comando).

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

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloudagora, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho sem custos financeiros.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

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

    Go to project selector

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

  4. Enable the Vertex AI API, if it is not already enabled.

    Roles required to enable APIs

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

    Enable the API

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

    Roles required to select or create a project

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

    Go to project selector

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

  7. Enable the Vertex AI API, if it is not already enabled.

    Roles required to enable APIs

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

    Enable the API

  8. Configure a autenticação do ambiente.

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud , não é necessário configurar a autenticação.

    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.

      Instale a CLI do Google Cloud.

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

    Saiba mais em Autenticar para usar REST na documentação de autenticação do Google Cloud .

Expandir o conteúdo de uma imagem

Use os exemplos de código a seguir para expandir o conteúdo de uma imagem atual.

Console

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

    Acessar o Vertex AI Studio

  2. Clique em Gerar mídia.

  3. Clique em Imagem.

  4. Na lista Tarefa, selecione Pintura externa.

  5. Na lista Modelo, selecione o modelo do Imagen que você quer usar.

  6. Em Imagem de entrada, clique em Adicionar e selecione a imagem que você está editando para fazer upload.

  7. Na caixa Comando, digite um comando que descreva como editar a imagem.

  8. No menu de proporção, selecione uma opção:

    • crop_square Quadrado
    • crop_16_9 16:9
    • crop_9_16 9:16
    • crop_landscape 4:3
    • crop_portrait 3:4
    • tela cheia Personalizado
  9. Na barra de ferramentas de edição, selecione o posicionamento da imagem:

    • Alinhar à esquerda:
    • Alinhamento horizontal ao centro:
    • Alinhar à direita:
    • Alinhamento na parte de cima:
    • Alinhamento vertical ao centro:
    • Alinhamento na parte de baixo:
  10. Clique em Executar.

REST

Para mais informações sobre a API Imagen, consulte:

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. Quando um endpoint de API regional é usado, a região do URL do endpoint determina onde a solicitação é processada, e esse LOCATION no caminho do recurso é ignorado se houver conflito.
  • prompt: para outpainting de imagens, é possível fornecer uma string vazia para criar as imagens editadas. Se você optar por fornecer um comando, use uma descrição da área mascarada para ter os melhores resultados. Por exemplo, "um céu azul" em vez de "insira um céu azul".
  • referenceType: uma ReferenceImage é uma imagem que fornece contexto adicional para a edição de imagens. Uma imagem de referência bruta RGB normal (REFERENCE_TYPE_RAW) é necessária para casos de uso de edição. No máximo, uma imagem de referência bruta pode existir em uma solicitação. A imagem de saída tem a mesma altura e largura que a imagem de referência bruta. Uma imagem de referência de máscara (REFERENCE_TYPE_MASK) é necessária para casos de uso de edição mascarada. Se uma imagem de referência bruta estiver presente, a imagem da máscara precisará ter a mesma altura e largura da imagem de referência bruta. Se a imagem de referência da máscara estiver vazia e maskMode não estiver definido como MASK_MODE_USER_PROVIDED, a máscara será calculada com base na imagem de referência bruta.
  • 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_OUTPAINTING_MASK: a imagem em preto e branco que você quer usar como uma camada de máscara para editar a imagem original. A máscara precisa ter a mesma resolução da imagem de entrada. A imagem de saída terá a mesma resolução da imagem de entrada. Essa imagem de máscara 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.03 é recomendado para a expansão da imagem. Definir "dilation": 0.0 pode resultar em bordas óbvias no ponto de extensão ou causar um efeito de borda branca.
  • EDIT_STEPS: número inteiro. O número de etapas de amostragem para o modelo de base. Para a expansão da imagem, comece com 35 etapas. Aumente as etapas se a qualidade não atender aos seus requisitos.
  • 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": "",
      "referenceImages": [
        {
          "referenceType": "REFERENCE_TYPE_RAW",
          "referenceId": 1,
          "referenceImage": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        },
        {
          "referenceType": "REFERENCE_TYPE_MASK",
          "referenceId": 2,
          "referenceImage": {
            "bytesBase64Encoded": "B64_OUTPAINTING_MASK"
          },
          "maskImageConfig": {
            "maskMode": "MASK_MODE_USER_PROVIDED",
            "dilation": MASK_DILATION
          }
        }
      ]
    }
  ],
  "parameters": {
    "editConfig": {
      "baseSteps": EDIT_STEPS
    },
    "editMode": "EDIT_MODE_OUTPAINT",
    "sampleCount": EDIT_IMAGE_COUNT
  }
}

Para enviar 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

Se a imagem com expansão for ampliada para 200% ou mais do tamanho original, o modelo poderá produzir detalhes distorcidos. Como prática recomendada, recomendamos adicionar uma etapa de pós-processamento para executar a fusão alfa em imagens com extensão.

O código a seguir é um exemplo de pós-processamento:

parameters = {
   "editConfig": {
       "outpaintingConfig": {
         "blendingMode": "alpha-blending",
         "blendingFactor": 0.01,
       },
   },
}

A seguir

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