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
Tieni presente che Firebase AI Logic non supporta ancora tutte le funzionalità disponibili per i modelli Imagen. Scopri di più in Funzionalità e capacità supportate più avanti in questa pagina.
Vai al codice per l'input solo testo
Scelta tra i modelli Gemini e Imagen
Gli SDK Firebase AI Logic supportano la generazione di immagini utilizzando un modello Gemini o un modello Imagen. Per la maggior parte dei casi d'uso, inizia con Gemini, quindi scegli Imagen per attività specializzate in cui la qualità dell'immagine è fondamentale.
Tieni presente che gli SDK Firebase AI Logic non supportano ancora l'input di immagini (ad esempio per la modifica) con i modelli Imagen. Pertanto, se vuoi lavorare con immagini di input, puoi utilizzare un modello Gemini.
Scegli Gemini quando vuoi:
- Utilizzare la conoscenza del mondo e il ragionamento per generare immagini contestualmente pertinenti.
- Per combinare perfettamente testo e immagini.
- 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 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 solo la generazione di immagini tramite l'ultimo modello Imagen 3 stabile, ma non gli altri modelli Imagen. Queste limitazioni del modello Imagen sono applicabili indipendentemente da come accedi a Gemini Developer API.
imagen-3.0-generate-002
Generare immagini da input solo di testo
Puoi chiedere a un modello Imagen di generare immagini con un prompt di testo. Puoi generare un'immagine o più immagini.
Genera 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 un prompt di testo.
Assicurati di creare un'istanza ImagenModel
e 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-3.0-generate-002")
// 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
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel("imagen-3.0-generate-002")
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
val imageResponse = imagenModel.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-3.0-generate-002");
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 3 model that supports your use case
const imagenModel = getImagenModel(ai, { model: "imagen-3.0-generate-002" });
// 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 imagenModel.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
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model =
FirebaseAI.googleAI().imagenModel(model: 'imagen-3.0-generate-002');
// 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
L'utilizzo di Imagen non è ancora supportato per Unity, ma ricontrolla a breve.
Scopri come scegliere un modello adatta 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 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-3.0-generate-002",
// 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
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
modelName = "imagen-3.0-generate-002",
// 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 = imagenModel.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-3.0-generate-002",
/* 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 3 model that supports your use case
const imagenModel = getImagenModel(
ai,
{
model: "imagen-3.0-generate-002",
// 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 imagenModel.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
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model =
FirebaseAI.googleAI().imagenModel(
model: 'imagen-3.0-generate-002',
// 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
L'utilizzo di Imagen non è ancora supportato per Unity, ma ricontrolla a breve.
Scopri come scegliere un modello adatta 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 cosa è supportato 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 e volti (dato che il tuo progetto Firebase ha ricevuto l'approvazione da Google Cloud)
Generare testo all'interno delle immagini generate
Aggiungere una filigrana alle immagini generate
Configurazione dei parametri di generazione delle immagini, come il numero di immagini generate, le proporzioni e l'applicazione di filigrane
Configurazione delle impostazioni di sicurezza
Firebase AI Logic non supporta queste funzionalità avanzate dei modelli Imagen.
Tieni presente che la maggior parte di queste funzionalità richiede l'inserimento in un elenco approvato di utenti anche quando utilizzi i modelli Imagen lato server.
Funzionalità di modifica o manipolazione delle immagini, inclusa l'upscaling delle immagini
Includere immagini nella richiesta al modello (ad esempio per l'apprendimento few-shot)
Verifica delle filigrane digitali utilizzando gli SDK
Se vuoi verificare che un'immagine abbia una filigrana, puoi caricarla in Vertex AI Studio utilizzando la scheda Media.Generazione di "immagini live" dal testo (generazione di MP4)
Generare immagini utilizzando uno stile predefinito
Se attivi
includeSafetyAttributes
, significa chesafetyAttributes.categories
esafetyAttributes.scores
non possono essere restituitiDisattivazione del miglioramento del prompt (il parametro
enhancePrompt
), il che significa che uno strumento di riscrittura del prompt basato su LLM aggiungerà sempre automaticamente maggiori dettagli al prompt fornito per fornire immagini di qualità superiore che riflettano meglio il prompt fornitoScrivere 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 (ad esempio 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 l'inserimento di filigrane.
- 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