Les SDK Firebase AI Logic vous donnent accès aux modèles Imagen (via Imagen API) afin que vous puissiez générer des images à partir d'une requête textuelle. Grâce à cette fonctionnalité, vous pouvez effectuer les opérations suivantes :
- Générer des images à partir de requêtes écrites en langage naturel
- Générer des images dans un large éventail de formats et de styles
- Afficher du texte dans des images
Ce guide explique comment générer des images à l'aide de Imagen en fournissant uniquement une requête textuelle.
Notez toutefois que Imagen peut également générer des images basées sur une image de référence à l'aide de sa fonctionnalité de personnalisation (actuellement disponible uniquement pour Android et Flutter). Dans la requête, vous fournissez une requête textuelle et une image de référence qui guide le modèle pour générer une nouvelle image basée sur le style, le sujet (comme un produit, une personne ou un animal) ou un contrôle spécifié. Par exemple, vous pouvez générer une nouvelle image à partir d'une photo d'un chat ou d'un dessin d'une fusée et de la lune.
Accéder au code pour une entrée en texte seul
Avant de commencer
|
Cliquez sur votre fournisseur Gemini API pour afficher le contenu spécifique au fournisseur et le code sur cette page. |
Si ce n'est pas déjà fait, suivez le
guide de démarrage, qui explique comment
configurer votre projet Firebase, connecter votre application à Firebase, ajouter le SDK,
initialiser le service backend pour le fournisseur d'API de votre choix et
créer une ImagenModel instance.
Modèles compatibles avec cette fonctionnalité
Le Gemini Developer API est compatible avec la génération d'images par les derniers modèles Imagen stables. Cette limitation des modèles compatibles s'applique, quelle que soit la manière dont vous accédez à l'Imagen Gemini Developer API.
imagen-4.0-generate-001imagen-4.0-fast-generate-001imagen-4.0-ultra-generate-001imagen-3.0-generate-002
Générer des images à partir d'une entrée en texte seul
Vous pouvez demander à un Imagen modèle de générer des images en fournissant uniquement du texte. Vous pouvez générer une image ou plusieurs images.
Vous pouvez également définir de nombreuses options de configuration différentes pour la génération d'images, telles que le format et le format de l'image.
Générer une image à partir d'une entrée en texte seul
|
Avant d'essayer cet exemple, suivez les étapes de la section
Avant de commencer de ce guide
pour configurer votre projet et votre application. Dans cette section, vous cliquerez également sur un bouton pour le fournisseur Gemini API de votre choix afin d'afficher le contenu spécifique au fournisseur sur cette page. |
Vous pouvez demander à un Imagen modèle de générer une seule image en fournissant uniquement du texte.
Veillez à créer une instance ImagenModel et à appeler generateImages.
Swift
import FirebaseAILogic
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.imagenModel(modelName: "imagen-4.0-generate-001")
// Provide an image generation prompt
let prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)
// Handle the generated image
guard let image = response.images.first else {
fatalError("No image in the response.")
}
let uiImage = UIImage(data: image.data)
Kotlin
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val model = ai.imagenModel("imagen-4.0-generate-001")
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
val imageResponse = model.generateImages(prompt)
// Handle the generated image
val image = imageResponse.images.first()
val bitmapImage = image.asBitmap()
}
Java
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.imagenModel(
/* modelName */ "imagen-4.0-generate-001");
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// Provide an image generation prompt
String prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
@Override
public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> 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
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create an `ImagenModel` instance with an Imagen model that supports your use case
const model = getImagenModel(ai, { model: "imagen-4.0-generate-001" });
// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";
// To generate an image, call `generateImages` with the text prompt
const response = await model.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
console.log(response.filteredReason);
}
if (response.images.length == 0) {
throw new Error("No images in the response.")
}
const image = response.images[0];
Dart
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 Gemini Developer API backend service
final model = FirebaseAI.googleAI();
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(model: 'imagen-4.0-generate-001');
// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';
// To generate an image, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);
if (response.images.isNotEmpty) {
final image = response.images[0];
// Process the image
} else {
// Handle the case where no images were generated
print('Error: No images were generated.');
}
Unity
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(modelName: "imagen-4.0-generate-001");
// Provide an image generation prompt
var prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);
// Handle the generated image
if (response.Images.Count == 0) {
throw new Exception("No image in the response.");
}
var image = response.Images[0].AsTexture2D();
Découvrez comment choisir un modèle adapté à votre cas d'utilisation et à votre application.
Générer plusieurs images à partir d'une entrée en texte seul
|
Avant d'essayer cet exemple, suivez les étapes de la section
Avant de commencer de ce guide
pour configurer votre projet et votre application. Dans cette section, vous cliquerez également sur un bouton pour le fournisseur Gemini API de votre choix afin d'afficher le contenu spécifique au fournisseur sur cette page. |
Par défaut, les modèles Imagen ne génèrent qu'une seule image par requête.
Toutefois, vous pouvez demander à un Imagen modèle de générer plusieurs images
par requête en fournissant un
ImagenGenerationConfig
lors de la création de l'instance ImagenModel.
Veillez à créer une instance ImagenModel et à appeler generateImages.
Swift
import FirebaseAILogic
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.imagenModel(
modelName: "imagen-4.0-generate-001",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: ImagenGenerationConfig(numberOfImages: 4)
)
// Provide an image generation prompt
let prompt = "An astronaut riding a horse"
// To generate images, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if let filteredReason = response.filteredReason {
print(filteredReason)
}
// Handle the generated images
let uiImages = response.images.compactMap { UIImage(data: $0.data) }
Kotlin
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val model = ai.imagenModel(
modelName = "imagen-4.0-generate-001",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig = ImagenGenerationConfig(numberOfImages = 4)
)
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate images, call `generateImages` with the text prompt
val imageResponse = model.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (imageResponse.filteredReason != null) {
Log.d(TAG, "FilteredReason: ${imageResponse.filteredReason}")
}
for (image in imageResponse.images) {
val bitmap = image.asBitmap()
// Use the bitmap to display the image in your UI
}
}
Java
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
.setNumberOfImages(4)
.build();
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.imagenModel(
/* modelName */ "imagen-4.0-generate-001",
/* imageGenerationConfig */ imagenGenerationConfig);
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// Provide an image generation prompt
String prompt = "An astronaut riding a horse";
// To generate images, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
@Override
public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> result) {
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (result.getFilteredReason() != null){
Log.d("TAG", "FilteredReason: " + result.getFilteredReason());
}
// Handle the generated images
List<ImagenInlineImage> images = result.getImages();
for (ImagenInlineImage image : images) {
Bitmap bitmap = image.asBitmap();
// Use the bitmap to display the image in your UI
}
}
@Override
public void onFailure(Throwable t) {
// ...
}
}, Executors.newSingleThreadExecutor());
Web
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create an `ImagenModel` instance with an Imagen model that supports your use case
const model = getImagenModel(
ai,
{
model: "imagen-4.0-generate-001",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: {
numberOfImages: 4
}
}
);
// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";
// To generate images, call `generateImages` with the text prompt
const response = await model.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
console.log(response.filteredReason);
}
if (response.images.length == 0) {
throw new Error("No images in the response.")
}
const images = response.images[0];
Dart
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 Gemini Developer API backend service
final ai = FirebaseAI.googleAI();
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(
model: 'imagen-4.0-generate-001',
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: ImagenGenerationConfig(numberOfImages: 4),
);
// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';
// To generate images, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason != null) {
print(response.filteredReason);
}
if (response.images.isNotEmpty) {
final images = response.images;
for(var image in images) {
// Process the image
}
} else {
// Handle the case where no images were generated
print('Error: No images were generated.');
}
Unity
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(
modelName: "imagen-4.0-generate-001",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: new ImagenGenerationConfig(numberOfImages: 4)
);
// Provide an image generation prompt
var prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (!string.IsNullOrEmpty(response.FilteredReason)) {
UnityEngine.Debug.Log("Filtered reason: " + response.FilteredReason);
}
// Handle the generated images
var images = response.Images.Select(image => image.AsTexture2D());
Découvrez comment choisir un modèle adapté à votre cas d'utilisation et à votre application.
Fonctionnalités et exigences compatibles
Les modèles Imagen offrent de nombreuses fonctionnalités liées à la génération d'images. Cette section décrit les fonctionnalités compatibles lorsque vous utilisez les modèles avec Firebase AI Logic.
Fonctionnalités proposées
Firebase AI Logic est compatible avec les fonctionnalités suivantes des modèles Imagen :
Générer des personnes, des visages et du texte dans les images générées
Modifier des images ou inclure des images dans la requête lorsque vous utilisez Vertex AI Gemini API (actuellement disponible uniquement pour Android et Flutter)
Ajouter un filigrane aux images générées
Vérifier les filigranes numériques lorsque vous utilisez Vertex AI Gemini API
Si vous souhaitez vérifier qu'une image comporte un filigrane, vous pouvez l'importer dans Vertex AI Studio à l'aide de l'onglet Media.Configurer les paramètres de génération d'images , tels que le nombre d'images générées, le format et le filigrane
Configurer les paramètres de sécurité
Firebase AI Logic n'est pas compatible avec les fonctionnalités avancées suivantes des Imagen modèles :
Désactiver le réécrivain de requêtes (paramètre
enhancePrompt). Cela signifie qu'un outil de réécriture de requêtes basé sur un LLM ajoutera toujours automatiquement plus de détails à la requête fournie pour générer des images de meilleure qualité qui reflètent mieux le résultat attendu.Écrire une image générée directement dans Google Cloud Storage dans le cadre de la réponse du modèle (paramètre
storageUri). Au lieu de cela, les images sont toujours renvoyées sous forme d'octets d'image encodés en base64 dans la réponse.
Si vous souhaitez importer une image générée dans Cloud Storage, vous pouvez utiliser Cloud Storage for Firebase.
Spécifications et limites
| Propriété (par requête) | Valeur |
|---|---|
| Nombre maximal de jetons d'entrée | 480 jetons |
| Nombre maximal d'images de sortie | 4 images |
| Résolutions d'image de sortie compatibles (pixels) |
|
Qu'est-ce que tu sais faire d'autre ?
-
Commencez à réfléchir à la préparation de la production (consultez la
checklist de production) :
- Configurez Firebase App Check dès que possible pour protéger l'Gemini API contre les utilisations abusives par des clients non autorisés.
- Intégrez Firebase Remote Config pour mettre à jour les valeurs de votre application (comme le nom du modèle) sans publier de nouvelle version de l'application.
Découvrez comment contrôler la génération de contenu
- Découvrez la conception de requêtes, y compris les bonnes pratiques, les stratégies et des exemples de requêtes.
- Configurez les paramètres du modèle Imagen tels que le format, la génération de personnes et le filigrane.
- Utilisez les paramètres de sécurité pour ajuster la probabilité d'obtenir des réponses qui peuvent être considérées comme nuisibles.
En savoir plus sur les modèles compatibles
Découvrez les modèles disponibles pour différents cas d'utilisation ainsi que leurs quotas et leurs tarifs.Envoyez des commentaires sur votre expérience avec Firebase AI Logic