Personalizar imagens com base em um assunto especificado usando o Imagen


Nesta página, descrevemos como usar a capacidade de personalização do Imagen para editar ou gerar imagens com base em um assunto específico usando os SDKs do Firebase AI Logic.

Como funciona: você fornece um comando de texto e pelo menos uma imagem de referência que mostre um assunto específico (como um produto, uma pessoa ou um animal de estimação). O modelo usa essas entradas para gerar uma nova imagem com base no objeto especificado nas imagens de referência.

Por exemplo, você pode pedir para o modelo aplicar um estilo de desenho animado a uma foto de uma criança ou mudar a cor de uma bicicleta em uma imagem.

Ir para o código



Antes de começar

Disponível apenas quando você usa o Vertex AI Gemini API como provedor de API.

Se ainda não tiver feito isso, conclua o guia de primeiros passos, que descreve como configurar seu projeto do Firebase, conectar seu app ao Firebase, adicionar o SDK, inicializar o serviço de back-end para o provedor de API escolhido e criar uma instância de ImagenModel.

Modelos compatíveis com esse recurso

O Imagen oferece edição de imagens com o modelo capability:

  • imagen-3.0-capability-001

Para modelos Imagen, o local global não é compatível.

Enviar uma solicitação de personalização de assunto

O exemplo a seguir mostra uma solicitação de personalização de assunto que pede ao modelo para gerar uma nova imagem com base na imagem de referência fornecida (neste exemplo, um gato). Como um gato é um animal, ele usa o tipo de assunto ImagenSubjectReferenceType.ANIMAL.

Se o assunto for uma pessoa ou um produto, você também poderá usar este exemplo, mas com as seguintes mudanças:

  • Se o assunto for uma pessoa, use o tipo de assunto ImagenSubjectReferenceType.PERSON. Você pode enviar esse tipo de solicitação com ou sem uma imagem de controle de malha facial para orientar ainda mais a geração de imagens.

  • Se o assunto for um produto, use o tipo de assunto ImagenSubjectReferenceType.PRODUCT.

Confira os modelos de comando mais adiante nesta página para saber como escrever comandos e usar imagens de referência neles.

Swift

A edição de imagens com modelos Imagen não é compatível com Swift. Volte mais tarde este ano!

Kotlin

// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun customizeImage() {
    // Initialize the Vertex AI Gemini API backend service
    // Optionally specify the location to access the model (for example, `us-central1`)
    val ai = Firebase.ai(backend = GenerativeBackend.vertexAI(location = "us-central1"))

    // Create an `ImagenModel` instance with an Imagen "capability" model
    val model = ai.imagenModel("imagen-3.0-capability-001")

    // This example assumes 'referenceImage' is a pre-loaded Bitmap.
    // In a real app, this might come from the user's device or a URL.
    val referenceImage: Bitmap = TODO("Load your reference image Bitmap here")

    // Define the subject reference using the reference image.
    val subjectReference = ImagenSubjectReference(
        image = referenceImage,
        referenceID = 1,
        description = "cat",
        subjectType = ImagenSubjectReferenceType.ANIMAL
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the subject reference with ID 1.
    val prompt = "A cat[1] flying through outer space"

    // Use the editImage API to perform the subject customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(subjectReference),
        prompt = prompt,
        config = ImagenEditingConfig(
            editSteps = 50 // Number of editing steps, a higher value can improve quality
        )
    )

    // Process the result
}

Java

// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
// Create an `ImagenModel` instance with an Imagen "capability" model
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.vertexAI("us-central1"))
        .imagenModel(
                /* modelName */ "imagen-3.0-capability-001");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap referenceImage = null; // TODO("Load your image Bitmap here");

// Define the subject reference using the reference image.
ImagenSubjectReference subjectReference = new ImagenSubjectReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("cat")
        .setSubjectType(ImagenSubjectReferenceType.ANIMAL)
        .build();

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
String prompt = "A cat[1] flying through outer space";

// Define the editing configuration.
ImagenEditingConfig imagenEditingConfig = new ImagenEditingConfig.Builder()
        .setEditSteps(50) // Number of editing steps, a higher value can improve quality
        .build();

// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(subjectReference), prompt, imagenEditingConfig), new FutureCallback<ImagenGenerationResponse>() {
    @Override
    public void onSuccess(ImagenGenerationResponse result) {
        if (result.getImages().isEmpty()) {
            Log.d("TAG", "No images generated");
        }
        Bitmap bitmap = result.getImages().get(0).asBitmap();
        // Use the bitmap to display the image in your UI
    }

    @Override
    public void onFailure(Throwable t) {
        // ...
    }
}, Executors.newSingleThreadExecutor());

Web

A edição de imagens com modelos Imagen não está disponível para apps da Web. Volte mais tarde este ano!

Dart

import 'dart:typed_data';
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Vertex AI Gemini API backend service
// Optionally specify a location to access the model (for example, `us-central1`)
final ai = FirebaseAI.vertexAI(location: 'us-central1');

// Create an `ImagenModel` instance with an Imagen "capability" model
final model = ai.imagenModel(model: 'imagen-3.0-capability-001');

// This example assumes 'referenceImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List referenceImage = Uint8List(0); // TODO: Load your reference image data here

// Define the subject reference using the reference image.
final subjectReference = ImagenSubjectReference(
  image: referenceImage,
  referenceId: 1,
  description: 'cat',
  subjectType: ImagenSubjectReferenceType.animal,
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat[1] flying through outer space.";

try {
  // Use the editImage API to perform the subject customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [subjectReference],
    prompt,
    config: ImagenEditingConfig(
      editSteps: 50, // Number of editing steps, a higher value can improve quality
    ),
  );

  // Process the result.
  if (response.images.isNotEmpty) {
    final editedImage = response.images.first.bytes;
    // Use the editedImage (a Uint8List) to display the image, save it, etc.
    print('Image successfully generated!');
  } else {
    // Handle the case where no images were generated.
    print('Error: No images were generated.');
  }
} catch (e) {
  // Handle any potential errors during the API call.
  print('An error occurred: $e');
}

Unity

A edição de imagens com modelos Imagen não é compatível com o Unity. Volte mais tarde este ano!

Modelos de comandos

Na solicitação, você fornece imagens de referência (até quatro) definindo um ImagenSubjectReference em que especifica um ID de referência para uma imagem (e, opcionalmente, uma descrição do assunto). Várias imagens podem ter o mesmo ID de referência (por exemplo, várias fotos do mesmo gato).

Depois, ao escrever o comando, você se refere a esses IDs. Por exemplo, use [1] no comando para se referir a imagens com o ID de referência 1. Se você fornecer uma descrição do assunto, também poderá incluí-la no comando para facilitar a leitura.

A tabela a seguir descreve modelos de comandos que podem ser um ponto de partida para escrever comandos de personalização com base em um assunto (como um produto, pessoa ou animal de estimação).

Caso de uso Imagens de referência Modelo de comando Exemplo
Estilização de imagens de produtos: publicidade Imagem do personagem (até 4) Crie uma imagem sobre SUBJECT_DESCRIPTION [1] que corresponda à descrição: ${PROMPT}

Crie uma imagem sobre Luxe Elixir hair oil, golden liquid in glass bottle [1] que corresponda à descrição: Um close de uma mão de mulher segurando Luxe Elixir hair oil, golden liquid in glass bottle [1] em um fundo branco. A mão da mulher está bem iluminada, e o foco está nítido na garrafa, com uma profundidade de campo rasa que desfoca o plano de fundo e enfatiza o produto. A iluminação é suave e difusa, criando um brilho sutil ao redor da garrafa e da mão. A composição geral é simples e elegante, destacando o apelo luxuoso do produto.

Estilização de imagem do produto: mudança de atributo Imagem do personagem (até 4) Gere uma imagem de um SUBJECT_DESCRIPTION, mas ${PROMPT}

Gere uma imagem de um Seiko watch [1], mas em azul.

Estilização de imagem de pessoa sem entrada de malha facial Imagem do personagem (até 4) Crie uma imagem sobre SUBJECT_DESCRIPTION [1] para corresponder à descrição: um retrato de SUBJECT_DESCRIPTION [1] ${PROMPT} Crie uma imagem sobre a woman with short hair[1] para corresponder à descrição: um retrato de a woman with short hair[1] em estilo de desenho animado 3D com fundo desfocado. Um personagem fofo e adorável, com um rosto sorridente, olhando para a câmera, tom de cor pastel ...
Estilização de imagem de pessoa sem entrada de malha facial Imagem do personagem (até 4) Crie uma imagem de STYLE_DESCRIPTION [2] sobre SUBJECT_DESCRIPTION [1] para corresponder à descrição: um retrato de SUBJECT_DESCRIPTION [1] STYLE_PROMPT Crie uma imagem de 3d-cartoon style [2] sobre a woman with short hair [1] que corresponda à descrição: um retrato de a woman with short hair [1] no estilo de desenho animado 3D com fundo desfocado. Um personagem fofo e adorável, com um rosto sorridente, olhando para a câmera, tom de cor pastel ...
Estilização de imagem de pessoa com entrada de malha facial Imagem do personagem (até 3)

Imagem de controle de malha facial (1)
Gere uma imagem de SUBJECT_DESCRIPTION [1] com o Face mesh from the control image [2]. ${PROMPT} Gere uma imagem de the person [1] com o face mesh from the control image [2]. A pessoa precisa estar olhando para frente com uma expressão neutra. O plano de fundo precisa ser um ...
Estilização de imagem de pessoa com entrada de malha facial Imagem do personagem (até 3)

Imagem de controle de malha facial (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 plano de fundo desfocado. Um personagem fofo e adorável, com um rosto sorridente, olhando para a câmera, tom de cor pastel ...
Estilização de imagem de pessoa com entrada de malha facial Imagem do personagem (até 3)

Imagem de controle de malha facial (1)
Crie uma imagem de STYLE_DESCRIPTION [3] 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 3d-cartoon style [3] 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] em estilo de desenho animado 3D com fundo desfocado. Um personagem fofo e adorável, com um rosto sorridente, olhando para a câmera, tom de cor pastel ...



Práticas recomendadas e limitações

Se você estiver usando uma pessoa como assunto, recomendamos que o rosto na imagem de referência tenha as seguintes propriedades:

  • está centralizado e ocupa pelo menos metade da imagem inteira;
  • É girado na visualização frontal em todas as direções (rotação, inclinação e guinada)
  • Não está encoberto por objetos, como óculos de sol ou máscaras

Casos de uso

O recurso de personalização oferece comandos de estilo livre, o que pode dar a impressão de que o modelo pode fazer mais do que foi treinado para fazer. As seções a seguir descrevem casos de uso pretendidos para personalização e exemplos não exaustivos de casos de uso não pretendidos.

Recomendamos usar essa capacidade para os casos de uso pretendidos, já que treinamos o modelo com eles e esperamos bons resultados. Por outro lado, se você exigir que o modelo faça coisas fora dos casos de uso pretendidos, os resultados serão ruins.

Casos de uso pretendidos

Confira a seguir os casos de uso pretendidos para personalização com base em um assunto:

  • Estilize uma foto de uma pessoa.

  • Estilizar uma foto de uma pessoa e preservar as expressões faciais dela.

  • (Baixa taxa de sucesso) Coloque um produto, como um sofá ou um cookie, em diferentes cenas com ângulos diferentes.

  • Gerar variações de um produto que não preservam detalhes exatos.

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

Exemplos de casos de uso não intencionais

Confira abaixo uma lista não exaustiva de casos de uso indevidos para personalização com base em um assunto. O modelo não é treinado para esses casos de uso e provavelmente vai gerar resultados ruins.

  • Coloque duas ou mais pessoas em cenas diferentes, preservando as identidades delas.

  • Coloque duas ou mais pessoas em cenas diferentes, preservando as identidades delas e especificando o estilo da imagem de saída usando uma imagem de exemplo como entrada para o estilo.

  • Estilize uma foto de duas ou mais pessoas preservando as identidades delas.

  • Coloque um pet em cenas diferentes, preservando a identidade dele.

  • Estilize uma foto de um animal de estimação e transforme em um desenho.

  • Estilize uma foto de um animal de estimação e transforme em um desenho, preservando ou especificando o estilo da imagem (como aquarela).

  • Coloque um pet e uma pessoa em uma cena diferente, preservando as identidades de ambos.

  • Estilize uma foto de um animal de estimação e uma ou mais pessoas e transforme em um desenho.

  • Coloque dois produtos em cenas diferentes com ângulos diferentes.

  • Coloque um produto, como um cookie ou um sofá, em diferentes cenas com ângulos e estilos de imagem específicos (como fotorrealista com cores, estilos de iluminação ou animação específicos).

  • Coloque um produto em uma cena diferente, preservando a composição específica da cena, conforme especificado por uma imagem de controle.

  • Coloque dois produtos em cenas diferentes com ângulos diferentes, usando uma imagem específica como entrada (como fotorrealista com cores, estilos de iluminação ou animação específicos).

  • Coloque dois produtos em cenas diferentes, preservando a composição específica da cena, conforme especificado por uma imagem de controle.