ปรับแต่งรูปภาพตามเรื่องที่ระบุโดยใช้ Imagen


หน้านี้อธิบายวิธีใช้ความสามารถในการปรับแต่งจาก Imagen เพื่อแก้ไขหรือสร้างรูปภาพตามวัตถุที่ระบุ โดยใช้ SDK ของ Firebase AI Logic

วิธีการทำงาน: คุณระบุพรอมต์ข้อความและรูปภาพอ้างอิงอย่างน้อย 1 รูปที่แสดงวัตถุที่เฉพาะเจาะจง (เช่น ผลิตภัณฑ์ บุคคล หรือสัตว์เลี้ยง) โมเดลจะใช้ข้อมูลเหล่านี้เพื่อสร้างรูปภาพใหม่ตามวัตถุที่ระบุในรูปภาพอ้างอิง

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

ข้ามไปยังโค้ด



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

ใช้ได้เมื่อใช้ Vertex AI Gemini API เป็นผู้ให้บริการ API เท่านั้น

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

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

Imagen มีบริการแก้ไขรูปภาพผ่านโมเดล capability ดังนี้

  • imagen-3.0-capability-001

โปรดทราบว่าสำหรับโมเดล Imagen ระบบไม่รองรับตำแหน่ง global

ส่งคำขอปรับแต่งเรื่อง

ตัวอย่างต่อไปนี้แสดงคำขอปรับแต่งเรื่องราวที่ขอให้โมเดล สร้างรูปภาพใหม่โดยอิงตามรูปภาพอ้างอิงที่ระบุ (ในตัวอย่างนี้คือ แมว) เนื่องจากแมวเป็นสัตว์ จึงใช้ประเภทออบเจ็กต์ ImagenSubjectReferenceType.ANIMAL

หากเรื่องที่คุณต้องการพูดถึงคือบุคคลหรือผลิตภัณฑ์ คุณก็ใช้ตัวอย่างนี้ได้เช่นกัน แต่ต้อง มีการเปลี่ยนแปลงดังนี้

  • หากเรื่องที่รายงานเป็นบุคคล ให้ใช้ประเภทเรื่อง ImagenSubjectReferenceType.PERSON คุณส่งคำขอประเภทนี้ได้โดยมีหรือไม่มีรูปภาพควบคุมการเชื่อมโยงใบหน้า เพื่อเป็นแนวทางเพิ่มเติมในการสร้างรูปภาพ

  • หากเรื่องคือผลิตภัณฑ์ ให้ใช้ประเภทเรื่อง ImagenSubjectReferenceType.PRODUCT

ดูเทมเพลตพรอมต์ในส่วนท้ายของหน้านี้เพื่อดูข้อมูลเกี่ยวกับการเขียนพรอมต์และวิธีใช้รูปภาพอ้างอิงภายในพรอมต์

Swift

Swift ไม่รองรับการแก้ไขรูปภาพด้วยโมเดล Imagen โปรดกลับมาดูอีกครั้งในปลายปีนี้

Kotlin

// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun customizeImage() {
    // Initialize the Vertex AI Gemini API backend service
    // Optionally specify the location to access the model (for example, `us-central1`)
    val ai = Firebase.ai(backend = GenerativeBackend.vertexAI(location = "us-central1"))

    // Create an `ImagenModel` instance with an Imagen "capability" model
    val model = ai.imagenModel("imagen-3.0-capability-001")

    // This example assumes 'referenceImage' is a pre-loaded Bitmap.
    // In a real app, this might come from the user's device or a URL.
    val referenceImage: Bitmap = TODO("Load your reference image Bitmap here")

    // Define the subject reference using the reference image.
    val subjectReference = ImagenSubjectReference(
        image = referenceImage,
        referenceID = 1,
        description = "cat",
        subjectType = ImagenSubjectReferenceType.ANIMAL
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the subject reference with ID 1.
    val prompt = "A cat[1] flying through outer space"

    // Use the editImage API to perform the subject customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(subjectReference),
        prompt = prompt,
        config = ImagenEditingConfig(
            editSteps = 50 // Number of editing steps, a higher value can improve quality
        )
    )

    // Process the result
}

Java

// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
// Create an `ImagenModel` instance with an Imagen "capability" model
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.vertexAI("us-central1"))
        .imagenModel(
                /* modelName */ "imagen-3.0-capability-001");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap referenceImage = null; // TODO("Load your image Bitmap here");

// Define the subject reference using the reference image.
ImagenSubjectReference subjectReference = new ImagenSubjectReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("cat")
        .setSubjectType(ImagenSubjectReferenceType.ANIMAL)
        .build();

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
String prompt = "A cat[1] flying through outer space";

// Define the editing configuration.
ImagenEditingConfig imagenEditingConfig = new ImagenEditingConfig.Builder()
        .setEditSteps(50) // Number of editing steps, a higher value can improve quality
        .build();

// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(subjectReference), prompt, imagenEditingConfig), new FutureCallback<ImagenGenerationResponse>() {
    @Override
    public void onSuccess(ImagenGenerationResponse 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

แอปบนเว็บไม่รองรับการแก้ไขรูปภาพด้วยโมเดล Imagen โปรดกลับมาดูอีกครั้งในปลายปีนี้

Dart

import 'dart:typed_data';
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 Vertex AI Gemini API backend service
// Optionally specify a location to access the model (for example, `us-central1`)
final ai = FirebaseAI.vertexAI(location: 'us-central1');

// Create an `ImagenModel` instance with an Imagen "capability" model
final model = ai.imagenModel(model: 'imagen-3.0-capability-001');

// This example assumes 'referenceImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List referenceImage = Uint8List(0); // TODO: Load your reference image data here

// Define the subject reference using the reference image.
final subjectReference = ImagenSubjectReference(
  image: referenceImage,
  referenceId: 1,
  description: 'cat',
  subjectType: ImagenSubjectReferenceType.animal,
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat[1] flying through outer space.";

try {
  // Use the editImage API to perform the subject customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [subjectReference],
    prompt,
    config: ImagenEditingConfig(
      editSteps: 50, // Number of editing steps, a higher value can improve quality
    ),
  );

  // Process the result.
  if (response.images.isNotEmpty) {
    final editedImage = response.images.first.bytes;
    // Use the editedImage (a Uint8List) to display the image, save it, etc.
    print('Image successfully generated!');
  } else {
    // Handle the case where no images were generated.
    print('Error: No images were generated.');
  }
} catch (e) {
  // Handle any potential errors during the API call.
  print('An error occurred: $e');
}

Unity

Unity ไม่รองรับการแก้ไขรูปภาพด้วยโมเดล Imagen โปรดกลับมาดูอีกครั้งในปลายปีนี้

เทมเพลตพรอมต์

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

จากนั้นเมื่อเขียนพรอมต์ ให้อ้างอิงถึงรหัสเหล่านี้ เช่น คุณใช้ [1] ในพรอมต์เพื่ออ้างอิงถึงรูปภาพที่มีรหัสอ้างอิง 1 หากคุณระบุ คำอธิบายเรื่อง คุณก็ใส่คำอธิบายนั้นในพรอมต์ได้ด้วยเพื่อให้มนุษย์อ่านพรอมต์ได้ง่ายขึ้น

ตารางต่อไปนี้อธิบายเทมเพลตพรอมต์ที่สามารถใช้เป็นจุดเริ่มต้นในการ เขียนพรอมต์เพื่อการปรับแต่งตามหัวเรื่อง (เช่น ผลิตภัณฑ์ บุคคล หรือสัตว์เลี้ยง)

กรณีการใช้งาน รูปภาพอ้างอิง เทมเพลตพรอมต์ ตัวอย่าง
การจัดรูปแบบรูปภาพผลิตภัณฑ์ - โฆษณา รูปภาพตัวแบบ (สูงสุด 4 ภาพ) สร้างรูปภาพเกี่ยวกับ SUBJECT_DESCRIPTION [1] ให้ตรงกับ คำอธิบาย: ${PROMPT}

สร้างภาพเกี่ยวกับ Luxe Elixir hair oil, golden liquid in glass bottle [1] ให้ตรงกับคำอธิบายต่อไปนี้ ภาพระยะใกล้ ที่มีแสงสว่างสูงของมือผู้หญิงที่ถือ Luxe Elixir hair oil, golden liquid in glass bottle [1] บนพื้นหลังสีขาว บริสุทธิ์ มือของผู้หญิงมีแสงสว่างเพียงพอและโฟกัสคมชัดที่ขวด โดยมีความชัดตื้นที่เบลอพื้นหลังและเน้นผลิตภัณฑ์ แสงไฟนุ่มนวลและกระจายตัว ทำให้เกิด แสงเรืองเล็กๆ รอบขวดและมือ องค์ประกอบโดยรวมมีความเรียบง่ายและสง่างาม ซึ่งเน้นย้ำถึงความหรูหราของผลิตภัณฑ์

การปรับแต่งรูปภาพผลิตภัณฑ์ - การเปลี่ยนแปลงแอตทริบิวต์ รูปภาพตัวแบบ (สูงสุด 4 ภาพ) สร้างรูปภาพของ SUBJECT_DESCRIPTION แต่ ${PROMPT}

สร้างรูปภาพของSeiko watch [1]เป็นสีน้ำเงิน

การปรับแต่งรูปภาพบุคคลโดยไม่ต้องป้อนข้อมูล Face Mesh รูปภาพตัวแบบ (สูงสุด 4 ภาพ) สร้างรูปภาพเกี่ยวกับ SUBJECT_DESCRIPTION [1] ให้ตรงกับ คำอธิบาย: ภาพบุคคลของ SUBJECT_DESCRIPTION [1] ${PROMPT} สร้างรูปภาพเกี่ยวกับa woman with short hair[1]ให้ตรงกับ คำอธิบาย: ภาพบุคคลของa woman with short hair[1] ใน สไตล์การ์ตูน 3 มิติที่มีพื้นหลังเบลอ ตัวละครน่ารัก มีใบหน้ายิ้มแย้ม มองกล้อง โทนสีพาสเทล ...
การปรับแต่งรูปภาพบุคคลโดยไม่ต้องป้อนข้อมูล Face Mesh รูปภาพตัวแบบ (สูงสุด 4 ภาพ) สร้างSTYLE_DESCRIPTION [2]รูปภาพเกี่ยวกับ SUBJECT_DESCRIPTION [1] ให้ตรงกับคำอธิบาย: ภาพบุคคล ของ SUBJECT_DESCRIPTION [1] STYLE_PROMPT สร้างรูปภาพ3d-cartoon style [2]เกี่ยวกับa woman with short hair [1]ให้ตรงกับคำอธิบาย: ภาพบุคคลของa woman with short hair [1] ในสไตล์การ์ตูน 3 มิติที่มีพื้นหลัง เบลอ ตัวละครน่ารักที่มีใบหน้ายิ้มแย้มมองกล้อง โทนสีพาสเทล ...
การปรับแต่งรูปภาพบุคคลด้วยอินพุต Face Mesh รูปภาพตัวแบบ (สูงสุด 3 รูป)

รูปภาพควบคุมตาข่ายใบหน้า (1 รูป)
สร้างรูปภาพของ SUBJECT_DESCRIPTION [1] ที่มี Face mesh from the control image [2] ${PROMPT} สร้างรูปภาพของ the person [1] ด้วย face mesh from the control image [2] บุคคลควรมีสีหน้าปกติและมองตรงไปข้างหน้า พื้นหลังควรเป็น ...
การปรับแต่งรูปภาพบุคคลด้วยอินพุต Face Mesh รูปภาพตัวแบบ (สูงสุด 3 รูป)

รูปภาพควบคุมตาข่ายใบหน้า (1 รูป)
สร้างรูปภาพเกี่ยวกับ SUBJECT_DESCRIPTION [1] ในท่าทางของ CONTROL_IMAGE [2] ให้ตรงกับคำอธิบาย: ภาพบุคคลของ SUBJECT_DESCRIPTION [1] ${PROMPT} สร้างรูปภาพเกี่ยวกับa woman with short hair [1]ในท่าทาง ของcontrol image [2]ให้ตรงกับคำอธิบาย: ภาพบุคคล ของa woman with short hair [1] ในสไตล์การ์ตูน 3 มิติที่มี พื้นหลังเบลอ ตัวละครน่ารักน่าเอ็นดูที่มีใบหน้ายิ้มแย้ม มองกล้อง โทนสีพาสเทล ...
การปรับแต่งรูปภาพบุคคลด้วยอินพุต Face Mesh รูปภาพตัวแบบ (สูงสุด 3 รูป)

รูปภาพควบคุมตาข่ายใบหน้า (1 รูป)
สร้างSTYLE_DESCRIPTION [3]รูปภาพเกี่ยวกับ SUBJECT_DESCRIPTION [1] ในท่าทางของCONTROL_IMAGE [2] ให้ตรงกับคำอธิบาย: ภาพบุคคลของ SUBJECT_DESCRIPTION [1] ${PROMPT} สร้างรูปภาพ3d-cartoon style [3]เกี่ยวกับa woman with short hair [1]ในท่าทางของcontrol image [2] เพื่อให้ตรงกับคำอธิบาย: ภาพบุคคลของa woman with short hair [1] ในสไตล์การ์ตูน 3 มิติที่มีพื้นหลังเบลอ ตัวละครน่ารัก ที่มีใบหน้ายิ้มแย้ม มองกล้อง โทนสีพาสเทล ...



แนวทางปฏิบัติแนะนำและข้อจำกัด

หากคุณใช้บุคคลเป็นวัตถุ เราขอแนะนำให้ใบหน้าในรูปภาพอ้างอิงมีคุณสมบัติดังนี้

  • อยู่ตรงกลางและกินพื้นที่อย่างน้อยครึ่งหนึ่งของรูปภาพทั้งหมด
  • หมุนในมุมมองด้านหน้าในทุกทิศทาง (การหมุน การก้มเงย และการหัน)
  • ไม่มีวัตถุบดบัง เช่น แว่นกันแดดหรือหน้ากาก

Use Case

ความสามารถในการปรับแต่งช่วยให้คุณป้อนพรอมต์ได้อย่างอิสระ ซึ่งอาจทำให้เกิดความเข้าใจว่าโมเดลทำได้มากกว่าที่ได้รับการฝึกมา ส่วนต่อไปนี้จะอธิบายUse Case ที่ตั้งใจสำหรับการปรับแต่ง และตัวอย่างUse Case ที่ไม่ได้ตั้งใจ

เราขอแนะนำให้ใช้ความสามารถนี้สำหรับกรณีการใช้งานที่ต้องการ เนื่องจากเราได้ ฝึกโมเดลในกรณีการใช้งานเหล่านั้นและคาดว่าจะได้ผลลัพธ์ที่ดี ในทางกลับกัน หากคุณพยายามให้โมเดลทําสิ่งต่างๆ นอกเหนือจากกรณีการใช้งานที่ตั้งใจไว้ คุณก็ควรคาดหวังผลลัพธ์ที่ไม่ดี

กรณีการใช้งานที่ตั้งใจไว้

กรณีการใช้งานที่ตั้งใจไว้สำหรับการปรับแต่งตามเรื่องมีดังนี้

  • ปรับแต่งสไตล์รูปภาพบุคคล

  • ปรับแต่งสไตล์รูปภาพบุคคลและคงการแสดงออกทางสีหน้าของบุคคลนั้นไว้

  • (สำเร็จต่ำ) วางผลิตภัณฑ์ เช่น โซฟาหรือคุกกี้ ในฉากต่างๆ โดยมีมุมผลิตภัณฑ์ที่แตกต่างกัน

  • สร้างรูปแบบต่างๆ ของผลิตภัณฑ์ที่ไม่เก็บรายละเอียดที่แน่นอน

  • ปรับแต่งสไตล์รูปภาพบุคคลโดยคงสีหน้าไว้

ตัวอย่างกรณีการใช้งานที่ไม่พึงประสงค์

ต่อไปนี้เป็นรายการ Use Case โดยสังเขปที่ไม่พึงประสงค์สำหรับการ ปรับแต่งตามเรื่อง โมเดลไม่ได้ผ่านการฝึกสำหรับกรณีการใช้งานเหล่านี้ และมีแนวโน้มที่จะให้ผลลัพธ์ที่ไม่ดี

  • วางบุคคล 2 คนขึ้นไปในฉากต่างๆ ขณะที่ยังคงเอกลักษณ์ของบุคคลเหล่านั้นไว้

  • วางบุคคลตั้งแต่ 2 คนขึ้นไปในฉากต่างๆ พร้อมทั้งรักษาลักษณะเฉพาะตัวของบุคคลเหล่านั้น และระบุสไตล์ของรูปภาพเอาต์พุตโดยใช้รูปภาพตัวอย่างเป็นอินพุต สำหรับสไตล์

  • ปรับแต่งสไตล์รูปภาพที่มีคนตั้งแต่ 2 คนขึ้นไปพร้อมทั้งรักษาลักษณะเฉพาะตัวของบุคคลเหล่านั้น

  • วางสัตว์เลี้ยงลงในฉากต่างๆ ขณะที่ยังคงเอกลักษณ์ของสัตว์เลี้ยงไว้

  • จัดรูปแบบรูปภาพสัตว์เลี้ยงและเปลี่ยนเป็นภาพวาด

  • จัดรูปแบบรูปภาพสัตว์เลี้ยงและเปลี่ยนเป็นภาพวาด พร้อมทั้งคงหรือ ระบุสไตล์ของรูปภาพ (เช่น สีน้ำ)

  • วางสัตว์เลี้ยงและบุคคลไว้ในฉากที่แตกต่างกัน โดยคงอัตลักษณ์ของทั้ง 2 ไว้

  • จัดรูปแบบรูปภาพสัตว์เลี้ยงและบุคคลอย่างน้อย 1 คน แล้วเปลี่ยนเป็นภาพวาด

  • วางผลิตภัณฑ์ 2 ชิ้นในฉากต่างๆ โดยมีมุมผลิตภัณฑ์ที่แตกต่างกัน

  • วางผลิตภัณฑ์ เช่น คุกกี้หรือโซฟา ในฉากต่างๆ โดยมีมุมผลิตภัณฑ์ที่แตกต่างกัน และทำตามสไตล์รูปภาพที่เฉพาะเจาะจง (เช่น สมจริงที่มีสี สไตล์แสง หรือภาพเคลื่อนไหวที่เฉพาะเจาะจง)

  • วางผลิตภัณฑ์ลงในฉากอื่นโดยยังคง องค์ประกอบเฉพาะของฉากตามที่ระบุไว้ในรูปภาพควบคุม

  • วางผลิตภัณฑ์ 2 รายการในฉากต่างๆ โดยมีมุมผลิตภัณฑ์ที่แตกต่างกัน โดยใช้ รูปภาพที่เฉพาะเจาะจงเป็นอินพุต (เช่น สมจริงที่มีสีเฉพาะ สไตล์แสง หรือภาพเคลื่อนไหว)

  • วางผลิตภัณฑ์ 2 รายการในฉากต่างๆ ขณะที่ยังคงองค์ประกอบเฉพาะของฉากตามที่ระบุไว้ในรูปภาพควบคุม