ปรับแต่งรูปภาพตามเรื่องที่ระบุโดยใช้ 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(
        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 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 = ((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 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 รายการในฉากต่างๆ ขณะที่ยังคงองค์ประกอบเฉพาะของฉากตามที่ระบุไว้ในรูปภาพควบคุม