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