Pakiety SDK Firebase AI Logic zapewniają dostęp do modeliImagen (za pomocą Imagen API), dzięki czemu możesz generować obrazy na podstawie prompta tekstowego. Dzięki tej funkcji możesz m.in.:
- Generowanie obrazów na podstawie promptów napisanych w języku naturalnym
- Generowanie obrazów w różnych formatach i stylach
- Renderowanie tekstu na obrazach
Pamiętaj, że Firebase AI Logic nie obsługuje jeszcze wszystkich funkcji dostępnych w przypadku modeli Imagen. Więcej informacji znajdziesz w sekcji Obsługiwane funkcje poniżej.
Przejdź do kodu dla danych wejściowych zawierających tylko tekst
Wybór między modelami Gemini i Imagen
Pakiety SDK Firebase AI Logic obsługują generowanie obrazów przy użyciu modelu Gemini lub Imagen. W większości przypadków zacznij od Gemini, a potem wybierz Imagen w przypadku specjalistycznych zadań, w których jakość obrazu ma kluczowe znaczenie.
Pamiętaj, że pakiety SDK Firebase AI Logic nie obsługują jeszcze danych wejściowych w postaci obrazu (np. do edycji) w przypadku modeli Imagen. Jeśli więc chcesz pracować z obrazami wejściowymi, możesz zamiast tego użyć modelu Gemini.
Wybierz Gemini, gdy chcesz:
- wykorzystywać wiedzę o świecie i rozumowanie do generowania obrazów dopasowanych do kontekstu;
- płynnie łączyć tekst i obrazy;
- Aby osadzać dokładne wizualizacje w długich sekwencjach tekstu.
- edytować obrazy w formie rozmowy, zachowując kontekst.
Wybierz Imagen, gdy chcesz:
- Aby nadać priorytet jakości obrazu, fotorealizmowi, szczegółom artystycznym lub określonym stylom (np. impresjonizmowi lub anime).
- Aby wyraźnie określić format wygenerowanych obrazów.
Zanim zaczniesz
Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dostawcy. |
Jeśli jeszcze tego nie zrobisz, zapoznaj się z przewodnikiem dla początkujących, w którym znajdziesz informacje o tym, jak skonfigurować projekt Firebase, połączyć aplikację z Firebase, dodać pakiet SDK, zainicjować usługę backendu dla wybranego dostawcy interfejsu API i utworzyć instancję ImagenModel
.
Modele obsługujące tę funkcję
Gemini Developer API obsługuje generowanie obrazów tylko przez najnowszy stabilny model Imagen 3, ale nie przez inne modele Imagen. Te Imagenograniczenia modelu obowiązują niezależnie od sposobu dostępuGemini Developer API.
imagen-3.0-generate-002
Generowanie obrazów na podstawie danych wejściowych zawierających tylko tekst
Możesz poprosić model Imagen o wygenerowanie obrazów, podając prompta w formie tekstu. Możesz wygenerować jeden obraz lub wiele obrazów.
Generowanie jednego obrazu na podstawie danych wejściowych zawierających tylko tekst
Zanim wypróbujesz ten przykład, zapoznaj się z sekcją Zanim zaczniesz w tym przewodniku, aby skonfigurować projekt i aplikację. W tej sekcji klikniesz też przycisk wybranego dostawcyGemini API, aby na tej stronie wyświetlały się treści dotyczące tego dostawcy. |
Możesz poprosić model Imagen o wygenerowanie pojedynczego obrazu, wpisując prompta tekstowego.
Utwórz instancję ImagenModel
i wywołaj 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
Korzystanie z Imagen nie jest jeszcze obsługiwane w przypadku Unity, ale zajrzyj tu za jakiś czas.
Dowiedz się, jak wybrać model odpowiednie do Twojego przypadku użycia i aplikacji.
Generowanie wielu obrazów na podstawie danych wejściowych zawierających tylko tekst
Zanim wypróbujesz ten przykład, zapoznaj się z sekcją Zanim zaczniesz w tym przewodniku, aby skonfigurować projekt i aplikację. W tej sekcji klikniesz też przycisk wybranego dostawcyGemini API, aby na tej stronie wyświetlały się treści dotyczące tego dostawcy. |
Domyślnie Imagen modele generują tylko 1 obraz na żądanie.
Możesz jednak poprosić model Imagen o wygenerowanie wielu obrazów w ramach jednego żądania, podając wartość ImagenGenerationConfig
podczas tworzenia instancji ImagenModel
.
Utwórz instancję ImagenModel
i wywołaj 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
Korzystanie z Imagen nie jest jeszcze obsługiwane w przypadku Unity, ale zajrzyj tu za jakiś czas.
Dowiedz się, jak wybrać model odpowiednie do Twojego przypadku użycia i aplikacji.
Obsługiwane funkcje i wymagania
Imagen modele oferują wiele funkcji związanych z generowaniem obrazów. W tej sekcji opisujemy, co jest obsługiwane podczas korzystania z modeli w Firebase AI Logic.
Obsługiwane funkcje
.Firebase AI Logic obsługuje te funkcje modeli Imagen.
Generowanie osób i twarzy (pod warunkiem, że Twój projekt Firebase ma zatwierdzenie od Google Cloud).
Generowanie tekstu na wygenerowanych obrazach
Dodawanie znaku wodnego do wygenerowanych obrazów
Konfigurowanie parametrów generowania obrazów, takich jak liczba wygenerowanych obrazów, format obrazu i znak wodny.
Konfigurowanie ustawień bezpieczeństwa
Firebase AI Logic nie obsługuje tych zaawansowanych funkcji modeli Imagen.
Pamiętaj, że większość tych funkcji wymaga umieszczenia na zatwierdzonej liście użytkowników, nawet jeśli używasz modeli Imagen po stronie serwera.
funkcje edycji lub manipulacji obrazami, w tym skalowanie obrazów;
dołączanie obrazów do żądania wysyłanego do modelu (np. w przypadku uczenia z małą liczbą przykładów);
Weryfikowanie cyfrowych znaków wodnych za pomocą pakietów SDK
Jeśli chcesz sprawdzić, czy obraz ma znak wodny, możesz przesłać go do Vertex AI Studio na karcie Media.Generowanie „obrazów na żywo” na podstawie tekstu (generowanie MP4)
Generowanie obrazów przy użyciu wstępnie zdefiniowanego stylu
Włączenie
includeSafetyAttributes
, co oznacza, że nie można zwrócićsafetyAttributes.categories
isafetyAttributes.scores
.Wyłączenie ulepszania promptów (parametr
enhancePrompt
), co oznacza, że oparte na modelu LLM narzędzie do przeredagowywania promptów zawsze będzie automatycznie dodawać więcej szczegółów do podanego prompta, aby dostarczać wyższej jakości obrazy, które lepiej odzwierciedlają podany prompt.zapisywanie wygenerowanego obrazu bezpośrednio w Google Cloud Storage w ramach odpowiedzi modelu (parametr
storageUri
); Obrazy są zawsze zwracane w odpowiedzi jako bajty obrazu zakodowane w formacie Base64.
Jeśli chcesz przesłać wygenerowany obraz do Cloud Storage, możesz użyć Cloud Storage for Firebase.
Specyfikacje i ograniczenia
Usługa (na prośbę) | Wartość |
---|---|
Maksymalna liczba tokenów wejściowych | 480 tokenów |
Maksymalna liczba obrazów wyjściowych | 4 obrazy |
Obsługiwane rozdzielczości obrazu wyjściowego (w pikselach) |
|
Co jeszcze możesz zrobić?
-
Zacznij myśleć o przygotowaniu do udostępnienia wersji produkcyjnej (patrz lista kontrolna produkcji), w tym:
- Skonfiguruj Firebase App Check, aby chronić Gemini API przed nadużyciami ze strony nieautoryzowanych klientów.
- Integrowanie Firebase Remote Config w celu aktualizowania wartości w aplikacji (np. nazwy modelu) bez publikowania nowej wersji aplikacji.
Dowiedz się, jak kontrolować generowanie treści
- Poznaj projektowanie promptów, w tym sprawdzone metody, strategie i przykładowe prompty.
- Skonfiguruj Imagen parametry modelu, takie jak format obrazu, generowanie osób i dodawanie znaków wodnych.
- Użyj ustawień bezpieczeństwa, aby dostosować prawdopodobieństwo otrzymania odpowiedzi, które mogą być uznane za szkodliwe.
Więcej informacji o obsługiwanych modelach
Dowiedz się więcej o modelach dostępnych w różnych przypadkach użycia, ich limitach i cenach.Prześlij opinię o korzystaniu z usługi Firebase AI Logic