Gli SDK Firebase AI Logic ti consentono di accedere ai modelli Imagen (tramite Imagen API) per generare immagini da un prompt di testo. Con questa funzionalità puoi:
- Generare immagini da prompt scritti in linguaggio naturale
- Generare immagini in un'ampia gamma di formati e stili
- Visualizzare il testo nelle immagini
Questa guida descrive come generare immagini utilizzando Imagen fornendo solo un prompt di testo.
Tieni presente, tuttavia, che Imagen può anche generare immagini basate su un'immagine di riferimento utilizzando la sua funzionalità di personalizzazione (attualmente solo per Android e Flutter). Nella richiesta, fornisci un prompt di testo e un'immagine di riferimento che guidi il modello a generare una nuova immagine in base allo stile, al soggetto (come un prodotto, una persona o un animale) o a un controllo specificato. Ad esempio, puoi generare una nuova immagine da una foto di un gatto o da un disegno di un razzo e della luna.
Vai al codice per l'input solo testo
Scelta tra i modelli Gemini e Imagen
Gli SDK Firebase AI Logic supportano la generazione e la modifica delle immagini utilizzando un modello Gemini o un modello Imagen.
Per la maggior parte dei casi d'uso, inizia con Gemini, quindi scegli Imagen solo per attività specializzate in cui la qualità dell'immagine è fondamentale.
Scegli Gemini quando vuoi:
- Utilizzare la conoscenza del mondo e il ragionamento per generare immagini contestualmente pertinenti.
- Per combinare perfettamente testo e immagini o per alternare testo e immagini nell'output.
- Per incorporare immagini accurate all'interno di lunghe sequenze di testo.
- Per modificare le immagini in modo conversazionale mantenendo il contesto.
Scegli Imagen quando vuoi:
- Per dare la priorità alla qualità dell'immagine, al fotorealismo, ai dettagli artistici o a stili specifici (ad esempio, impressionismo o anime).
- Per infondere branding, stile o generazione di loghi e design di prodotti.
- Per specificare in modo esplicito le proporzioni o il formato delle immagini generate.
Prima di iniziare
Fai clic sul tuo fornitore Gemini API per visualizzare i contenuti e il codice specifici del fornitore in questa pagina. |
Se non l'hai ancora fatto, completa la guida introduttiva, che descrive come configurare il progetto Firebase, connettere l'app a Firebase, aggiungere l'SDK, inizializzare il servizio di backend per il provider API scelto e creare un'istanza ImagenModel
.
Modelli che supportano questa funzionalità
Gemini Developer API supporta la generazione di immagini da parte dei modelli Imagen stabili più recenti. Questa limitazione dei modelli Imagen supportati è applicabile indipendentemente da come accedi a Gemini Developer API.
imagen-4.0-generate-001
imagen-4.0-fast-generate-001
imagen-4.0-ultra-generate-001
imagen-3.0-generate-002
Generare immagini da input solo di testo
Puoi chiedere a un modello Imagen di generare immagini utilizzando solo prompt di testo. Puoi generare un'immagine o più immagini.
Puoi anche impostare molte opzioni di configurazione diverse per la generazione di immagini, come le proporzioni e il formato dell'immagine.
Generare un'immagine da un input di solo testo
Prima di provare questo esempio, completa la sezione
Prima di iniziare di questa guida
per configurare il progetto e l'app. In questa sezione, fai clic anche su un pulsante per il provider Gemini API che hai scelto, in modo da visualizzare i contenuti specifici del provider in questa pagina. |
Puoi chiedere a un modello Imagen di generare una singola immagine fornendo solo testo.
Assicurati di creare un'istanza ImagenModel
e di chiamare generateImages
.
Swift
import FirebaseAI
// 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
// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
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();
Scopri come scegliere un modello adatti al tuo caso d'uso e alla tua app.
Generare più immagini da input solo di testo
Prima di provare questo esempio, completa la sezione
Prima di iniziare di questa guida
per configurare il progetto e l'app. In questa sezione, fai clic anche su un pulsante per il provider Gemini API che hai scelto, in modo da visualizzare i contenuti specifici del provider in questa pagina. |
Per impostazione predefinita, i modelli Imagen generano una sola immagine per richiesta.
Tuttavia, puoi chiedere a un modello Imagen di generare più immagini
per richiesta fornendo un
ImagenGenerationConfig
quando crei l'istanza ImagenModel
.
Assicurati di creare un'istanza ImagenModel
e di chiamare generateImages
.
Swift
import FirebaseAI
// 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
// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
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());
Scopri come scegliere un modello adatti al tuo caso d'uso e alla tua app.
Funzionalità e requisiti supportati
I modelli Imagen offrono molte funzionalità relative alla generazione di immagini. Questa sezione descrive gli elementi supportati quando si utilizzano i modelli con Firebase AI Logic.
Funzionalità e capacità supportate
Firebase AI Logic supporta queste funzionalità dei modelli Imagen:
Generazione di persone, volti e testo all'interno delle immagini generate
Modifica delle immagini o inclusione di immagini nella richiesta quando utilizzi Vertex AI Gemini API (attualmente solo per Android e Flutter)
Aggiungere una filigrana alle immagini generate
Verifica delle filigrane digitali quando utilizzi Vertex AI Gemini API
Se vuoi verificare che un'immagine abbia una filigrana, puoi caricarla in Vertex AI Studio utilizzando la scheda Media.Configurazione dei parametri di generazione delle immagini, come il numero di immagini generate, le proporzioni e l'aggiunta di filigrane
Configurazione delle impostazioni di sicurezza
Firebase AI Logic non supporta queste funzionalità avanzate dei modelli Imagen:
Se attivi
includeSafetyAttributes
, significa chesafetyAttributes.categories
esafetyAttributes.scores
non possono essere restituitiDisattivazione della riscrittura dei prompt (il parametro
enhancePrompt
). Ciò significa che uno strumento di riscrittura del prompt basato su LLM aggiungerà sempre automaticamente più dettagli al prompt fornito per fornire immagini di qualità superiore che riflettano meglio il prompt fornito.Scrivere un'immagine generata direttamente in Google Cloud Storage come parte della risposta del modello (il parametro
storageUri
). Le immagini vengono sempre restituite come byte immagine con codifica base64 nella risposta.
Se vuoi caricare un'immagine generata su Cloud Storage, puoi utilizzare Cloud Storage for Firebase.
Specifiche e limitazioni
Proprietà (per richiesta) | Valore |
---|---|
Numero massimo di token di input | 480 token |
Numero massimo di immagini di output | 4 immagini |
Risoluzioni delle immagini di output supportate (pixel) |
|
Cos'altro puoi fare?
-
Inizia a pensare a prepararti per la produzione (consulta l'elenco di controllo per la produzione),
tra cui:
- Configurazione di Firebase App Check per proteggere Gemini API da abusi da parte di client non autorizzati.
- Integrazione di Firebase Remote Config per aggiornare i valori nella tua app (come il nome del modello) senza rilasciare una nuova versione dell'app.
Scopri come controllare la generazione di contenuti
- Comprendere la progettazione dei prompt, incluse best practice, strategie ed esempi di prompt.
- Configura i parametri del modello Imagen come le proporzioni, la generazione di persone e la filigrana.
- Utilizza le impostazioni di sicurezza per regolare la probabilità di ricevere risposte che potrebbero essere considerate dannose.
Scopri di più sui modelli supportati
Scopri di più sui modelli disponibili per vari casi d'uso e sulle relative quote e prezzi.Fornisci un feedback sulla tua esperienza con Firebase AI Logic