Các SDK Firebase AI Logic cho phép bạn truy cập vào các mô hình Imagen (thông qua Imagen API) để bạn có thể tạo hình ảnh từ một câu lệnh văn bản. Với tính năng này, bạn có thể làm những việc như:
- Tạo hình ảnh từ câu lệnh được viết bằng ngôn ngữ tự nhiên
- Tạo hình ảnh ở nhiều định dạng và kiểu
- Kết xuất văn bản trong hình ảnh
Hướng dẫn này mô tả cách tạo hình ảnh bằng Imagen chỉ bằng cách cung cấp một câu lệnh văn bản.
Tuy nhiên, hãy lưu ý rằng Imagen cũng có thể tạo hình ảnh dựa trên một hình ảnh tham khảo bằng cách sử dụng tính năng tuỳ chỉnh (hiện chỉ dành cho Android và Flutter). Trong yêu cầu, bạn cung cấp một câu lệnh bằng văn bản và một hình ảnh tham khảo hướng dẫn mô hình tạo một hình ảnh mới dựa trên kiểu, đối tượng (như sản phẩm, người hoặc động vật) hoặc chế độ kiểm soát được chỉ định. Ví dụ: bạn có thể tạo một hình ảnh mới từ ảnh chụp một con mèo hoặc bản vẽ một tên lửa và mặt trăng.
Chuyển đến mã cho dữ liệu đầu vào chỉ bằng văn bản
Trước khi bắt đầu
|
Nhấp vào nhà cung định Gemini API để xem nội dung dành riêng cho nhà cung cấp và mã trên trang này. |
Nếu bạn chưa làm, hãy hoàn tất
hướng dẫn bắt đầu sử dụng. Hướng dẫn này mô tả cách
thiết lập dự án Firebase, kết nối ứng dụng với Firebase, thêm SDK,
khởi chạy dịch vụ phụ trợ cho nhà cung cấp API mà bạn chọn và
tạo một thực thể ImagenModel.
Các mô hình hỗ trợ tính năng này
The Gemini Developer API hỗ trợ tính năng tạo hình ảnh bằng các mô hình ổn định Imagen mới nhất. Giới hạn này của các mô hình được hỗ trợ áp dụng bất kể cách bạn truy cập vàoImagen Gemini Developer API.
imagen-4.0-generate-001imagen-4.0-fast-generate-001imagen-4.0-ultra-generate-001imagen-3.0-generate-002
Tạo hình ảnh từ dữ liệu đầu vào chỉ bằng văn bản
Bạn có thể yêu cầu một mô hình Imagen tạo hình ảnh bằng cách chỉ đưa ra câu lệnh bằng văn bản. Bạn có thể tạo một hình ảnh hoặc nhiều hình ảnh.
Tạo một hình ảnh từ dữ liệu đầu vào chỉ bằng văn bản
|
Trước khi thử mẫu này, hãy hoàn tất phần
Trước khi bắt đầu của hướng dẫn này
để thiết lập dự án và ứng dụng. Trong phần đó, bạn cũng sẽ nhấp vào một nút cho nhà cung cấp Gemini API mà bạn chọn để xem nội dung dành riêng cho nhà cung cấp trên trang này. |
Bạn có thể yêu cầu một mô hình Imagen tạo một hình ảnh bằng cách chỉ đưa ra câu lệnh bằng văn bản.
Hãy nhớ tạo một thực thể ImagenModel và gọi 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();
Tìm hiểu cách chọn một mô hình phù hợp với trường hợp sử dụng và ứng dụng của bạn.
Tạo nhiều hình ảnh từ dữ liệu đầu vào chỉ bằng văn bản
|
Trước khi thử mẫu này, hãy hoàn tất phần
Trước khi bắt đầu của hướng dẫn này
để thiết lập dự án và ứng dụng. Trong phần đó, bạn cũng sẽ nhấp vào một nút cho nhà cung cấp Gemini API mà bạn chọn để xem nội dung dành riêng cho nhà cung cấp trên trang này. |
Theo mặc định, các mô hình Imagen chỉ tạo một hình ảnh cho mỗi yêu cầu.
Tuy nhiên, bạn có thể yêu cầu một mô hình Imagen tạo nhiều hình ảnh
cho mỗi yêu cầu bằng cách cung cấp
ImagenGenerationConfig
khi tạo thực thể ImagenModel.
Hãy nhớ tạo một thực thể ImagenModel và gọi 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());
Tìm hiểu cách chọn một mô hình phù hợp với trường hợp sử dụng và ứng dụng của bạn.
Các tính năng và yêu cầu được hỗ trợ
Các mô hình Imagen cung cấp nhiều tính năng liên quan đến tính năng tạo hình ảnh. Phần này mô tả những tính năng được hỗ trợ khi sử dụng các mô hình này với Firebase AI Logic.
Các tính năng và chức năng được hỗ trợ
Firebase AI Logic hỗ trợ các tính năng sau của các mô hình Imagen:
Tạo người, khuôn mặt và văn bản trong hình ảnh được tạo
Chỉnh sửa hình ảnh hoặc đưa hình ảnh vào yêu cầu khi sử dụng Vertex AI Gemini API (hiện chỉ dành cho Android và Flutter)
Thêm hình mờ vào hình ảnh được tạo
Xác minh hình mờ kỹ thuật số khi sử dụng Vertex AI Gemini API
Nếu muốn xác minh rằng một hình ảnh có hình mờ, bạn có thể tải hình ảnh đó lên Vertex AI Studio bằng thẻ Media.Định cấu hình các tham số tạo hình ảnh, chẳng hạn như số lượng hình ảnh được tạo, tỷ lệ khung hình và hình mờ
Định cấu hình chế độ cài đặt an toàn
Firebase AI Logic không hỗ trợ các tính năng nâng cao sau của các mô hình Imagen not:
Tắt trình viết lại câu lệnh (tham số
enhancePrompt). Điều này có nghĩa là công cụ viết lại câu lệnh dựa trên mô hình ngôn ngữ lớn (LLM) sẽ luôn tự động thêm thông tin chi tiết vào câu lệnh được cung cấp để tạo ra hình ảnh chất lượng cao hơn, phản ánh chính xác hơn câu lệnh được cung cấp.Ghi trực tiếp hình ảnh được tạo vào Google Cloud Storage trong phản hồi của mô hình (tham số
storageUri). Thay vào đó, hình ảnh luôn được trả về dưới dạng byte hình ảnh được mã hoá base64 trong phản hồi.
Nếu bạn muốn tải một hình ảnh được tạo lên Cloud Storage, bạn có thể sử dụng Cloud Storage for Firebase.
Thông số kỹ thuật và giới hạn
| Thuộc tính (cho mỗi yêu cầu) | Giá trị |
|---|---|
| Số mã thông báo đầu vào tối đa | 480 mã thông báo |
| Số hình ảnh đầu ra tối đa | 4 hình ảnh |
| Độ phân giải hình ảnh đầu ra được hỗ trợ (pixel) |
|
Bạn có thể làm gì nữa?
-
- Bắt đầu nghĩ đến việc chuẩn bị cho quá trình sản xuất (xem danh sách kiểm tra cho quá trình sản xuất):
- Thiết lập Firebase App Check càng sớm càng tốt để bảo vệ Gemini API khỏi hành vi lạm dụng của các ứng dụng không được phép.
- Tích hợp Firebase Remote Config để cập nhật các giá trị trong ứng dụng của bạn (chẳng hạn như tên mô hình) mà không cần phát hành phiên bản ứng dụng mới.
Tìm hiểu cách kiểm soát quá trình tạo nội dung
- Tìm hiểu về thiết kế câu lệnh, bao gồm các phương pháp hay nhất, chiến lược và câu lệnh mẫu.
- Định cấu hình các tham số của mô hình Imagen, chẳng hạn như tỷ lệ khung hình, tính năng tạo người và hình mờ.
- Sử dụng chế độ cài đặt an toàn để điều chỉnh khả năng nhận được các phản hồi có thể bị coi là gây hại.
Tìm hiểu thêm về các mô hình được hỗ trợ
Tìm hiểu về các mô hình có sẵn cho nhiều trường hợp sử dụng và hạn mức và giá của các mô hình đó.Gửi ý kiến phản hồi về trải nghiệm của bạn với Firebase AI Logic