Firebase AI Logic SDK จะช่วยให้คุณเข้าถึงโมเดล Imagen (ผ่าน Imagen API) เพื่อให้คุณสร้างรูปภาพจากพรอมต์ข้อความได้ ความสามารถนี้ช่วยให้คุณทำสิ่งต่างๆ ได้ เช่น
- สร้างรูปภาพจากพรอมต์ที่เขียนด้วยภาษาที่เป็นธรรมชาติ
- สร้างรูปภาพในหลากหลายรูปแบบและสไตล์
- แสดงผลข้อความในรูปภาพ
โปรดทราบว่า Firebase AI Logic ยังไม่รองรับฟีเจอร์บางอย่างที่มีให้สำหรับรุ่น Imagen ดูข้อมูลเพิ่มเติมในความสามารถและฟีเจอร์ที่รองรับในหน้านี้
ข้ามไปยังโค้ดสําหรับการป้อนข้อความเท่านั้น
ก่อนเริ่มต้น
คลิกผู้ให้บริการ Gemini API เพื่อดูเนื้อหาและโค้ดเฉพาะผู้ให้บริการในหน้านี้ |
หากยังไม่ได้ดำเนินการ ให้ทำตามคู่มือเริ่มต้นใช้งาน ซึ่งอธิบายวิธีตั้งค่าโปรเจ็กต์ Firebase, เชื่อมต่อแอปกับ Firebase, เพิ่ม SDK, เริ่มต้นบริการแบ็กเอนด์สําหรับผู้ให้บริการ API ที่เลือก และสร้างอินสแตนซ์ ImagenModel
รุ่นที่รองรับความสามารถนี้
Gemini Developer API รองรับเฉพาะการสร้างรูปภาพด้วยโมเดล Imagen 3 เวอร์ชันล่าสุดที่เสถียรเท่านั้น แต่ไม่รองรับโมเดล Imagen อื่นๆ ข้อจำกัดเหล่านี้ของImagenโมเดลจะมีผลไม่ว่าคุณจะเข้าถึงGemini Developer APIด้วยวิธีใดก็ตาม
imagen-3.0-generate-002
โปรดทราบว่า Firebase AI Logic ยังรองรับการสร้างรูปภาพด้วยโมเดล Gemini ด้วย เอกสารประกอบจะพร้อมให้ใช้งานในเร็วๆ นี้
สร้างรูปภาพจากอินพุตที่เป็นข้อความเท่านั้น
คุณขอให้โมเดล Imagen สร้างรูปภาพได้โดยป้อนพรอมต์เป็นข้อความ คุณสามารถสร้างรูปภาพเดียวหรือรูปภาพหลายรูปก็ได้
สร้างรูปภาพ 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
Unity ยังไม่รองรับการใช้ Imagen แต่โปรดกลับมาตรวจสอบอีกครั้งในเร็วๆ นี้
ดูวิธีเลือกรูปแบบที่เหมาะกับกรณีการใช้งานและแอปของคุณ
สร้างรูปภาพหลายรูปจากอินพุตที่เป็นข้อความเท่านั้น
ก่อนลองใช้ตัวอย่างนี้ ให้อ่านก่อนเริ่มต้นในส่วนแรกของคู่มือนี้ให้เสร็จสิ้นเพื่อตั้งค่าโปรเจ็กต์และแอป ในส่วนนั้น คุณจะต้องคลิกปุ่มของ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
Unity ยังไม่รองรับการใช้ Imagen แต่โปรดกลับมาตรวจสอบอีกครั้งในเร็วๆ นี้
ดูวิธีเลือกรูปแบบที่เหมาะกับกรณีการใช้งานและแอปของคุณ
ฟีเจอร์และข้อกำหนดที่รองรับ
โมเดล 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