SDK Firebase AI Logic cấp cho bạn quyền truy cập vào các mô hình Imagen 3 (thông qua Imagen API) để bạn có thể tạo hình ảnh từ câu lệnh văn bản. Với khả 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à phong cách
- Kết xuất văn bản trong hình ảnh
Xin lưu ý rằng Firebase AI Logic chưa hỗ trợ tất cả tính năng có sẵn cho các mẫu Imagen. Tìm hiểu thêm trong phần Các tính năng và chức năng được hỗ trợ ở phần sau của trang này.
Chuyển đến mã cho phương thức nhập chỉ có văn bản
Trước khi bắt đầu
Nhấp vào nhà cung cấp Gemini API để xem nội dung và mã dành riêng cho nhà cung cấp trên trang này. |
Nếu bạn chưa hoàn tất, hãy hoàn thành 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
Mô hình Imagen 3 hỗ trợ tính năng tạo hình ảnh.
Xin lưu ý rằng Firebase AI Logic cũng hỗ trợ tạo hình ảnh bằng các mô hình Gemini. Tài liệu sẽ sớm ra mắt!
Tạo hình ảnh từ dữ liệu đầu vào chỉ có văn bản
Bạn có thể yêu cầu mô hình Imagen tạo hình ảnh bằng cá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ỉ có 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 nút của 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ô hình Imagen tạo một hình ảnh bằng cá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 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
Việc sử dụng Imagen hiện chưa được hỗ trợ cho Unity, nhưng hãy sớm kiểm tra lại!
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ỉ có 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 nút của 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 3 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ô 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 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
Việc sử dụng Imagen hiện chưa được hỗ trợ cho Unity, nhưng hãy sớm kiểm tra lại!
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 3 cung cấp nhiều tính năng liên quan đến việc 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 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 này của mô hình Imagen 3.
Tạo người và khuôn mặt (miễn là dự án Firebase của bạn đã được Google Cloud phê duyệt)
Tạo văn bản trong hình ảnh được tạo
Thêm hình mờ vào hình ảnh được tạo
Đị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à tạo 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 này của các mẫu Imagen 3.
Xin lưu ý rằng hầu hết các tính năng này đều yêu cầu bạn phải có tên trong danh sách người dùng được phê duyệt ngay cả khi sử dụng các mô hình Imagen phía máy chủ.
Các tính năng chỉnh sửa hoặc thao tác với hình ảnh, bao gồm cả tính năng nâng cấp hình ảnh
Đưa hình ảnh vào yêu cầu gửi đến mô hình (chẳng hạn như để học từ một vài dữ liệu)
Xác minh hình mờ kỹ thuật số bằng SDK
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 (Nội dung nghe nhìn).Tạo "hình ảnh động" từ văn bản (tạo tệp MP4)
Tạo hình ảnh bằng kiểu được xác định trước
Bật
includeSafetyAttributes
, nghĩa là không thể trả vềsafetyAttributes.categories
vàsafetyAttributes.scores
Tắt tính năng cải thiện 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 LLM sẽ luôn tự động thêm thông tin chi tiết vào câu lệnh được cung cấp để phân phối hình ảnh chất lượng cao hơn, phản ánh tốt hơn câu lệnh được cung cấpGhi trực tiếp hình ảnh được tạo vào Google Cloud Storage như một phần của phản hồi từ 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 muốn tải 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
Giới hạn (mỗi yêu cầu) | Imagen 3 | Imagen 3 Fast |
---|---|---|
Số mã thông báo đầu vào tối đa | 480 mã thông báo | 480 mã thông báo |
Số lượng hình ảnh đầu ra tối đa | 4 hình ảnh | 4 hình ảnh |
Độ phân giải hình ảnh đầu ra được hỗ trợ (pixel) |
|
|
Bạn có thể làm gì khác?
-
Hãy bắt đầu suy nghĩ về việc chuẩn bị cho bản phát hành chính thức (xem danh sách kiểm tra cho bản phát hành chính thức), bao gồm:
- Thiết lập Firebase App Check để bảo vệ Gemini API khỏi hành vi lạm dụng của các ứng dụng không được uỷ quyền.
- Tích hợp Firebase Remote Config để cập nhật các giá trị trong ứng dụng (chẳng hạn như tên mẫu) 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 việc tạo nội dung
- Tìm hiểu về thiết kế câu lệnh, bao gồm cả 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ố mô hình Imagen như tỷ lệ khung hình, tạo người và tạo hình mờ.
- Sử dụng chế độ cài đặt an toàn để điều chỉnh khả năng nhận được những câu trả lời có thể bị coi là có hại.
Tìm hiểu thêm về các mẫu đượ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, cũng như 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