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 chế độ kiểm soát cụ thể bằng cách sử dụng 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 chiếu kiểm soát (chẳng hạn như bản vẽ hoặc hình ảnh có đường viền rõ né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 hình ảnh kiểm soát.
Ví dụ: bạn có thể cung cấp cho mô hình bản vẽ về một con tàu vũ trụ và mặt trăng cùng với một câu lệnh bằng văn bản để tạo bức tranh màu nước dựa trên bản vẽ đó.
Các loại hình ảnh tham khảo để kiểm soát
Hình ảnh tham khảo để tuỳ chỉnh có kiểm soát có thể là một nét vẽ nguệch ngoạc, một hình ảnh có đường viền rõ nét hoặc một lưới khuôn mặt.
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 có kiểm soát
Mẫu sau đây minh hoạ một yêu cầu tuỳ chỉnh có kiểm soát, 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à bản vẽ về không gian, chẳng hạn như tên lửa và mặt trăng). Vì hình ảnh tham chiếu là một bản phác thảo hoặc đường viền thô, được vẽ bằng tay, nên hình ảnh này sử dụng loại thành phần CONTROL_TYPE_SCRIBBLE
.
Nếu hình ảnh tham chiếu của bạn là hình ảnh Canny edge hoặc lưới khuôn mặt, bạn cũng có thể sử dụng ví dụ này nhưng có những thay đổi sau:
Nếu hình ảnh tham khảo của bạn là hình ảnh Canny edge, hãy sử dụng loại chế độ kiểm soát
CONTROL_TYPE_CANNY
.Nếu hình ảnh tham chiếu của bạn là một lưới khuôn mặt, hãy sử dụng loại điều khiển
CONTROL_TYPE_FACE_MESH
. Bạn chỉ có thể sử dụng chế độ kiểm soát này với chế độ tuỳ chỉnh chủ thể của người.
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 controlReference = ImagenControlReference(
image = referenceImage,
referenceID = 1,
controlType = CONTROL_TYPE_SCRIBBLE
)
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
val prompt = "A cat flying through outer space arranged like the space scribble[1]"
// Use the editImage API to perform the controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
val editedImage = model.editImage(
references = listOf(controlReference),
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.
ImagenControlReference controlReference = new ImagenControlReference.Builder()
.setImage(referenceImage)
.setReferenceID(1)
.setControlType(CONTROL_TYPE_SCRIBBLE)
.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 flying through outer space arranged like the space scribble[1]";
// 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 controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(controlReference), 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 control reference using the reference image.
final controlReference = ImagenControlReference(
image: referenceImage,
referenceId: 1,
controlType: ImagenControlType.scribble,
);
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat flying through outer space arranged like the space scribble[1]";
try {
// Use the editImage API to perform the controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
final response = await model.editImage(
[controlReference],
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 khảo (tối đa 4 hình ảnh) bằng cách xác định một ImagenControlReference
, trong đó bạn chỉ định mã nhận dạng tham chiếu cho một hình ảnh.
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ản phác thảo về cùng một ý tưởng).
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
.
Bảng sau đây cung cấp 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ế độ kiểm soát.
Trường hợp sử dụng | Hình ảnh tham khảo | Mẫu câu lệnh | Ví dụ |
---|---|---|---|
Tuỳ chỉnh có kiểm soát | Bản đồ phác thảo (1) | Tạo một hình ảnh phù hợp với scribble map [1] để khớp với nội dung mô tả: ${STYLE_PROMPT} ${PROMPT}. | Tạo một hình ảnh phù hợp với scribble map [1] để khớp với nội dung mô tả: Hình ảnh phải theo phong cách tranh sơn dầu theo trường phái ấn tượng với nét vẽ thư thái. Bức tranh này có bầu không khí sáng tự nhiên và nét vẽ rõ ràng. Hình ảnh nhìn ngang của một chiếc ô tô. Chiếc ô tô đậu trên mặt đường ướt, phản chiếu, với ánh đèn thành phố phản chiếu trong các vũng nước. |
Tuỳ chỉnh có kiểm soát | Hình ảnh kiểm soát khéo léo (1) | Tạo một hình ảnh phù hợp với edge map [1] để khớp với nội dung mô tả: ${STYLE_PROMPT} ${PROMPT} | Tạo một hình ảnh phù hợp với edge map [1] để khớp với nội dung mô tả: Hình ảnh phải theo phong cách tranh sơn dầu theo trường phái ấn tượng, với những nét cọ thư thái. Bức tranh có bầu không khí tự nhiên và nét vẽ rõ ràng. Hình ảnh một chiếc ô tô nhìn từ bên hông. Chiếc xe đậu trên mặt đường ướt và phản chiếu, với ánh đèn thành phố phản chiếu trong các vũng nước. |
Tạo phong cách cho hình ảnh người bằng dữ liệu đầu vào FaceMesh |
Hình ảnh chủ thể (1-3) Hình ảnh kiểm soát FaceMesh (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 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 FaceMesh |
Hình ảnh chủ thể (1-3) Hình ảnh kiểm soát FaceMesh (1) |
Tạo một hình ảnh ${STYLE_PROMPT} về SUBJECT_DESCRIPTION [1] trong tư thế của CONTROL_IMAGE [2] 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 theo phong cách hoạt hình 3D 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 ... |
Các phương pháp hay nhất và hạn chế
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 một thành phần điều khiển:
Tạo một hình ảnh tuân theo câu lệnh và hình ảnh kiểm soát đường viền sắc nét.
Tạo một hình ảnh tuân theo câu lệnh và hình ảnh phác thảo.
Tạo phong cách cho ảnh của một người trong khi vẫn giữ nguyên 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 thành phần kiểm soát. 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ạo hình ảnh bằng một phong cách được chỉ định trong câu lệnh.
Tạo hình ảnh từ văn bản theo một phong cách cụ thể do hình ảnh tham khảo cung cấp, với một mức độ kiểm soát nhất định đối với bố cục hình ảnh bằng hình ảnh kiểm soát.
Tạo hình ảnh từ văn bản theo một phong cách cụ thể do hình ảnh tham khảo cung cấp, với một mức độ kiểm soát nhất định đối với bố cục hình ảnh bằng cách sử dụng một nét phác thảo kiểm soát.
Tạo một hình ảnh từ văn bản theo một phong cách cụ thể do hình ảnh tham khảo cung cấp, với một mức độ kiểm soát nhất định đối với bố cục hình ảnh bằng cách sử dụng hình ảnh kiểm soát. Người trong hình ảnh có một biểu cảm cụ thể.
Tạo phong cách cho ảnh có từ 2 người trở lên và giữ nguyên biểu cảm khuôn mặt của họ.
Tạo phong cách cho ảnh thú cưng và biến ảnh đó thành bản vẽ. Giữ nguyên hoặc chỉ định bố cục của hình ảnh (ví dụ: màu nước).