Tuỳ chỉnh hình ảnh dựa trên một chủ thể cụ thể bằng Imagen


Trang này mô tả cách sử dụng khả năng tuỳ chỉnh từ Imagen để chỉnh sửa hoặc tạo hình ảnh dựa trên một đối tượng cụ thể bằng cách sử dụng các SDK Firebase AI Logic.

Cách hoạt động: Bạn cung cấp một câu lệnh bằng văn bản và ít nhất một hình ảnh tham khảo cho thấy một chủ thể cụ thể (chẳng hạn như sản phẩm, người hoặc động vật). Mô hình này sử dụng các dữ liệu đầu vào này để tạo một hình ảnh mới dựa trên chủ thể được chỉ định trong hình ảnh tham khảo.

Ví dụ: bạn có thể yêu cầu mô hình áp dụng phong cách hoạt hình cho ảnh trẻ em hoặc thay đổi màu sắc của chiếc xe đạp trong ảnh.

Chuyển đến mã



Trước khi bắt đầu

Chỉ có khi bạn dùng Vertex AI Gemini API làm trình cung cấp API.

Nếu bạn chưa thực hiện, hãy hoàn tất hướng dẫn bắt đầu sử dụng. Hướng dẫn này mô tả cách thiết lập dự án Firebase, kết nối ứng dụng của bạn với Firebase, thêm SDK, khởi chạy dịch vụ phụ trợ cho nhà cung cấp API mà bạn chọn và tạo một thực thể ImagenModel.

Các mô hình hỗ trợ tính năng này

Imagen cung cấp tính năng chỉnh sửa hình ảnh thông qua mô hình capability:

  • imagen-3.0-capability-001

Xin lưu ý rằng đối với các mô hình Imagen, hệ thống không hỗ trợ vị trí global.

Gửi yêu cầu tuỳ chỉnh chủ đề

Mẫu sau đây cho thấy một yêu cầu tuỳ chỉnh đối tượng, yêu cầu mô hình tạo một hình ảnh mới dựa trên hình ảnh tham chiếu được cung cấp (trong ví dụ này là một con mèo). Vì mèo là một động vật, nên nó sử dụng loại chủ đề ImagenSubjectReferenceType.ANIMAL.

Nếu chủ thể là người hoặc sản phẩm, bạn cũng có thể sử dụng ví dụ này nhưng có những thay đổi sau:

  • Nếu chủ đề của bạn là người, hãy sử dụng loại chủ đề ImagenSubjectReferenceType.PERSON. Bạn có thể gửi loại yêu cầu này kèm theo hoặc không kèm theo hình ảnh kiểm soát lưới khuôn mặt để hướng dẫn thêm quá trình tạo hình ảnh.

  • Nếu chủ đề của bạn là sản phẩm, hãy sử dụng loại chủ đề ImagenSubjectReferenceType.PRODUCT.

Hãy xem các mẫu câu lệnh ở phần sau trên trang này để tìm hiểu về cách viết câu lệnh và cách sử dụng hình ảnh tham khảo trong câu lệnh.

Swift

Swift không hỗ trợ tính năng chỉnh sửa hình ảnh bằng các mô hình Imagen. Hãy kiểm tra lại vào cuối năm nay!

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

Các ứng dụng Web không hỗ trợ tính năng chỉnh sửa hình ảnh bằng các mô hình Imagen. Hãy kiểm tra lại vào cuối năm nay!

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 không hỗ trợ tính năng chỉnh sửa hình ảnh bằng các mô hình Imagen. Hãy kiểm tra lại vào cuối năm nay!

Mẫu câu lệnh

Trong yêu cầu, bạn cung cấp hình ảnh tham chiếu (tối đa 4 hình ảnh) bằng cách xác định một ImagenSubjectReference, trong đó bạn chỉ định mã nhận dạng tham chiếu cho một hình ảnh (và cũng có thể là nội dung mô tả đối tượng). Xin lưu ý rằng nhiều hình ảnh có thể có cùng mã nhận dạng tham chiếu (ví dụ: nhiều bức ảnh về cùng một con mèo).

Sau đó, khi viết câu lệnh, bạn có thể tham khảo các mã nhận dạng này. Ví dụ: bạn sử dụng [1] trong câu lệnh để tham chiếu đến hình ảnh có mã nhận dạng tham chiếu là 1. Nếu cung cấp nội dung mô tả về chủ đề, bạn cũng có thể thêm nội dung đó vào câu lệnh để con người dễ đọc câu lệnh hơn.

Bảng sau đây mô tả các mẫu câu lệnh có thể là điểm khởi đầu để viết câu lệnh tuỳ chỉnh dựa trên một chủ đề (chẳng hạn như sản phẩm, người hoặc thú cưng).

Trường hợp sử dụng Hình ảnh tham khảo Mẫu câu lệnh Ví dụ
Tạo kiểu cho hình ảnh sản phẩm – quảng cáo Hình ảnh chủ thể (tối đa 4) Tạo một hình ảnh về SUBJECT_DESCRIPTION [1] sao cho phù hợp với nội dung mô tả: ${PROMPT}

Tạo một hình ảnh về Luxe Elixir hair oil, golden liquid in glass bottle [1] sao cho phù hợp với nội dung mô tả: Hình ảnh cận cảnh, có độ sáng cao về bàn tay của một người phụ nữ đang cầm Luxe Elixir hair oil, golden liquid in glass bottle [1] trên nền trắng tinh. Bàn tay của người phụ nữ được chiếu sáng đầy đủ và tiêu điểm sắc nét trên chai, với độ sâu trường ảnh nông làm mờ nền và làm nổi bật sản phẩm. Ánh sáng dịu nhẹ và khuếch tán, tạo ra một ánh sáng tinh tế xung quanh chai và bàn tay. Bố cục tổng thể đơn giản và trang nhã, làm nổi bật vẻ sang trọng của sản phẩm.

Tạo kiểu cho hình ảnh sản phẩm – thay đổi thuộc tính Hình ảnh chủ thể (tối đa 4) Tạo hình ảnh về một SUBJECT_DESCRIPTION nhưng ${PROMPT}

Tạo hình ảnh về một Seiko watch [1] nhưng có màu xanh dương.

Tạo phong cách cho hình ảnh người mà không cần đầu vào là lưới khuôn mặt Hình ảnh chủ thể (tối đa 4) Tạo một hình ảnh về SUBJECT_DESCRIPTION [1] sao cho phù hợp với nội dung mô tả: ảnh chân dung của SUBJECT_DESCRIPTION [1] ${PROMPT} Tạo một hình ảnh về a woman with short hair[1] sao cho phù hợp với nội dung mô tả: ảnh chân dung của a woman with short hair[1] theo phong cách hoạt hình 3D với nền bị mờ. Một nhân vật dễ thương và đáng yêu, với khuôn mặt tươi cười, nhìn vào camera, tông màu nhạt ...
Tạo phong cách cho hình ảnh người mà không cần đầu vào là lưới khuôn mặt Hình ảnh chủ thể (tối đa 4) Tạo một hình ảnh STYLE_DESCRIPTION [2] về SUBJECT_DESCRIPTION [1] sao cho phù hợp với nội dung mô tả: ảnh chân dung của SUBJECT_DESCRIPTION [1] STYLE_PROMPT Tạo một hình ảnh 3d-cartoon style [2] về a woman with short hair [1] sao cho phù hợp với nội dung mô tả: ảnh chân dung của a woman with short hair [1] theo phong cách hoạt hình 3D với nền bị làm mờ. Một nhân vật dễ thương và đáng yêu, với khuôn mặt tươi cười, nhìn vào camera, tông màu nhạt ...
Tạo phong cách cho hình ảnh người bằng dữ liệu đầu vào là lưới khuôn mặt Hình ảnh chủ thể (tối đa 3)

Hình ảnh kiểm soát lưới khuôn mặt (1)
Tạo hình ảnh về SUBJECT_DESCRIPTION [1] bằng Face mesh from the control image [2]. ${PROMPT} Tạo hình ảnh về the person [1] bằng face mesh from the control image [2]. Người đó phải nhìn thẳng về phía trước với vẻ mặt bình thường. Nền phải là một ...
Tạo phong cách cho hình ảnh người bằng dữ liệu đầu vào là lưới khuôn mặt Hình ảnh chủ thể (tối đa 3)

Hình ảnh kiểm soát lưới khuôn mặt (1)
Tạo hình ảnh về SUBJECT_DESCRIPTION [1] trong tư thế của CONTROL_IMAGE [2] sao cho phù hợp với nội dung mô tả: ảnh chân dung của SUBJECT_DESCRIPTION [1] ${PROMPT} Tạo một hình ảnh về a woman with short hair [1] trong tư thế của control image [2] sao cho phù hợp với nội dung mô tả: ảnh chân dung của a woman with short hair [1] theo phong cách hoạt hình 3D với nền bị mờ. Một nhân vật dễ thương và đáng yêu, với khuôn mặt tươi cười, nhìn vào camera, tông màu nhạt ...
Tạo phong cách cho hình ảnh người bằng dữ liệu đầu vào là lưới khuôn mặt Hình ảnh chủ thể (tối đa 3)

Hình ảnh kiểm soát lưới khuôn mặt (1)
Tạo hình ảnh STYLE_DESCRIPTION [3] về SUBJECT_DESCRIPTION [1] trong tư thế của CONTROL_IMAGE [2] sao cho phù hợp với nội dung mô tả: ảnh chân dung của SUBJECT_DESCRIPTION [1] ${PROMPT} Tạo một hình ảnh 3d-cartoon style [3] về a woman with short hair [1] trong tư thế của control image [2] để khớp với nội dung mô tả: ảnh chân dung về a woman with short hair [1] theo phong cách hoạt hình 3D với nền bị làm mờ. Một nhân vật dễ thương và đáng yêu, với khuôn mặt tươi cười, nhìn vào camera, tông màu pastel ...



Các phương pháp hay nhất và hạn chế

Nếu đang sử dụng một người làm đối tượng, bạn nên đảm bảo khuôn mặt trong hình ảnh tham chiếu có các đặc điểm sau:

  • Được căn giữa và chiếm ít nhất một nửa toàn bộ hình ảnh
  • Được xoay theo hướng chính diện theo mọi hướng (xoay, nghiêng và lệch)
  • Không bị che khuất bởi các vật thể, chẳng hạn như kính râm hoặc khẩu trang

Trường hợp sử dụng

Khả năng tuỳ chỉnh cung cấp tính năng tạo câu lệnh theo phong cách tự do, có thể tạo ấn tượng rằng mô hình có thể làm được nhiều việc hơn những gì được huấn luyện. Các phần sau đây mô tả các trường hợp sử dụng dự kiến cho hoạt động tuỳ chỉnh và các ví dụ không đầy đủ về các trường hợp sử dụng ngoài ý muốn.

Bạn nên sử dụng tính năng này cho các trường hợp sử dụng dự kiến, vì chúng tôi đã huấn luyện mô hình dựa trên những trường hợp sử dụng đó và dự kiến sẽ có kết quả tốt. Ngược lại, nếu yêu cầu mô hình làm những việc ngoài các trường hợp sử dụng dự kiến, thì bạn nên dự đoán kết quả kém.

Các trường hợp sử dụng dự kiến

Sau đây là các trường hợp sử dụng dự kiến để tuỳ chỉnh dựa trên chủ đề:

  • Tạo kiểu cho ảnh của một người.

  • Tạo phong cách cho ảnh của một người và giữ nguyên biểu cảm khuôn mặt của người đó.

  • (Ít thành công) Đặt một sản phẩm, chẳng hạn như ghế sofa hoặc bánh quy, vào nhiều cảnh có góc sản phẩm khác nhau.

  • Tạo các phiên bản của một sản phẩm không giữ lại thông tin chi tiết chính xác.

  • Tạo phong cách cho ảnh của một người, đồng thời vẫn giữ được biểu cảm khuôn mặt.

Ví dụ về các trường hợp sử dụng ngoài ý muốn

Sau đây là danh sách (chưa đầy đủ) các trường hợp sử dụng ngoài ý muốn để tuỳ chỉnh dựa trên một chủ đề. Mô hình này không được huấn luyện cho những trường hợp sử dụng này và có thể sẽ tạo ra kết quả kém.

  • Đặt hai hoặc nhiều người vào các cảnh khác nhau trong khi vẫn giữ nguyên danh tính của họ.

  • Đặt từ 2 người trở lên vào các cảnh khác nhau trong khi vẫn giữ nguyên danh tính của họ và chỉ định kiểu của hình ảnh đầu ra bằng cách sử dụng một hình ảnh mẫu làm đầu vào cho kiểu.

  • Tạo phong cách cho ảnh chụp từ 2 người trở lên mà vẫn giữ nguyên danh tính của họ.

  • Đặt thú cưng vào các cảnh khác nhau mà vẫn giữ nguyên đặc điểm nhận dạng của thú cưng.

  • Tạo phong cách cho ảnh thú cưng và biến ảnh đó thành bản vẽ.

  • Tạo phong cách cho ảnh thú cưng và biến ảnh đó thành bản vẽ, đồng thời giữ nguyên hoặc chỉ định phong cách của hình ảnh (chẳng hạn như màu nước).

  • Đặt thú cưng và người vào một cảnh khác, đồng thời giữ nguyên danh tính của cả hai.

  • Tạo phong cách cho ảnh chụp một thú cưng và một hoặc nhiều người rồi biến bức ảnh đó thành một bức vẽ.

  • Đặt hai sản phẩm vào các cảnh khác nhau với các góc sản phẩm khác nhau.

  • Đặt một sản phẩm, chẳng hạn như bánh quy hoặc ghế sofa, vào nhiều cảnh với các góc độ sản phẩm khác nhau và tuân theo một phong cách hình ảnh cụ thể (chẳng hạn như chân thực với màu sắc, kiểu chiếu sáng hoặc ảnh động cụ thể).

  • Đặt một sản phẩm vào một cảnh khác, đồng thời giữ nguyên bố cục cụ thể của cảnh đó theo quy định của hình ảnh kiểm soát.

  • Đặt hai sản phẩm vào các cảnh khác nhau với các góc sản phẩm khác nhau, sử dụng một hình ảnh cụ thể làm dữ liệu đầu vào (chẳng hạn như hình ảnh chân thực với màu sắc, kiểu chiếu sáng hoặc ảnh động cụ thể).

  • Đặt hai sản phẩm vào các cảnh khác nhau, đồng thời giữ nguyên bố cục cụ thể của cảnh như được chỉ định bằng một hình ảnh kiểm soát.