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