توضّح هذه الصفحة كيفية استخدام Imagen من أجل استبدال خلفية صورة باستخدام حِزم تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic.
استبدال الخلفية هو نوع من التعديل المستند إلى القناع (وتحديدًا الترميم). القناع هو طبقة رقمية تحدّد المنطقة المحدّدة التي تريد تعديلها.
طريقة العمل: عليك تقديم صورة أصلية وصورة مقنّعة مقابلة تحدّد قناعًا فوق الخلفية، إما باستخدام ميزة رصد الخلفية التلقائي أو من خلال تقديم قناع الخلفية بنفسك. يمكنك أيضًا تقديم طلب نصي يصف التغيير الذي تريد إجراءه. بعد ذلك، ينشئ النموذج خلفية جديدة ويطبّقها.
على سبيل المثال، يمكنك تغيير الإعدادات حول موضوع أو كائن بدون التأثير في المقدمة (على سبيل المثال، في صورة منتج).
الانتقال إلى الرمز البرمجي للخلفية التي تم رصدها تلقائيًا الانتقال إلى الرمز البرمجي لتوفير قناع الخلفية
قبل البدء
لا تتوفّر هذه الميزة إلا عند استخدام Vertex AI Gemini API كموفّر لواجهة برمجة التطبيقات. |
إذا لم يسبق لك إجراء ذلك، أكمل دليل بدء الاستخدام الذي يوضّح كيفية إعداد مشروعك على Firebase وربط تطبيقك بـ Firebase وإضافة حزمة تطوير البرامج (SDK) وتهيئة خدمة الخلفية لمزوّد واجهة برمجة التطبيقات الذي اخترته وإنشاء مثيل ImagenModel
.
الطُرز التي تتيح هذه الإمكانية
توفّر Imagen إمكانية تعديل الصور من خلال نموذج capability
:
imagen-3.0-capability-001
يُرجى العِلم أنّه بالنسبة إلى طُرز Imagen، لا يتوفّر الموقع الجغرافي global
.
استبدال الخلفية باستخدام ميزة "الرصد التلقائي للخلفية"
قبل تجربة هذا النموذج، أكمل قسم قبل البدء في هذا الدليل لإعداد مشروعك وتطبيقك. |
يوضّح المثال التالي كيفية استبدال خلفية صورة باستخدام ميزة الرصد التلقائي للخلفية. عليك تقديم الصورة الأصلية وطلب نصي، وسيتولّى Imagen تلقائيًا رصد الخلفية وإنشاء قناع لها لتعديل الصورة الأصلية.
Swift
لا تتوافق لغة Swift مع تعديل الصور باستخدام نماذج Imagen. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
Kotlin
لاستبدال الخلفية باستخدام ميزة "الرصد التلقائي للخلفية"، حدِّد ImagenBackgroundMask
. استخدِم
editImage()
واضبط إعدادات التعديل لاستخدام ImagenEditMode.INPAINT_INSERTION
.
// 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 'originalImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
val originalImage: Bitmap = TODO("Load your original image Bitmap here")
// Provide the prompt describing the new background.
val prompt = "space background"
// Use the editImage API to replace the background.
// Pass the original image, the prompt, and an editing configuration.
val editedImage = model.editImage(
sources = listOf(
ImagenRawImage(originalImage),
ImagenBackgroundMask(), // Use ImagenBackgroundMask() to auto-generate the mask.
),
prompt = prompt,
// Define the editing configuration for inpainting and background replacement.
config = ImagenEditingConfig(ImagenEditMode.INPAINT_INSERTION)
)
// Process the resulting 'editedImage' Bitmap, for example, by displaying it in an ImageView.
}
Java
لاستبدال الخلفية باستخدام ميزة "الرصد التلقائي للخلفية"، حدِّد ImagenBackgroundMask
. استخدِم
editImage()
واضبط إعدادات التعديل لاستخدام ImagenEditMode.INPAINT_INSERTION
.
// 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 'originalImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap originalImage = null; // TODO("Load your image Bitmap here");
// Provide the prompt describing the new background.
String prompt = "space background";
// Define the list of sources for the editImage call.
// This includes the original image and the auto-generated mask.
ImagenRawImage rawOriginalImage = new ImagenRawImage(originalImage);
ImagenBackgroundMask rawMaskedImage = new ImagenBackgroundMask(); // Use ImagenBackgroundMask() to auto-generate the mask.
// Define the editing configuration for inpainting and insertion.
ImagenEditingConfig config = new ImagenEditingConfig.Builder()
.setEditMode(ImagenEditMode.INPAINT_INSERTION)
.build();
// Use the editImage API to replace the background.
// Pass the original image, the auto-generated masked image, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Arrays.asList(rawOriginalImage, rawMaskedImage), prompt, config), new FutureCallback<ImagenGenerationResponse>() {
@Override
public void onSuccess(ImagenGenerationResponse result) {
if (result.getImages().isEmpty()) {
Log.d("ImageEditor", "No images generated");
}
Bitmap editedImage = result.getImages().get(0).asBitmap();
// Process and use the bitmap to display the image in your UI
}
@Override
public void onFailure(Throwable t) {
// ...
}
}, Executors.newSingleThreadExecutor());
Web
لا يمكن تعديل الصور باستخدام نماذج Imagen في تطبيقات الويب. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
Dart
لاستبدال الخلفية باستخدام ميزة "الرصد التلقائي للخلفية"، حدِّد ImagenBackgroundMask
. استخدِم
editImage()
واضبط إعدادات التعديل لاستخدام ImagenEditMode.inpaintInsertion
.
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 'originalImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List originalImage = Uint8List(0); // TODO: Load your original image data here.
// Provide the prompt describing the new background.
final prompt = 'space background';
try {
// Use the editImage API to replace the background.
// Pass the original image, the prompt, and an editing configuration.
final response = await model.editImage(
sources: [
ImagenRawImage(originalImage),
ImagenBackgroundMask(), // Use ImagenBackgroundMask() to auto-generate the mask.
],
prompt: prompt,
// Define the editing configuration for inpainting and background replacement.
config: const ImagenEditingConfig(
editMode: ImagenEditMode.inpaintInsertion,
),
);
// 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
لا تتوافق نماذج Imagen مع Unity عند تعديل الصور. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
استبدال الخلفية باستخدام قناع متوفّر
قبل تجربة هذا النموذج، أكمل قسم قبل البدء في هذا الدليل لإعداد مشروعك وتطبيقك. |
يوضّح المثال التالي كيفية استبدال خلفية صورة باستخدام قناع خلفية محدّد في صورة تقدّمها. يجب تقديم الصورة الأصلية وطلب نصي والصورة التي تم إخفاء أجزاء منها.
Swift
لا تتوافق لغة Swift مع تعديل الصور باستخدام نماذج Imagen. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
Kotlin
لاستبدال الخلفية باستخدام قناع توفّره، حدِّد
ImagenRawMask
مع الصورة المقنّعة. استخدِم
editImage()
واضبط إعدادات التعديل لاستخدام ImagenEditMode.INPAINT_INSERTION
.
// 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 'originalImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
val originalImage: Bitmap = TODO("Load your original image Bitmap here")
// This example assumes 'maskImage' is a pre-loaded Bitmap that contains the masked area.
// In a real app, this might come from the user's device or a URL.
val maskImage: Bitmap = TODO("Load your masked image Bitmap here")
// Provide the prompt describing the new background.
val prompt = "space background"
// Use the editImage API to replace the background.
// Pass the original image, the masked image, the prompt, and an editing configuration.
val editedImage = model.editImage(
referenceImages = listOf(
ImagenRawImage(originalImage.toImagenInlineImage()),
ImagenRawMask(maskImage.toImagenInlineImage()), // Use ImagenRawMask() to provide your own masked image.
),
prompt = prompt,
// Define the editing configuration for inpainting and background replacement.
config = ImagenEditingConfig(ImagenEditMode.INPAINT_INSERTION)
)
// Process the resulting 'editedImage' Bitmap, for example, by displaying it in an ImageView.
}
Java
لاستبدال الخلفية باستخدام قناع توفّره، حدِّد
ImagenRawMask
مع الصورة المقنّعة. استخدِم
editImage()
واضبط إعدادات التعديل لاستخدام ImagenEditMode.INPAINT_INSERTION
.
// 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 'originalImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap originalImage = null; // TODO("Load your original image Bitmap here");
// This example assumes 'maskImage' is a pre-loaded Bitmap that contains the masked area.
// In a real app, this might come from the user's device or a URL.
Bitmap maskImage = null; // TODO("Load your masked image Bitmap here");
// Provide the prompt describing the new background.
String prompt = "space background";
// Define the list of source images for the editImage call.
ImagenRawImage rawOriginalImage = new ImagenRawImage(originalImage);
ImagenBackgroundMask rawMaskedImage = new ImagenRawMask(maskImage); // Use ImagenRawMask() to provide your own masked image.
// Define the editing configuration for inpainting and background replacement.
ImagenEditingConfig config = new ImagenEditingConfig.Builder()
.setEditMode(ImagenEditMode.INPAINT_INSERTION)
.build();
// Use the editImage API to replace the background.
// Pass the original image, the masked image, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Arrays.asList(rawOriginalImage, rawMaskedImage), prompt, config), new FutureCallback<ImagenGenerationResponse>() {
@Override
public void onSuccess(ImagenGenerationResponse result) {
if (result.getImages().isEmpty()) {
Log.d("ImageEditor", "No images generated");
}
Bitmap editedImage = result.getImages().get(0).asBitmap();
// Process and use the bitmap to display the image in your UI
}
@Override
public void onFailure(Throwable t) {
// ...
}
}, Executors.newSingleThreadExecutor());
Web
لا يمكن تعديل الصور باستخدام نماذج Imagen في تطبيقات الويب. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
Dart
لاستبدال الخلفية باستخدام قناع توفّره، حدِّد
ImagenRawMask
مع الصورة المقنّعة. استخدِم
editImage()
واضبط إعدادات التعديل لاستخدام ImagenEditMode.INPAINT_INSERTION
.
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 'originalImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List originalImage = Uint8List(0); // TODO: Load your original image data here.
// This example assumes 'maskImage' is a pre-loaded Uint8List that contains the masked area.
// In a real app, this might come from the user's device or a URL.
final Uint8List maskImage = Uint8List(0); // TODO: Load your masked image data here.
// Provide the prompt describing the new background.
final prompt = 'space background';
try {
// Use the editImage API to replace the background.
// Pass the original image, the prompt, and an editing configuration.
final response = await model.editImage(
sources: [
ImagenRawImage(originalImage),
ImagenRawMask(maskImage), // Use ImagenRawMask() to provide your own masked image.
],
prompt: prompt,
// Define the editing configuration for inpainting and background replacement.
config: const ImagenEditingConfig(
editMode: ImagenEditMode.inpaintInsertion,
),
);
// 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
لا تتوافق نماذج Imagen مع Unity عند تعديل الصور. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
أفضل الممارسات والقيود
ننصحك بتوسيع القناع عند تعديل صورة. يمكن أن يساعد ذلك في تنعيم حواف التعديل وجعلها تبدو أكثر إقناعًا. بشكل عام، ننصح بقيمة تمدّد تبلغ% 1 أو% 2 (0.01
أو 0.02
).
تقديم ملاحظات حول تجربتك مع Firebase AI Logic