Pakiety SDK Firebase AI Logic zapewniają dostęp do modeli Imagen 3 (za pomocą Imagen API), dzięki czemu możesz generować obrazy na podstawie prompta tekstowego. Dzięki tej funkcji możesz:
- generować obrazy na podstawie promptów napisanych w języku naturalnym;
- generować obrazy w wielu formatach i stylach;
- Renderowanie tekstu na obrazach
Pamiętaj, że Firebase AI Logic nie obsługuje jeszcze wszystkich funkcji dostępnych w modelach Imagen. Więcej informacji znajdziesz w sekcji Obsługiwane funkcje i możliwości na tej stronie.
Przejdź do kodu dla danych wejściowych tylko tekstowych
Zanim zaczniesz
Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod związane z tym dostawcą. |
Jeśli jeszcze tego nie zrobisz, przeczytaj przewodnik dla początkujących, w którym znajdziesz instrukcje konfigurowania projektu Firebase, łączenia aplikacji z Firebase, dodawania pakietu SDK, inicjowania usługi backendowej wybranego dostawcy interfejsu API oraz tworzenia instancji ImagenModel
.
Modele, które obsługują tę funkcję
Generowanie obrazów jest obsługiwane przez modele Imagen 3.
Pamiętaj, że Firebase AI Logic obsługuje też generowanie obrazów za pomocą modeli Gemini. Dokumentację udostępnimy wkrótce.
Generowanie obrazów na podstawie danych wejściowych zawierających tylko tekst
Możesz poprosić model Imagen o wygenerowanie obrazów, podając prompt tekstowy. Możesz wygenerować 1 obraz lub wiele obrazów.
Generowanie jednego obrazu na podstawie danych wejściowych zawierających tylko tekst
Zanim użyjesz tego szablonu, zapoznaj się z sekcją Zanim zaczniesz tego przewodnika, aby skonfigurować projekt i aplikację. W tej sekcji kliknij też przycisk wybranegoGemini API dostawcy, aby wyświetlić na tej stronie treści związane z tym dostawcą. |
Możesz poprosić model Imagen o wygenerowanie pojedynczego obrazu, podając prompt tekstowy.
Utwórz instancję ImagenModel
i wywołaj funkcję 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.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
Używanie Imagen nie jest jeszcze obsługiwane w Unity, ale wkrótce się to zmieni.
Dowiedz się, jak wybrać model odpowiedni do Twojego przypadku użycia i aplikacji.
Generowanie wielu obrazów na podstawie danych wejściowych zawierających tylko tekst
Zanim użyjesz tego szablonu, zapoznaj się z sekcją Zanim zaczniesz tego przewodnika, aby skonfigurować projekt i aplikację. W tej sekcji kliknij też przycisk wybranegoGemini API dostawcy, aby wyświetlić na tej stronie treści związane z tym dostawcą. |
Domyślnie modele Imagen 3 generują tylko 1 obraz na każde żądanie.
Możesz jednak poprosić model Imagen o wygenerowanie wielu obrazów na żądanie, podając ImagenGenerationConfig
podczas tworzenia instancji ImagenModel
.
Utwórz instancję ImagenModel
i wywołaj funkcję 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.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
Używanie Imagen nie jest jeszcze obsługiwane w Unity, ale wkrótce się to zmieni.
Dowiedz się, jak wybrać model odpowiedni do Twojego przypadku użycia i aplikacji.
Obsługiwane funkcje i wymagania
Modele Imagen 3 oferują wiele funkcji związanych z generowaniem obrazów. W tej sekcji opisano obsługiwane opcje w przypadku korzystania z modeli w ramach usługi Firebase AI Logic.
Obsługiwane funkcje i możliwości
Firebase AI Logic obsługuje te funkcje w modelach Imagen 3.
generowanie osób i twarzy (pod warunkiem, że Twój projekt Firebase ma zatwierdzanie Google Cloud).
generowanie tekstu na wygenerowanych obrazach;
Dodawanie znaku wodnego do wygenerowanych obrazów
Konfigurowanie parametrów generowania obrazów, takich jak liczba generowanych obrazów, format obrazu i znak wodny.
Konfigurowanie ustawień bezpieczeństwa
Firebase AI Logic nie obsługuje tych zaawansowanych funkcji modeli Imagen 3.
Pamiętaj, że większość z tych funkcji wymaga umieszczenia na liście zatwierdzonych użytkowników, nawet gdy używasz modeli Imagen po stronie serwera.
funkcje edycji lub manipulacji obrazem, w tym skalowanie obrazu;
Dołączanie obrazów do żądania wysyłanego do modelu (np. w przypadku uczenia się z niewielkiej próby)
Weryfikowanie cyfrowych znaków wodnych za pomocą pakietów SDK
Jeśli chcesz sprawdzić, czy obraz zawiera znak wodny, możesz go przesłać do Vertex AI Studio za pomocą karty Media.Generowanie „żywych obrazów” na podstawie tekstu (generowanie MP4)
Generowanie obrazów przy użyciu wstępnie zdefiniowanego stylu
Włączenie opcji
includeSafetyAttributes
, co oznacza, żesafetyAttributes.categories
isafetyAttributes.scores
nie mogą zostać zwrócone.Wyłączenie ulepszania promptów (parametr
enhancePrompt
), co oznacza, że narzędzie do przeredagowywania promptów oparte na modelu LLM zawsze automatycznie doda więcej szczegółów do podanych promptów, aby dostarczać obrazy o wyższej jakości, które lepiej odzwierciedlają promptzapisywanie wygenerowanego obrazu bezpośrednio w pliku Google Cloud Storage jako części odpowiedzi modelu (parametr
storageUri
). Zamiast tego 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
Limity (na żądanie) | Imagen 3 | Imagen 3 Fast |
---|---|---|
Maksymalna liczba tokenów wejściowych | 480 tokenów | 480 tokenów |
Maksymalna liczba obrazów wyjściowych | 4 obrazy | 4 obrazy |
Obsługiwane rozdzielczości obrazów wyjściowych (w pikselach) |
|
|
Co jeszcze możesz zrobić?
-
Zacznij myśleć o przygotowaniu aplikacji do wersji produkcyjnej (patrz lista kontrolna wersji produkcyjnej), w tym:
- Skonfiguruj Firebase App Check, aby chronić usługę Gemini API przed nadużyciami przez nieautoryzowanych klientów.
- Integrating Firebase Remote Config to update values in your app (like model name) without releasing a new app version.
Dowiedz się, jak kontrolować generowanie treści
- Zrozumieć projektowanie promptów, w tym sprawdzone metody, strategie i przykładowe prompty.
- Skonfiguruj parametry modelu Imagen, takie jak format obrazu, generowanie postaci i dodawanie znaku wodnego.
- Używaj ustawień bezpieczeństwa, aby dostosować prawdopodobieństwo otrzymywania odpowiedzi, które mogą być uważane za szkodliwe.
Więcej informacji o obsługiwanych modelach
Dowiedz się więcej o modelach dostępnych w różnych przypadkach użycia oraz o ich limitach i cenach.Prześlij opinię o swoich wrażeniach związanych z usługą Firebase AI Logic