Na tej stronie dowiesz się, jak używać malowania uzupełniającego za pomocą Imagen, aby usuwać obiekty z obrazów za pomocą pakietów SDK Firebase AI Logic.
Wypełnianie to rodzaj edycji opartej na maskach. Maska to cyfrowa nakładka określająca konkretny obszar, który chcesz edytować.
Jak to działa: przesyłasz oryginalny obraz i odpowiadający mu obraz z maską (wygenerowany automatycznie lub przez Ciebie), który definiuje maskę obiektu lub motywu, który chcesz usunąć. Możesz też opcjonalnie podać prompta tekstowego z opisem tego, co chcesz usunąć, lub model może inteligentnie wykryć, który obiekt należy usunąć. Model usuwa obiekt i wypełnia obszar nową, odpowiednią do kontekstu zawartością.
Możesz na przykład zamaskować piłkę i zastąpić ją pustą ścianą lub trawiastym polem.
Przejdź do kodu maski wygenerowanej automatycznie Przejdź do kodu maski dostarczonej przez użytkownika
Zanim zaczniesz
| Dostępne tylko wtedy, gdy jako dostawcę interfejsu API używasz Vertex AI Gemini API. |
Jeśli jeszcze tego nie zrobisz, zapoznaj się z przewodnikiem dla początkujących, w którym znajdziesz informacje o tym, jak skonfigurować projekt Firebase, połączyć aplikację z Firebase, dodać pakiet SDK, zainicjować usługę backendu dla wybranego dostawcy interfejsu API i utworzyć instancję ImagenModel.
Modele obsługujące tę funkcję
Imagen oferuje edycję obrazów za pomocą modelu capability:
imagen-3.0-capability-001
Pamiętaj, że w przypadku modeli Imagen lokalizacja global nie jest obsługiwana.
Usuwanie obiektów za pomocą maski wygenerowanej automatycznie
| Zanim wypróbujesz ten przykład, zapoznaj się z sekcją Zanim zaczniesz w tym przewodniku, aby skonfigurować projekt i aplikację. |
Z przykładu poniżej dowiesz się, jak za pomocą funkcji wypełniania usunąć treści z obrazu – przy użyciu automatycznego generowania maski. Przesyłasz oryginalny obraz i prompt tekstowy, a Imagen automatycznie wykrywa i tworzy obszar maski, aby zmodyfikować oryginalny obraz.
Swift
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku języka Swift. Sprawdź ponownie w późniejszym terminie tego roku.
Kotlin
Aby usunąć obiekty za pomocą automatycznie wygenerowanej maski, określ
ImagenBackgroundMask. Użyj
editImage()
i ustaw konfigurację edycji tak, aby używać ImagenEditMode.INPAINT_REMOVAL.
// 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 content to be removed.
val prompt = "ball"
// Use the editImage API to remove the unwanted content.
// Pass the original image, the prompt, and an editing configuration.
val editedImage = model.editImage(
referenceImages = listOf(
ImagenRawImage(originalImage.toImagenInlineImage()),
ImagenBackgroundMask(), // Use ImagenBackgroundMask() to auto-generate the mask.
),
prompt = prompt,
// Define the editing configuration for inpainting and insertion.
config = ImagenEditingConfig(ImagenEditMode.INPAINT_REMOVAL)
)
// Process the resulting 'editedImage' Bitmap, for example, by displaying it in an ImageView.
}
Java
Aby usunąć obiekty za pomocą automatycznie wygenerowanej maski, określ
ImagenBackgroundMask. Użyj
editImage()
i ustaw konfigurację edycji tak, aby używać ImagenEditMode.INPAINT_REMOVAL.
// 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 content to be removed.
String prompt = "ball";
// Define the list of sources for the editImage call.
// This includes the original image and the auto-generated mask.
ImagenRawImage rawOriginalImage =
new ImagenRawImage(ImagenInlineImageKt.toImagenInlineImage(originalImage));
// Use ImagenBackgroundMask() to auto-generate the mask.
ImagenBackgroundMask rawMaskedImage = new ImagenBackgroundMask();
ImagenEditingConfig config = new ImagenEditingConfig();
// Use the editImage API to remove the unwanted content.
// 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 = ((ImagenInlineImage) 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
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku aplikacji internetowych. Sprawdź ponownie w późniejszym terminie tego roku.
Dart
Aby usunąć obiekty za pomocą automatycznie wygenerowanej maski, określ
ImagenBackgroundMask. Użyj
editImage()
i skonfiguruj edytowanie, aby używać ImagenEditMode.inpaintRemoval.
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');
TODO - FLUTTER// 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 content to be removed.
final prompt = 'ball';
try {
// Use the editImage API to remove the unwanted content.
// 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,
// Define the editing configuration for inpainting and removal.
config: const ImagenEditingConfig(
editMode: ImagenEditMode.inpaintRemoval,
),
);
// 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
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku Unity. Sprawdź ponownie w późniejszym terminie tego roku.
Usuwanie obiektów za pomocą podanej maski
| Zanim wypróbujesz ten przykład, zapoznaj się z sekcją Zanim zaczniesz w tym przewodniku, aby skonfigurować projekt i aplikację. |
Przykład poniżej pokazuje, jak za pomocą uzupełniania usunąć zawartość z obrazu – przy użyciu maski zdefiniowanej na dostarczonym przez Ciebie obrazie. Podajesz oryginalny obraz, prompt tekstowy i obraz z maską.
Podanie prompta tekstowego jest opcjonalne, jeśli podasz zamaskowany obraz. Imagen może inteligentnie wykryć obiekt do usunięcia z zamaskowanego obszaru. Jeśli jednak obiekt, który chcesz usunąć, nie jest oczywisty lub chcesz usunąć tylko określone obiekty w zamaskowanym obszarze, podaj prompt tekstowy, aby pomóc modelowi usunąć właściwy obiekt.
Swift
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku języka Swift. Sprawdź ponownie w późniejszym terminie tego roku.
Kotlin
Aby usunąć obiekty i dostarczyć własny zamaskowany obraz, podaj
ImagenRawMask z zamaskowanym obrazem. Użyj
editImage()
i ustaw konfigurację edycji tak, aby używać ImagenEditMode.INPAINT_REMOVAL.
// 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 content to be removed.
val prompt = "ball"
// Use the editImage API to remove the unwanted content.
// 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 removal.
config = ImagenEditingConfig(ImagenEditMode.INPAINT_REMOVAL)
)
// Process the resulting 'editedImage' Bitmap, for example, by displaying it in an ImageView.
}
Java
Aby usunąć obiekty i dostarczyć własny zamaskowany obraz, podaj
ImagenRawMask z zamaskowanym obrazem. Użyj
editImage()
i ustaw konfigurację edycji tak, aby używać ImagenEditMode.INPAINT_REMOVAL.
// 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 content to be removed.
String prompt = "ball";
// Define the list of source images for the editImage call.
ImagenRawImage rawOriginalImage =
new ImagenRawImage(ImagenInlineImageKt.toImagenInlineImage(originalImage));
// Use ImagenRawMask() to provide your own masked image.
ImagenBackgroundMask rawMaskedImage =
new ImagenRawMask(ImagenInlineImageKt.toImagenInlineImage(maskImage));
ImagenEditingConfig config = new ImagenEditingConfig();
// Use the editImage API to remove the unwanted content.
// 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 = ((ImagenInlineImage) 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
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku aplikacji internetowych. Sprawdź ponownie w późniejszym terminie tego roku.
Dart
Aby usunąć obiekty i dostarczyć własny zamaskowany obraz, podaj
ImagenRawMask z zamaskowanym obrazem. Użyj
editImage()
i skonfiguruj edytowanie, aby używać ImagenEditMode.inpaintRemoval.
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 content to be removed.
final prompt = 'ball';
try {
// Use the editImage API to remove the unwanted content.
// 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 removal.
config: const ImagenEditingConfig(
editMode: ImagenEditMode.inpaintRemoval,
),
);
// 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
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku Unity. Sprawdź ponownie w późniejszym terminie tego roku.
Sprawdzone metody i ograniczenia
Podczas edytowania obrazu zalecamy rozszerzenie maski. Może to pomóc wygładzić granice edycji i sprawić, że będzie ona bardziej przekonująca. Zwykle zalecamy wartość rozszerzenia na poziomie 1% lub 2% (0.01 lub 0.02).
Prześlij opinię o korzystaniu z usługi Firebase AI Logic