Firebase AI Logic SDK ช่วยให้คุณเข้าถึง Imagen โมเดล (ผ่าน Imagen API) เพื่อให้คุณสร้างรูปภาพจากพรอมต์ข้อความได้ ความสามารถนี้ช่วยให้คุณทำสิ่งต่างๆ ได้ เช่น
- สร้างรูปภาพจากพรอมต์ที่เขียนด้วยภาษามนุษย์
- สร้างรูปภาพในรูปแบบและสไตล์ที่หลากหลาย
- แสดงข้อความในรูปภาพ
โปรดทราบว่า Firebase AI Logic ยังไม่รองรับฟีเจอร์ทั้งหมด ที่มีในรุ่น Imagen ดูข้อมูลเพิ่มเติมได้ในความสามารถและฟีเจอร์ที่รองรับในส่วนท้ายของหน้านี้
ไปที่โค้ดสำหรับการป้อนข้อความเท่านั้น
การเลือกระหว่างรุ่น Gemini กับ Imagen
SDK Firebase AI Logic รองรับการสร้างรูปภาพโดยใช้โมเดล Gemini หรือโมเดล Imagen สำหรับกรณีการใช้งานส่วนใหญ่ ให้เริ่มด้วย Gemini แล้วเลือก Imagen สำหรับงานเฉพาะทาง ที่คุณภาพของรูปภาพมีความสำคัญ
โปรดทราบว่า Firebase AI Logic SDK ยังไม่รองรับอินพุตรูปภาพ (เช่น สำหรับการแก้ไข) ด้วยโมเดล Imagen ดังนั้น หากต้องการทำงานกับรูปภาพอินพุต คุณสามารถใช้Geminiแทนได้
เลือก Gemini เมื่อต้องการทำสิ่งต่อไปนี้
- เพื่อใช้ความรู้และเหตุผลเกี่ยวกับโลกในการสร้างรูปภาพที่เกี่ยวข้องตามบริบท
- เพื่อผสานข้อความและรูปภาพอย่างแนบเนียน
- เพื่อฝังภาพที่ถูกต้องภายในลำดับข้อความยาว
- เพื่อแก้ไขรูปภาพแบบสนทนาในขณะที่ยังคงบริบทไว้
เลือก Imagen เมื่อต้องการทำสิ่งต่อไปนี้
- เพื่อจัดลำดับความสำคัญของคุณภาพของรูปภาพ ความสมจริงเหมือนภาพถ่าย รายละเอียดทางศิลปะ หรือสไตล์ที่เฉพาะเจาะจง (เช่น อิมเพรสชันนิสม์หรืออนิเมะ)
- หากต้องการระบุสัดส่วนภาพหรือรูปแบบของรูปภาพที่สร้างขึ้นอย่างชัดเจน
ก่อนเริ่มต้น
คลิกผู้ให้บริการ Gemini API เพื่อดูเนื้อหาและโค้ดของผู้ให้บริการนั้นๆ ในหน้านี้ |
หากยังไม่ได้ดำเนินการ ให้ทำตามคู่มือเริ่มต้นใช้งาน ซึ่งอธิบายวิธี
ตั้งค่าโปรเจ็กต์ Firebase, เชื่อมต่อแอปกับ Firebase, เพิ่ม SDK,
เริ่มต้นบริการแบ็กเอนด์สำหรับผู้ให้บริการ API ที่เลือก และ
สร้างอินสแตนซ์ ImagenModel
รุ่นที่รองรับความสามารถนี้
Gemini Developer API รองรับเฉพาะการสร้างรูปภาพโดยโมเดล Imagen 3 ที่เสถียรล่าสุด แต่ไม่รองรับโมเดล Imagen อื่นๆ ข้อจำกัดของโมเดลImagenเหล่านี้มีผลไม่ว่าคุณจะเข้าถึงGemini Developer APIด้วยวิธีใดก็ตาม
imagen-3.0-generate-002
สร้างรูปภาพจากอินพุตที่เป็นข้อความเท่านั้น
คุณขอให้Imagenโมเดลสร้างรูปภาพได้โดยป้อนพรอมต์ด้วยข้อความ คุณสร้างรูปภาพ 1 รูปหรือหลายรูปได้
สร้างรูปภาพ 1 รูปจากอินพุตที่เป็นข้อความเท่านั้น
ก่อนที่จะลองใช้ตัวอย่างนี้ ให้ทำตามส่วน
ก่อนที่จะเริ่มของคู่มือนี้
เพื่อตั้งค่าโปรเจ็กต์และแอป ในส่วนนั้น คุณจะคลิกปุ่มสำหรับ ผู้ให้บริการ Gemini API ที่เลือกเพื่อให้เห็นเนื้อหาเฉพาะของผู้ให้บริการ ในหน้านี้ด้วย |
คุณขอให้โมเดล Imagen สร้างรูปภาพเดียวได้โดยการป้อนพรอมต์ ด้วยข้อความ
อย่าลืมสร้างอินสแตนซ์ ImagenModel
และเรียกใช้ 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
Imagen ยังไม่รองรับ Unity แต่โปรดกลับมาตรวจสอบอีกครั้งในเร็วๆ นี้
ดูวิธีเลือกโมเดล ที่เหมาะสมกับกรณีการใช้งานและแอปของคุณ
สร้างรูปภาพหลายรูปจากอินพุตที่เป็นข้อความเท่านั้น
ก่อนที่จะลองใช้ตัวอย่างนี้ ให้ทำตามส่วน
ก่อนที่จะเริ่มของคู่มือนี้
เพื่อตั้งค่าโปรเจ็กต์และแอป ในส่วนนั้น คุณจะคลิกปุ่มสำหรับ ผู้ให้บริการ Gemini API ที่เลือกเพื่อให้เห็นเนื้อหาเฉพาะของผู้ให้บริการ ในหน้านี้ด้วย |
โดยค่าเริ่มต้น Imagen จะสร้างรูปภาพเพียง 1 รูปต่อคำขอ
อย่างไรก็ตาม คุณสามารถขอให้Imagenโมเดลสร้างรูปภาพหลายรูป
ต่อคำขอได้โดยระบุImagenGenerationConfig
เมื่อสร้างอินสแตนซ์ ImagenModel
อย่าลืมสร้างอินสแตนซ์ ImagenModel
และเรียกใช้ 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
Imagen ยังไม่รองรับ Unity แต่โปรดกลับมาตรวจสอบอีกครั้งในเร็วๆ นี้
ดูวิธีเลือกโมเดล ที่เหมาะสมกับกรณีการใช้งานและแอปของคุณ
ฟีเจอร์และข้อกำหนดที่รองรับ
Imagen โมเดลมีฟีเจอร์มากมายที่เกี่ยวข้องกับการสร้างรูปภาพ ส่วนนี้จะอธิบายสิ่งที่ระบบรองรับ เมื่อใช้โมเดลกับ Firebase AI Logic
ความสามารถและฟีเจอร์ที่รองรับ
Firebase AI Logic รองรับ ฟีเจอร์เหล่านี้ของโมเดล Imagen
การสร้างบุคคลและใบหน้า (หากโปรเจ็กต์ Firebase ได้รับการอนุมัติจาก Google Cloud)
การสร้างข้อความภายในรูปภาพที่สร้างขึ้น
การเพิ่มลายน้ำลงในรูปภาพที่สร้างขึ้น
การกำหนดค่าพารามิเตอร์การสร้างรูปภาพ เช่น จำนวนรูปภาพที่สร้างขึ้น สัดส่วนภาพ และลายน้ำ
การกำหนดค่าการตั้งค่าความปลอดภัย
Firebase AI Logic ไม่รองรับ ฟีเจอร์ขั้นสูงเหล่านี้ของโมเดล Imagen
โปรดทราบว่าฟีเจอร์ส่วนใหญ่เหล่านี้ต้องอยู่ในรายชื่อผู้ใช้ที่ได้รับอนุมัติ แม้จะใช้โมเดล Imagen ฝั่งเซิร์ฟเวอร์ก็ตาม
ฟีเจอร์การแก้ไขหรือดัดแปลงรูปภาพ ซึ่งรวมถึงการเพิ่มขนาดรูปภาพ
การรวมรูปภาพไว้ในคำขอไปยังโมเดล (เช่น สำหรับการเรียนรู้แบบไม่กี่ช็อต)
การยืนยันลายน้ำดิจิทัลโดยใช้ SDK
หากต้องการยืนยันว่ารูปภาพมีลายน้ำ คุณสามารถอัปโหลดรูปภาพ ไปยัง Vertex AI Studio โดยใช้แท็บสื่อการสร้าง"รูปภาพสด" จากข้อความ (การสร้าง MP4)
การสร้างรูปภาพโดยใช้สไตล์ที่กำหนดไว้ล่วงหน้า
การเปิดใช้
includeSafetyAttributes
ซึ่งหมายความว่าsafetyAttributes.categories
และsafetyAttributes.scores
จะคืนไม่ได้การปิดใช้การปรับปรุงพรอมต์ (พารามิเตอร์
enhancePrompt
) ซึ่งหมายความว่าเครื่องมือเขียนพรอมต์ใหม่ที่อิงตาม LLM จะเพิ่มรายละเอียดลงในพรอมต์ที่ระบุโดยอัตโนมัติเสมอ เพื่อให้ได้รูปภาพคุณภาพสูงขึ้นซึ่งสะท้อนถึงพรอมต์ที่ระบุได้ดียิ่งขึ้นเขียนรูปภาพที่สร้างขึ้นลงใน Google Cloud Storage โดยตรงเป็นส่วนหนึ่งของ คำตอบจากโมเดล (พารามิเตอร์
storageUri
) แต่ระบบจะแสดงรูปภาพเป็นไบต์รูปภาพที่เข้ารหัสฐาน 64 ในการตอบกลับเสมอ
หากต้องการอัปโหลดรูปภาพที่สร้างขึ้นไปยัง Cloud Storage คุณสามารถใช้ Cloud Storage for Firebase
ข้อกำหนดและข้อจำกัด
พร็อพเพอร์ตี้ (ต่อคำขอ) | ค่า |
---|---|
จำนวนโทเค็นอินพุตสูงสุด | 480 โทเค็น |
จำนวนรูปภาพเอาต์พุตสูงสุด | รูปภาพ 4 รูป |
ความละเอียดของรูปภาพเอาต์พุตที่รองรับ (พิกเซล) |
|
คุณทำอะไรได้อีกบ้าง
-
เริ่มคิดถึงการเตรียมพร้อมสำหรับเวอร์ชันที่ใช้งานจริง (ดูรายการตรวจสอบการผลิต)
ซึ่งรวมถึง
- ตั้งค่า Firebase App Check เพื่อปกป้อง Gemini API จากการละเมิดโดยไคลเอ็นต์ที่ไม่ได้รับอนุญาต
- การผสานรวม Firebase Remote Config เพื่ออัปเดตค่าในแอป (เช่น ชื่อโมเดล) โดยไม่ต้องเผยแพร่แอปเวอร์ชันใหม่
ดูวิธีควบคุมการสร้างเนื้อหา
- ทำความเข้าใจการออกแบบพรอมต์ รวมถึง แนวทางปฏิบัติแนะนำ กลยุทธ์ และพรอมต์ตัวอย่าง
- กำหนดค่าImagenพารามิเตอร์โมเดล เช่น สัดส่วนภาพ การสร้างบุคคล และลายน้ำ
- ใช้การตั้งค่าความปลอดภัยเพื่อปรับ ความเป็นไปได้ที่จะได้รับคำตอบที่อาจถือว่าไม่เหมาะสม
ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่รองรับ
ดูข้อมูลเกี่ยวกับ โมเดลที่พร้อมใช้งานสำหรับกรณีการใช้งานต่างๆ รวมถึง โควต้าและ ราคาแสดงความคิดเห็น เกี่ยวกับประสบการณ์การใช้งาน Firebase AI Logic