สร้างรูปภาพโดยใช้ Imagen


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 รูปจากอินพุตที่เป็นข้อความเท่านั้น

ก่อนลองใช้ตัวอย่างนี้ ให้อ่านก่อนเริ่มต้นในส่วนแรกของคู่มือนี้ให้เสร็จสิ้นเพื่อตั้งค่าโปรเจ็กต์และแอป
ในส่วนนั้น คุณจะต้องคลิกปุ่มของ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 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 รูป
ความละเอียดรูปภาพเอาต์พุตที่รองรับ (พิกเซล)
  • 1024x1024 พิกเซล (สัดส่วนภาพ 1:1)
  • 896x1280 (สัดส่วนภาพ 3:4)
  • 1280x896 (สัดส่วนภาพ 4:3)
  • 768x1408 (สัดส่วนภาพ 9:16)
  • 1408x768 (สัดส่วนภาพ 16:9)



คุณทำอะไรได้อีกบ้าง

ดูวิธีควบคุมการสร้างเนื้อหา

ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบที่รองรับ

ดูข้อมูลเกี่ยวกับรูปแบบที่ใช้ได้กับกรณีการใช้งานต่างๆ รวมถึงโควต้าและราคา


แสดงความคิดเห็นเกี่ยวกับประสบการณ์การใช้งาน Firebase AI Logic