Personalização controlada

Com a personalização controlada, é possível criar novas imagens com base em uma imagem de origem ou em um sinal de imagem de origem (borda nítida ou rabiscada). Nesta página, mostramos como enviar dois tipos de solicitações de personalização controlada:

  1. Personalização controlada do Imagen 3 (recurso em GA)

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

  2. Personalização controlada do Imagen 2: sinal de imagem de origem de borda nítida ou rabiscada (recurso em fase de pré-lançamento)

Casos de uso

A personalização controlada do Imagen 3 oferece comandos de estilo livre, o que pode dar a impressão de que o modelo consegue fazer mais do que foi treinado para fazer. As seções a seguir descrevem casos de uso e exemplos da personalização controlada do Imagen 3.

O modelo foi treinado em casos de uso que fornecemos, e esperamos bons resultados quando você usa a personalização controlada do Imagen 3. Se você pressionar o modelo para responder de maneiras inesperadas, não espere bons resultados.

Exemplos de casos de uso pretendidos

Confira a seguir casos de uso em que a personalização controlada do Imagen 3 foi treinada para realizar e produzir bons resultados:

  • Gere uma imagem que siga o comando e as imagens de controle de borda canny.

  • Gere uma imagem que siga o comando e os rabiscos.

  • Estilize uma foto de uma pessoa preservando a expressão facial.

Exemplos de casos de uso não intencionais

Confira a seguir casos de uso para os quais a personalização controlada do Imagen 3 não foi treinada e produz resultados ruins:

  • Gere uma imagem usando um estilo especificado no comando.

  • Gere uma imagem com base em texto que siga um estilo específico fornecido por uma imagem de referência, com algum nível de controle na composição da imagem usando uma imagem de controle.

  • Gere uma imagem com base em um texto que segue um estilo específico fornecido por uma imagem de referência, com algum nível de controle na composição da imagem usando um rabisco de controle.

  • Gere uma imagem com base em texto que siga um estilo específico fornecido pela imagem de referência, com algum nível de controle na composição da imagem usando uma imagem de controle. A pessoa na imagem tem uma expressão facial específica.

  • Estilize uma foto de duas ou mais pessoas e preserve as expressões faciais delas.

  • Estilize uma foto de um animal de estimação e transforme em um desenho. Preserve ou especifique a composição da imagem (por exemplo, aquarela).

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

    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. Após a instalação, inicialize a CLI do Google Cloud executando o seguinte comando:

      gcloud init

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

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

    Como escrever comandos de personalização

    O comando usado com a personalização do Imagen 3 pode afetar a qualidade das imagens geradas. Use os modelos de comando a seguir como ponto de partida para escrever comandos de personalização. Talvez seja necessário enviar várias solicitações para receber a saída desejada.

    Caso de uso Imagens de referência Modelo de comando Exemplo
    Personalização controlada Mapa de rabisco (1) Gere uma imagem que esteja alinhada com o scribble map [1] para corresponder à descrição: ${STYLE_PROMPT} ${PROMPT}. Gere uma imagem que esteja alinhada com a scribble map [1] para corresponder à descrição: A imagem precisa estar no estilo de uma pintura a óleo impressionista com pinceladas suaves. Ela tem um ambiente naturalmente iluminado e pinceladas visíveis. Vista lateral de um carro. O carro está estacionado em uma superfície de estrada molhada e reflexiva, com luzes da cidade refletindo nas poças.
    Personalização controlada Imagem de controle nítida (1) Gere uma imagem alinhada ao edge map [1] para corresponder à descrição: ${STYLE_PROMPT} ${PROMPT} Gere uma imagem alinhada ao edge map [1] para corresponder à descrição: A imagem precisa ser no estilo de uma pintura a óleo impressionista, com pinceladas suaves. Ela tem uma atmosfera naturalmente iluminada e pinceladas perceptíveis. Um carro visto de lado. O carro está estacionado em uma superfície de estrada molhada e reflexiva, com luzes da cidade refletindo nas poças.
    Estilização de imagem de pessoa com entrada FaceMesh Imagem do personagem (1 a 3)

    Imagem de controle do FaceMesh (1)
    Crie uma imagem sobre SUBJECT_DESCRIPTION [1] na pose de CONTROL_IMAGE [2] para corresponder à descrição: um retrato de SUBJECT_DESCRIPTION [1] ${PROMPT} Crie uma imagem de a woman with short hair [1] na pose de control image [2] para corresponder à descrição: um retrato de a woman with short hair [1] em estilo de desenho animado 3D com um plano de fundo desfocado. Um personagem fofo e adorável, com um rosto sorridente, de frente para a câmera, tom de cor pastel, alta qualidade, 4k, obra-prima, super detalhes, textura da pele, mapeamento de textura, sombras suaves, iluminação realista suave, cores vibrantes
    Estilização de imagem de pessoa com entrada FaceMesh Imagem do personagem (1 a 3)

    Imagem de controle do FaceMesh (1)
    Crie uma imagem ${STYLE_PROMPT} sobre SUBJECT_DESCRIPTION [1] na pose de CONTROL_IMAGE [2] para corresponder à descrição: um retrato de SUBJECT_DESCRIPTION [1] ${PROMPT} Crie uma imagem no estilo desenho animado 3D sobre a woman with short hair [1] na pose de control image [2] para corresponder à descrição: um retrato de a woman with short hair [1] no estilo desenho animado 3D com um fundo desfocado. Um personagem fofo e adorável com um rosto sorridente, de frente para a câmera, em tons pastel, de alta qualidade, 4k, obra-prima, superdetalhes, textura da pele, mapeamento de textura, sombras suaves, iluminação suave e realista, cores vibrantes

    Enviar uma solicitação de personalização controlada da Imagen 3

    Use os exemplos a seguir para enviar uma solicitação de personalização controlada do Imagen 3:

    REST

    Antes de usar os dados da solicitação, faça as seguintes 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. Para usar a personalização controlada do Imagen 3, inclua o referenceId da imagem de referência de controle que você fornece no formato [$referenceId]. Por exemplo:
      • Gere uma imagem alinhada ao mapa de rabiscos [1] para corresponder à descrição: [image description].
    • BASE64_CONTROL_IMAGE: a imagem de controle de base (esboço). A imagem precisa ser especificada como uma string de bytes codificada em base64.
      Para CONTROL_TYPE_SCRIBBLE: a imagem de controle de rabisco esperada tem fundo preto e linha de rabisco branca. Exemplo de imagem de controle de rabisco
      Para CONTROL_TYPE_CANNY: a imagem de controle de borda nítida esperada tem fundo preto e bordas nítidas brancas. Exemplo de imagem de controle de borda nítida
    • CONTROL_TYPE: o tipo do sinal de controle. Use CONTROL_TYPE_CANNY para a borda de Canny. Use CONTROL_TYPE_SCRIBBLE para rabiscar.
    • enableControlImageComputation: defina como false se você fornecer sua própria imagem de controle. Nesse caso, B64_BASE_IMAGE precisa ser a imagem do sinal de controle. Defina como true se quiser que o Imagen calcule a imagem de controle com base na imagem de referência. Nesse caso, B64_BASE_IMAGE precisa ser a imagem RGB bruta.
    • IMAGE_COUNT: o número de imagens geradas. 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_CONTROL",
              "referenceId": 1,
              "referenceImage": {
                "bytesBase64Encoded": "BASE64_CONTROL_IMAGE"
              },
              "controlImageConfig": {
                "controlType": "CONTROL_TYPE",
                "enableControlImageComputation": false
              }
            }
          ]
        }
      ],
      "parameters": {
        "sampleCount": 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"
        }
      ]
    }
    

    Python

    Rabisco

    from google import genai
    from google.genai.types import (
        ControlReferenceConfig,
        ControlReferenceImage,
        EditImageConfig,
        Image,
    )
    
    client = genai.Client()
    
    # TODO(developer): Update and un-comment below line
    # output_gcs_uri = "gs://your-bucket/your-prefix"
    
    # Create a reference image out of an existing scribble image signal
    # using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/car_scribble.png
    control_reference_image = ControlReferenceImage(
        reference_id=1,
        reference_image=Image(gcs_uri="gs://cloud-samples-data/generative-ai/image/car_scribble.png"),
        config=ControlReferenceConfig(control_type="CONTROL_TYPE_SCRIBBLE"),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="an oil painting showing the side of a red car[1]",
        reference_images=[control_reference_image],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_CONTROLLED_EDITING",
            number_of_images=1,
            safety_filter_level="BLOCK_MEDIUM_AND_ABOVE",
            person_generation="ALLOW_ADULT",
            output_gcs_uri=output_gcs_uri,
        ),
    )
    
    # Example response:
    # gs://your-bucket/your-prefix
    print(image.generated_images[0].image.gcs_uri)

    Borda Canny

    from google import genai
    from google.genai.types import (
        ControlReferenceConfig,
        ControlReferenceImage,
        EditImageConfig,
        Image,
    )
    
    client = genai.Client()
    
    # TODO(developer): Update and un-comment below line
    # output_gcs_uri = "gs://your-bucket/your-prefix"
    
    # Create a reference image out of an existing canny edge image signal
    # using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/car_canny.png
    control_reference_image = ControlReferenceImage(
        reference_id=1,
        reference_image=Image(gcs_uri="gs://cloud-samples-data/generative-ai/image/car_canny.png"),
        config=ControlReferenceConfig(control_type="CONTROL_TYPE_CANNY"),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="a watercolor painting of a red car[1] driving on a road",
        reference_images=[control_reference_image],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_CONTROLLED_EDITING",
            number_of_images=1,
            safety_filter_level="BLOCK_MEDIUM_AND_ABOVE",
            person_generation="ALLOW_ADULT",
            output_gcs_uri=output_gcs_uri,
        ),
    )
    
    # Example response:
    # gs://your-bucket/your-prefix
    print(image.generated_images[0].image.gcs_uri)

    Enviar uma solicitação de personalização controlada do Imagen 2

    Imagem de entrada Outros parâmetros Imagem de saída
    entrada de xadrez
    Imagem de entrada. Fonte da imagem: Alec Cutter em Unsplash.

    Comando: "versão de arte digital"

    Comando negativo: "preto e branco"

    Tipo de imagem de guia: RGB padrão

    Condição de controle: borda nítida

    Escala de controle do Imagen: 0,95

    saída estilizada
    entrada de xadrez
    Imagem de entrada. Fonte da imagem: Alec Cutter em Unsplash
    (detecção de borda nítida aplicada).

    Comando: "versão de arte digital"

    Comando negativo: "preto e branco"

    Tipo de imagem de guia: borda nítida

    Escala de controle do Imagen: 0,95

    saída estilizada

    Use os exemplos a seguir para enviar uma solicitação de personalização controlada do Imagen 2:

    Console

    1. No console do Google Cloud , 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 seção Modo do painel Parâmetros, clique em Controle.

    5. Opcional. Modifique o Número de resultados, insira um Comando negativo ou modifique as Opções avançadas > Região.

    6. Na seção Opções avançadas, selecione o Tipo de imagem de guia: RGB padrão, Borda nítida ou Rabisco.

    7. Na seção Opções avançadas, selecione a Condição de controle: Borda nítida ou Rabisco.

    8. No campo de comando (Escreva seu comando…), forneça um comando de texto.

    9. Clique em Gerar.

    REST

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

    • PROJECT_ID: o ID do projeto do Google Cloud .
    • 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.
    • NEGATIVE_PROMPT: um prompt negativo para ajudar a gerar as imagens. Por exemplo: "animais" (remove animais), "desfocado" (deixa a imagem mais clara), "texto" (remove texto) ou "cortado" (remove imagens cortadas).
    • CONDITION: string. É o tipo de sinal de imagem de controle fornecido. Valores: cannyEdges ou scribble.
    • CONTROL_SCALE: float. A intensidade do sinal da imagem de controle. Valores: 0.0 - 1.0. Valor padrão: 0.95. Faixa recomendada: 0.9 - 1.0.
    • SAMPLING_STEPS: integer. O número de etapas de amostragem. Valores: 1 - 30. Padrão: 16.
    • COMPUTE_CONDITION_MAP: boolean. Define se um mapa de condição será computado de acordo com a imagem de entrada base. Quando definido como false, o serviço espera que a imagem de entrada seja um rabisco ou tenha bordas nítidas, e a imagem é fornecida diretamente ao modelo. Quando definido como true, o serviço espera que a imagem de entrada seja RGB e calcula informações de borda nítida ou rabiscos da imagem de entrada com base em conditionName. Em seguida, o serviço fornece o mapa de condição processado ao modelo para edição da imagem. Quando você fornece imagens de rabisco, elas precisam ter um fundo preto e linhas brancas que representem o objeto a ser gerado. Padrão: false.

    Método HTTP e URL:

    POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/imagen-2.0-edit-preview-0627:predict

    Corpo JSON da solicitação:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "image": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "negativePrompt": "NEGATIVE_PROMPT",
        "controlPluginConfig":  {
          "conditions": [
            {
              "conditionName": "CONDITION",
              "controlScale": CONTROL_SCALE,
              "samplingSteps": SAMPLING_STEPS,
              "computeConditionMap": COMPUTE_CONDITION_MAP
            }
          ]
        }
      }
    }
    

    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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/imagen-2.0-edit-preview-0627: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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/imagen-2.0-edit-preview-0627: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"
        }
      ]
    }
    

    Uso do produto

    Para ver os padrões de uso e as restrições de conteúdo associados ao Imagen na Vertex AI, consulte as diretrizes de uso.

    Versões do modelo

    Há vários modelos de geração de imagens que podem ser usados. Para mais informações, consulte Modelos do Imagen.

    A seguir

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