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


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

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

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

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



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

ใช้ได้เฉพาะเมื่อใช้ Agent Platform Gemini API (formerly Vertex AI) เป็นผู้ให้บริการ 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 Agent Platform Gemini API backend service (formerly branded Vertex AI).
    // 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(
        referenceImages = listOf(subjectReference),
        prompt = prompt,
        config = ImagenEditingConfig(
            editSteps = 50 // Number of editing steps, a higher value can improve quality
        )
    )

    // Process the result
}

Java

// Initialize the Agent Platform Gemini API backend service (formerly branded Vertex AI).
// 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 = ((ImagenInlineImage) 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 Agent Platform Gemini API backend service (formerly branded Vertex AI).
// 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]สีน้ำเงิน

การปรับแต่งรูปภาพบุคคลโดยไม่ต้องป้อนข้อมูลตาข่ายใบหน้า รูปภาพตัวแบบ (สูงสุด 4 รูป) สร้างรูปภาพเกี่ยวกับSUBJECT_DESCRIPTION [1]ให้ตรงกับ คำอธิบาย: ภาพบุคคลของSUBJECT_DESCRIPTION [1] ${PROMPT} สร้างรูปภาพเกี่ยวกับa woman with short hair[1]ให้ตรงกับคำอธิบาย: ภาพบุคคลของa woman with short hair[1] ในสไตล์การ์ตูน 3 มิติที่มีพื้นหลังเบลอ ตัวละครน่ารักๆ หน้ายิ้ม มองกล้อง โทนสีพาสเทล ...
การปรับแต่งรูปภาพบุคคลโดยไม่ต้องป้อนข้อมูลตาข่ายใบหน้า รูปภาพตัวแบบ (สูงสุด 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 โดยสังเขปที่ไม่พึงประสงค์สำหรับการ ปรับแต่งตามเรื่อง โมเดลไม่ได้ผ่านการฝึกสำหรับกรณีการใช้งานเหล่านี้ และมีแนวโน้มที่จะให้ผลลัพธ์ที่ไม่ดี

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

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

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

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

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

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

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

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

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

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

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

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

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