Nesta página, descrevemos como usar a capacidade de personalização do Imagen para editar ou gerar imagens com base em um controle especificado usando os SDKs do Firebase AI Logic.
Como funciona: você fornece um comando de texto e pelo menos uma imagem de referência de controle (como um desenho ou uma imagem de borda nítida). O modelo usa essas entradas para gerar uma nova imagem com base nas imagens de controle.
Por exemplo, você pode fornecer ao modelo um desenho de uma nave espacial e da lua, além de um comando de texto para criar uma pintura em aquarela com base no desenho.
Tipos de imagens de referência de controle
A imagem de referência para personalização controlada pode ser um rabisco, uma imagem de borda nítida ou uma malha facial.
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 controlada
O exemplo a seguir mostra uma solicitação de personalização controlada que pede ao
modelo para gerar uma nova imagem com base na imagem de referência fornecida (neste
exemplo, um desenho do espaço, como um foguete e a lua). Como a imagem de referência é um esboço ou contorno粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙粗糙CONTROL_TYPE_SCRIBBLE
Se a imagem de referência for uma imagem de borda de Canny ou uma malha facial, você também poderá usar este exemplo, mas com as seguintes mudanças:
Se a imagem de referência for uma imagem de borda nítida, use o tipo de controle
CONTROL_TYPE_CANNY
.Se a imagem de referência for uma malha facial, use o tipo de controle
CONTROL_TYPE_FACE_MESH
. Esse controle só pode ser usado com a personalização de assunto de pessoas.
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 controlReference = ImagenControlReference(
image = referenceImage,
referenceID = 1,
controlType = CONTROL_TYPE_SCRIBBLE
)
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
val prompt = "A cat flying through outer space arranged like the space scribble[1]"
// Use the editImage API to perform the controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
val editedImage = model.editImage(
references = listOf(controlReference),
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.
ImagenControlReference controlReference = new ImagenControlReference.Builder()
.setImage(referenceImage)
.setReferenceID(1)
.setControlType(CONTROL_TYPE_SCRIBBLE)
.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 flying through outer space arranged like the space scribble[1]";
// 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 controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(controlReference), 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 control reference using the reference image.
final controlReference = ImagenControlReference(
image: referenceImage,
referenceId: 1,
controlType: ImagenControlType.scribble,
);
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat flying through outer space arranged like the space scribble[1]";
try {
// Use the editImage API to perform the controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
final response = await model.editImage(
[controlReference],
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
ImagenControlReference
em que especifica um ID de referência para uma imagem.
Várias imagens podem ter o mesmo ID de referência (por exemplo, vários rabiscos da mesma ideia).
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
.
A tabela a seguir oferece modelos de comandos que podem ser um ponto de partida para escrever comandos de personalização com base em um controle.
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 o 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, olhando para a câmera, tom de cor pastel ... |
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 plano de fundo desfocado. Um personagem fofo e adorável, com um rosto sorridente, olhando para a câmera, em tons de cores pastel ... |
Práticas recomendadas e limitações
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 casos de uso pretendidos para personalização com base em um controle:
Gere uma imagem que siga o comando e as imagens de controle de borda nítida.
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 uma lista não exaustiva de casos de uso indesejados para personalização com base em um controle. O modelo não é treinado para esses casos de uso e provavelmente vai gerar resultados ruins.
Gere uma imagem usando um estilo especificado no comando.
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 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).