Cette page explique comment utiliser la fonctionnalité de personnalisation de Imagen pour modifier ou générer des images en fonction d'un style spécifié à l'aide des SDK Firebase AI Logic.
Fonctionnement : vous fournissez une requête textuelle et au moins une image de référence qui montre un style spécifique (comme un motif, une texture ou un style de conception). Le modèle utilise ces entrées pour générer une nouvelle image basée sur le style spécifié dans les images de référence.
Par exemple, vous pouvez générer une nouvelle image de cuisine à partir d'une image d'un catalogue de vente au détail populaire que vous fournissez.
Avant de commencer
Disponible uniquement lorsque vous utilisez Vertex AI Gemini API comme fournisseur d'API. |
Si ce n'est pas déjà fait, suivez le guide de démarrage, qui décrit comment configurer votre projet Firebase, associer votre application à Firebase, ajouter le SDK, initialiser le service de backend pour le fournisseur d'API de votre choix et créer une instance ImagenModel
.
Modèles compatibles avec cette fonctionnalité
Imagen propose des fonctionnalités de retouche photo grâce à son modèle capability
:
imagen-3.0-capability-001
Notez que pour les modèles Imagen, l'emplacement global
n'est pas accepté.
Envoyer une demande de personnalisation du style
L'exemple suivant montre une requête de personnalisation de style qui demande au modèle de générer une nouvelle image avec le style de l'image de référence fournie (dans cet exemple, "La Nuit étoilée" de Van Gogh).
Consultez les modèles de requêtes plus loin sur cette page pour découvrir comment rédiger des requêtes et utiliser des images de référence dans celles-ci.
Swift
La retouche d'images avec les modèles Imagen n'est pas compatible avec Swift. Revenez plus tard cette année !
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 style reference using the reference image.
val styleReference = ImagenStyleReference(
image = referenceImage,
referenceID = 1,
description = "Van Gogh style"
)
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
val prompt = "A cat flying through outer space, in the Van Gogh style[1]"
// Use the editImage API to perform the style customization.
// Pass the list of references, the prompt, and an editing configuration.
val editedImage = model.editImage(
references = listOf(styleReference),
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 style reference using the reference image.
ImagenStyleReference subjectReference = new ImagenStyleReference.Builder()
.setImage(referenceImage)
.setReferenceID(1)
.setDescription("Van Gogh style")
.build();
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
String prompt = "A cat flying through outer space, in the Van Gogh style[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 style customization.
// Pass the list of references, the prompt, and the editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(styleReference), 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
La retouche d'images avec les modèles Imagen n'est pas disponible pour les applications Web. Revenez plus tard cette année !
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 style reference using the reference image.
final styleReference = ImagenStyleReference(
image: referenceImage,
referenceId: 1,
description: 'Van Gogh style',
);
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
final prompt = "A cat flying through outer space, in the Van Gogh style[1]";
try {
// Use the editImage API to perform the style customization.
// Pass the list of references, the prompt, and an editing configuration.
final response = await model.editImage(
[styleReference],
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
La retouche d'images avec les modèles Imagen n'est pas compatible avec Unity. Revenez plus tard cette année !
Modèles de requêtes
Dans la requête, vous fournissez des images de référence (jusqu'à quatre) en définissant un ImagenStyleReference
dans lequel vous spécifiez un ID de référence pour une image (et éventuellement une description de style). Notez que plusieurs images peuvent avoir le même ID de référence (par exemple, plusieurs photos du même motif).
Ensuite, lorsque vous rédigez le prompt, vous faites référence à ces ID. Par exemple, vous utilisez [1]
dans la requête pour faire référence aux images avec l'ID de référence 1
. Si vous fournissez une description du sujet, vous pouvez également l'inclure dans la requête pour la rendre plus facile à lire.
Le tableau suivant fournit des modèles de requêtes qui peuvent servir de point de départ pour écrire des requêtes de personnalisation basées sur le style.
Cas d'utilisation | Images de référence | Modèle de requête | Exemple |
---|---|---|---|
Style de l'objet | Image du sujet (1 à 4) | Générez une image avec le STYLE_DESCRIPTION [1] en fonction de la légende suivante : IMAGE_DESCRIPTION. | Générez une image avec le neon sign style [1] en fonction de la légende suivante : a sign saying have a great day. |
Stylisation de l'image d'une personne sans entrée de maillage du visage | Image du sujet (1 à 4) | Crée une image de SUBJECT_DESCRIPTION [1] correspondant à la description : un portrait de SUBJECT_DESCRIPTION [1] ${PROMPT} | Crée une image de a woman with short hair[1] correspondant à la description : un portrait de a woman with short hair[1] dans un style de dessin animé 3D sur un fond flou. Un personnage mignon et adorable, avec un visage souriant, regardant la caméra, des tons pastel… |
Stylisation de l'image d'une personne avec ajout du maillage du visage en entrée |
Image du sujet (1 à 3) Image de contrôle avec maillage du visage (1) |
Crée une image de SUBJECT_DESCRIPTION [1] dans la pose de CONTROL_IMAGE [2] correspondant à la description : un portrait de SUBJECT_DESCRIPTION [1] ${PROMPT} | Crée une image de a woman with short hair [1] dans la pose de control image [2] correspondant à la description : un portrait de a woman with short hair [1] dans un style de dessin animé 3D sur un fond flou. Un personnage mignon et adorable, avec un visage souriant, regardant la caméra, des tons pastel… |
Bonnes pratiques et limites
Cas d'utilisation
La fonctionnalité de personnalisation propose un système de rédaction de requêtes libre, ce qui peut donner l'impression que le modèle peut faire plus que ce pour quoi il a été entraîné. Les sections suivantes décrivent les cas d'utilisation prévus pour la personnalisation et des exemples non exhaustifs de cas d'utilisation non prévus.
Nous vous recommandons d'utiliser cette fonctionnalité pour les cas d'utilisation prévus, car nous avons entraîné le modèle pour ces cas précis et nous nous attendons à de bons résultats. À l'inverse, si vous poussez le modèle à effectuer des tâches en dehors des cas d'utilisation prévus, vous devez vous attendre à de mauvais résultats.
Cas d'utilisation prévus
Voici les cas d'utilisation prévus pour la personnalisation basée sur un style :
Générer une image à partir d'une saisie de texte qui respecte le style spécifique fourni par une image de référence
Modifier une photo d'une personne
Modifier une photo d'une personne tout en conservant son expression faciale
Exemples de cas d'utilisation non prévus
Voici une liste non exhaustive de cas d'utilisation non prévus pour la personnalisation basée sur un style. Le modèle n'est pas entraîné pour ces cas d'utilisation et produira probablement des résultats médiocres.
Générer une image à partir de texte et à l'aide d'une image de référence, dans le but d'avoir un certain niveau de contrôle sur la composition générée à partir de l'image de référence
Générer une image d'une personne à partir d'une image de référence sur laquelle une personne présente une expression faciale particulière
Placer deux personnes dans une scène différente, tout en conservant leur identité et en spécifiant le style de l'image de sortie (par exemple, une peinture à l'huile) à l'aide d'une image de référence
Styliser une photo d'un animal de compagnie et la transformer en dessin, tout en préservant ou en spécifiant la composition de l'image
Placer un produit, comme un cookie ou un canapé, dans différentes scènes avec différentes perspectives, tout en adoptant un style d'image spécifique (photoréaliste avec des couleurs, des styles d'éclairage ou des animations spécifiques, par exemple)