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


Vertex AI in Firebase SDK จะช่วยให้คุณเข้าถึงโมเดล Imagen 3 (ผ่าน Imagen API) เพื่อให้คุณสร้างรูปภาพจากพรอมต์ข้อความได้ ความสามารถนี้ช่วยให้คุณทำสิ่งต่างๆ ได้ เช่น

  • สร้างรูปภาพจากพรอมต์ที่เขียนด้วยภาษาที่เป็นธรรมชาติ
  • สร้างรูปภาพในหลากหลายรูปแบบและสไตล์
  • แสดงผลข้อความในรูปภาพ

โปรดทราบว่า Vertex AI in Firebase ยังไม่รองรับฟีเจอร์บางอย่างที่พร้อมใช้งานสำหรับรุ่น Imagen ดูข้อมูลเพิ่มเติมในความสามารถและฟีเจอร์ที่รองรับในหน้านี้

ข้ามไปยังโค้ดสําหรับการป้อนข้อความเท่านั้น

ก่อนเริ่มต้น

หากยังไม่ได้ดำเนินการ ให้ทําตามคู่มือเริ่มต้นใช้งาน ซึ่งอธิบายวิธีตั้งค่าโปรเจ็กต์ Firebase, เชื่อมต่อแอปกับ Firebase, เพิ่ม SDK, เริ่มต้นบริการ Vertex AI และสร้างอินสแตนซ์ ImagenModel

ตรวจสอบว่าคุณใช้ไลบรารี Firebase เวอร์ชันเป็นอย่างน้อย
iOS+: v11.9.0+ | Android: v16.2.0+ (BoM: v33.10.0+) | เว็บ: v11.4.1+ | Flutter: v1.4.0+ (BoM: v3.8.0+)

รุ่นที่รองรับความสามารถนี้

โมเดล Imagen 3 รองรับการสร้างรูปภาพ เราจะรองรับการสร้างรูปภาพตามรุ่น Gemini 2.0 ในเร็วๆ นี้

สร้างรูปภาพจากอินพุตที่เป็นข้อความเท่านั้น

คุณขอให้โมเดล Imagen สร้างรูปภาพได้โดยป้อนพรอมต์เป็นข้อความ คุณสามารถสร้างรูปภาพเดียวหรือรูปภาพหลายรูปก็ได้

สร้างรูปภาพ 1 รูปจากอินพุตที่เป็นข้อความเท่านั้น

โปรดอ่านส่วนก่อนเริ่มต้นของคู่มือนี้ให้เสร็จสิ้นก่อนลองใช้ตัวอย่างนี้

คุณสามารถขอให้โมเดล Imagen สร้างรูปภาพเดียวโดยป้อนพรอมต์เป็นข้อความ

อย่าลืมสร้างอินสแตนซ์ ImagenModel และเรียกใช้ generateImages

Swift

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.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 Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Vertex AI service and create an `ImagenModel` instance
  // Specify an Imagen 3 model that supports your use case
  val imagenModel = Firebase.vertexAI.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 Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().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 { getVertexAI, getImagenModel } from "firebase/vertexai";

// 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 Vertex AI service
const vertexAI = getVertexAI(firebaseApp);

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
  vertexAI,
  {
    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_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model =
    FirebaseVertexAI.instance.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.');
}

ดูวิธีเลือกโมเดลและตำแหน่ง (ไม่บังคับ) ที่เหมาะสมกับกรณีการใช้งานและแอป

สร้างรูปภาพหลายรูปจากอินพุตที่เป็นข้อความเท่านั้น

โปรดอ่านส่วนก่อนเริ่มต้นของคู่มือนี้ให้เสร็จสิ้นก่อนลองใช้ตัวอย่างนี้

โดยค่าเริ่มต้น โมเดล Imagen 3 จะสร้างรูปภาพเพียง 1 รูปต่อคำขอ อย่างไรก็ตาม คุณสามารถขอให้โมเดล Imagen สร้างรูปภาพหลายรูปต่อคำขอได้โดยระบุ ImagenGenerationConfig เมื่อสร้างอินสแตนซ์ ImagenModel

อย่าลืมสร้างอินสแตนซ์ ImagenModel และเรียกใช้ generateImages

Swift

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.imagenModel(
  modelName: "imagen-3.0-generate-002",
  // Configure the model to generate multiple images for each request
  // See: https://firebase.google.com/docs/vertex-ai/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 Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Vertex AI service and create an `ImagenModel` instance
  // Specify an Imagen 3 model that supports your use case
  val imagenModel = Firebase.vertexAI.imagenModel(
      modelName = "imagen-3.0-generate-002",
      // Configure the model to generate multiple images for each request
      // See: https://firebase.google.com/docs/vertex-ai/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/vertex-ai/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
        .setNumberOfImages(4)
        .build();

// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().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 { getVertexAI, getImagenModel } from "firebase/vertexai";

// 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 Vertex AI service
const vertexAI = getVertexAI(firebaseApp);

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
  vertexAI,
  {
    model: "imagen-3.0-generate-002",
    // Configure the model to generate multiple images for each request
    // See: https://firebase.google.com/docs/vertex-ai/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_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model = FirebaseVertexAI.instance.imagenModel(
  model: 'imagen-3.0-generate-002',
  // Configure the model to generate multiple images for each request
  // See: https://firebase.google.com/docs/vertex-ai/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.');
}

ดูวิธีเลือกโมเดลและตำแหน่ง (ไม่บังคับ) ที่เหมาะสมกับกรณีการใช้งานและแอป

ฟีเจอร์และข้อกำหนดที่รองรับ

โมเดล Imagen 3 มีฟีเจอร์มากมายที่เกี่ยวข้องกับการสร้างรูปภาพ ส่วนนี้จะอธิบายสิ่งที่รองรับเมื่อใช้โมเดลกับ Vertex AI in Firebase

ความสามารถและฟีเจอร์ที่รองรับ

Vertex AI in Firebase รองรับฟีเจอร์เหล่านี้ของรุ่น Imagen 3

Vertex AI in Firebaseไม่รองรับฟีเจอร์ขั้นสูงเหล่านี้ของรุ่น Imagen 3

โปรดทราบว่าฟีเจอร์ส่วนใหญ่เหล่านี้กำหนดให้ต้องอยู่ในรายชื่อผู้ใช้ที่ได้รับอนุมัติแม้ว่าจะใช้โมเดล Imagen ฝั่งเซิร์ฟเวอร์ก็ตาม

  • ฟีเจอร์แต่งภาพหรือดัดแปลงรูปภาพ ซึ่งรวมถึงการเพิ่มขนาดรูปภาพ

  • การรวมรูปภาพในคำขอไปยังโมเดล (เช่น สําหรับการเรียนรู้แบบตัวอย่างน้อย)

  • การยืนยันลายน้ำดิจิทัลโดยใช้ SDK
    หากต้องการยืนยันว่ารูปภาพมีลายน้ำ คุณสามารถอัปโหลดรูปภาพนั้นลงใน Vertex AI Studio โดยใช้แท็บสื่อ

  • การสร้าง"รูปภาพแบบสด" จากข้อความ (การสร้าง MP4)

  • การสร้างรูปภาพโดยใช้สไตล์ที่กำหนดไว้ล่วงหน้า

  • การตั้งค่าภาษาของข้อความที่ป้อน

  • การเปิดใช้ includeSafetyAttributes ซึ่งหมายความว่าระบบจะแสดงผล safetyAttributes.categories และ safetyAttributes.scores ไม่ได้

  • การปิดใช้การเพิ่มประสิทธิภาพพรอมต์ (พารามิเตอร์ enhancePrompt) ซึ่งหมายความว่าเครื่องมือการเขียนพรอมต์ใหม่ตาม LLM จะเพิ่มรายละเอียดเพิ่มเติมลงในพรอมต์ที่ระบุโดยอัตโนมัติเสมอเพื่อให้ได้รูปภาพที่มีคุณภาพสูงขึ้นซึ่งสะท้อนถึงพรอมต์ที่ระบุได้ดีขึ้น

  • การเขียนรูปภาพที่สร้างขึ้นลงใน Google Cloud Storage โดยตรงโดยเป็นส่วนหนึ่งของคําตอบจากโมเดล (พารามิเตอร์ storageUri) แต่ระบบจะแสดงผลรูปภาพเป็นไบต์รูปภาพที่เข้ารหัสฐาน 64 ในการตอบกลับเสมอ
    หากต้องการอัปโหลดรูปภาพที่สร้างขึ้นไปยัง Cloud Storage ให้ใช้ Cloud Storage for Firebase

ข้อกำหนดและข้อจำกัด

ขีดจํากัด (ต่อคําขอ) Imagen 3 Imagen 3 Fast
จำนวนโทเค็นอินพุตสูงสุด โทเค็น 480 รายการ โทเค็น 480 รายการ
จํานวนรูปภาพเอาต์พุตสูงสุด รูปภาพ 4 รูป รูปภาพ 4 รูป
ความละเอียดรูปภาพเอาต์พุตที่รองรับ (พิกเซล)
  • 1024x1024 พิกเซล (สัดส่วนภาพ 1:1)
  • 896x1280 (สัดส่วนภาพ 3:4)
  • 1280x896 (สัดส่วนภาพ 4:3)
  • 768x1408 (สัดส่วนภาพ 9:16)
  • 1408x768 (สัดส่วนภาพ 16:9)
  • 1024x1024 พิกเซล (สัดส่วนภาพ 1:1)
  • 896x1280 (สัดส่วนภาพ 3:4)
  • 1280x896 (สัดส่วนภาพ 4:3)
  • 768x1408 (สัดส่วนภาพ 9:16)
  • 1408x768 (สัดส่วนภาพ 16:9)



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

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

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

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


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