Pakiety SDK Firebase AI Logic zapewniają dostęp do modeli Imagen) dzięki czemu możesz generować obrazy na podstawie promptów tekstowych.Imagen API Dzięki tej funkcji możesz m.in.:
- generować obrazy na podstawie promptów napisanych w języku naturalnym;
- generować obrazy w wielu formatach i stylach;
- renderować tekst na obrazach.
Z tego przewodnika dowiesz się, jak generować obrazy za pomocą Imagen, podając tylko prompta tekstowego.
Pamiętaj jednak, że Imagen może też generować obrazy na podstawie obrazu referencyjnego za pomocą funkcji dostosowywania (obecnie tylko w Androidzie i Flutterze). W żądaniu podajesz prompta tekstowego i obraz referencyjny, który pomaga modelowi wygenerować nowy obraz na podstawie określonego stylu, obiektu (np. produktu, osoby lub zwierzęcia) lub elementu sterującego. Możesz na przykład wygenerować nowy obraz na podstawie zdjęcia kota lub rysunku rakiety i księżyca.
arrow_downward Przejdź do kodu dla danych wejściowych zawierających tylko tekst
Zanim zaczniesz
|
Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod specyficzne dla dostawcy. |
Jeśli jeszcze tego nie zrobisz, zapoznaj się z
przewodnikiem dla początkujących, w którym opisujemy, jak
skonfigurować projekt Firebase, połączyć aplikację z Firebase, dodać pakiet SDK, zainicjować usługę backendową dla wybranego dostawcy API i
utworzyć instancję ImagenModel.
Modele obsługujące tę funkcję
Gemini Developer API obsługuje generowanie obrazów za pomocą najnowszych stabilnych Imagen modeli. To ograniczenie dotyczące obsługiwanych Imagen modeli obowiązuje niezależnie od tego, jak uzyskujesz dostęp do Gemini Developer API.
imagen-4.0-generate-001imagen-4.0-fast-generate-001imagen-4.0-ultra-generate-001imagen-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 tylko prompta tekstowego. Możesz wygenerować 1 obraz lub kilka obrazów.
Możesz też ustawić wiele różnych opcji konfiguracji generowania obrazów, takich jak format obrazu i format obrazu.
Generowanie 1 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 dostawcy Gemini API Gemini API, aby na tej stronie wyświetlały się treści specyficzne dla dostawcy. |
Możesz poprosić model Imagen o wygenerowanie pojedynczego obrazu, podając tylko prompta tekstowego.
Utwórz instancję ImagenModel i wywołaj 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();
Dowiedz się, jak wybrać model odpowiednią dla 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 dostawcy Gemini API Gemini API, aby na tej stronie wyświetlały się treści specyficzne dla dostawcy. |
Domyślnie modele Imagen generują tylko 1 obraz na żądanie.
Możesz jednak poprosić model Imagen o wygenerowanie kilku obrazów
na żądanie, podając
ImagenGenerationConfig
podczas tworzenia instancji ImagenModel.
Utwórz instancję ImagenModel i wywołaj 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());
Dowiedz się, jak wybrać model odpowiednią dla Twojego przypadku użycia i aplikacji.
Obsługiwane funkcje i wymagania
Modele Imagen oferują wiele funkcji związanych z generowaniem obrazów. W tej sekcji opisujemy, co jest obsługiwane podczas korzystania z modeli z Firebase AI Logic.
Obsługiwane funkcje
Firebase AI Logic obsługuje te funkcje modeli Imagen:
Generowanie osób, twarzy i tekstu na wygenerowanych obrazach
Edytowanie obrazów lub dołączanie obrazów do żądania podczas korzystania z Vertex AI Gemini API (obecnie tylko w Androidzie i Flutterze)
Dodawanie znaku wodnego do wygenerowanych obrazów
Weryfikowanie cyfrowych znaków wodnych podczas korzystania z Vertex AI Gemini API
Jeśli chcesz sprawdzić, czy obraz ma znak wodny, możesz przesłać go do Vertex AI Studio na karcie Media.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
Wyłączanie narzędzia do przeredagowywania promptów (parametr
enhancePrompt). Oznacza to, że narzędzie do przeredagowywania promptów oparte na modelu LLM zawsze automatycznie doda 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 z 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
| Usługa (na żądanie) | Wartość |
|---|---|
| Maksymalna liczba tokenów wejściowych | 480 tokenów |
| Maksymalna liczba obrazów wyjściowych | 4 obrazy |
| Obsługiwane rozdzielczości obrazów wyjściowych (w pikselach) |
|
Co jeszcze możesz zrobić?
-
Zacznij przygotowywać się do wdrożenia (zapoznaj się z
listą kontrolną wdrożenia):
- Skonfiguruj Firebase App Check jak najszybciej, aby chronić Gemini API przed nadużyciami ze strony nieautoryzowanych klientów.
- Zintegruj Firebase Remote Config , aby aktualizować wartości w aplikacji (np. nazwę 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 parametry modelu Imagen takie jak format obrazu, generowanie osób i znak wodny.
- 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 oraz o ich limitach i cenach.Prześlij opinię o korzystaniu z Firebase AI Logic