Na tej stronie dowiesz się, jak korzystać z funkcji dostosowywania z Imagen, aby edytować lub generować obrazy na podstawie określonego obiektu za pomocą pakietów Firebase AI Logic SDK.
Jak to działa: podajesz prompt tekstowy i co najmniej 1 obraz referencyjny przedstawiający konkretny obiekt (np. produkt, osobę lub zwierzę). Model wykorzystuje te dane wejściowe do wygenerowania nowego obrazu na podstawie określonego obiektu na obrazach referencyjnych.
Możesz na przykład poprosić model o zastosowanie stylu kreskówkowego do zdjęcia dziecka lub zmianę koloru roweru na obrazie.
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.
Wysyłanie prośby o dostosowanie tematu
Poniższy przykład pokazuje żądanie dostosowania obiektu, w którym prosimy model o wygenerowanie nowego obrazu na podstawie podanego obrazu referencyjnego (w tym przykładzie jest to kot). Kot jest zwierzęciem, więc używa typu obiektu ImagenSubjectReferenceType.ANIMAL
.
Jeśli obiektem jest osoba lub produkt, możesz też użyć tego przykładu, ale z tymi zmianami:
Jeśli podmiotem jest osoba, użyj typu podmiotu
ImagenSubjectReferenceType.PERSON
. Tego typu prośbę możesz wysłać z obrazem kontrolnym siatki twarzy lub bez niego, aby jeszcze bardziej ukierunkować generowanie obrazu.Jeśli tematem jest produkt, użyj typu tematu
ImagenSubjectReferenceType.PRODUCT
.
W dalszej części tej strony znajdziesz szablony promptów, z których dowiesz się, jak pisać prompty i jak używać w nich obrazów referencyjnych.
Swift
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku języka Swift. Sprawdź ponownie w późniejszym terminie.
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
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku aplikacji internetowych. Sprawdź ponownie w późniejszym terminie.
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
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku Unity. Sprawdź ponownie w późniejszym terminie.
Szablony promptów
W prośbie podajesz obrazy referencyjne (maksymalnie 4 obrazy), definiując element
ImagenSubjectReference
, w którym określasz identyfikator obrazu referencyjnego (i opcjonalnie opis obiektu). Pamiętaj, że wiele obrazów może mieć ten sam identyfikator odniesienia (np. kilka zdjęć tego samego kota).
Podczas pisania prompta odwołujesz się do tych identyfikatorów. Możesz na przykład użyć w prompcie symbolu
[1]
, aby odwołać się do obrazów z identyfikatorem odwołania 1
. Jeśli podasz opis tematu, możesz go też uwzględnić w prompcie, aby był łatwiejszy do odczytania.
W tabeli poniżej znajdziesz szablony promptów, które mogą być punktem wyjścia do pisania promptów do dostosowywania na podstawie tematu (np. produktu, osoby lub zwierzęcia).
Przypadek użycia | Obrazy referencyjne | Szablon prompta | Przykład |
---|---|---|---|
Stylizacja obrazu produktu – reklama | Obraz tematu (maksymalnie 4) | Utwórz obraz przedstawiający SUBJECT_DESCRIPTION [1], który będzie pasować do opisu: ${PROMPT} |
Utwórz obraz Luxe Elixir hair oil, golden liquid in glass bottle [1] zgodny z tym opisem: Zbliżenie, jasne zdjęcie dłoni kobiety trzymającej Luxe Elixir hair oil, golden liquid in glass bottle [1] na czysto białym tle. Ręka kobiety jest dobrze oświetlona, a ostrość jest ustawiona na butelkę. Mała głębia ostrości rozmywa tło i podkreśla produkt. Światło jest miękkie i rozproszone, tworząc subtelną poświatę wokół butelki i dłoni. Ogólna kompozycja jest prosta i elegancka, podkreślając luksusowy charakter produktu. |
Stylizacja zdjęcia produktu – zmiana atrybutu | Obraz tematu (maksymalnie 4) | Wygeneruj obraz SUBJECT_DESCRIPTION, ale ${PROMPT} |
Wygeneruj obraz Seiko watch [1], ale w kolorze niebieskim. |
Stylizacja obrazu osoby bez danych wejściowych siatki twarzy | Obraz tematu (maksymalnie 4) | Utwórz obraz przedstawiający SUBJECT_DESCRIPTION [1], który będzie pasować do opisu: portret SUBJECT_DESCRIPTION [1] ${PROMPT} | Utwórz obraz przedstawiający a woman with short hair[1], który będzie pasować do opisu: portret a woman with short hair[1] w stylu kreskówki 3D z rozmytym tłem. Urocza postać z uśmiechniętą twarzą, patrząca w obiektyw, w pastelowych kolorach… |
Stylizacja obrazu osoby bez danych wejściowych siatki twarzy | Obraz tematu (maksymalnie 4) | Utwórz STYLE_DESCRIPTION [2] obraz przedstawiający SUBJECT_DESCRIPTION [1], który będzie pasować do opisu: portret SUBJECT_DESCRIPTION [1] STYLE_PROMPT | Utwórz obraz 3d-cartoon style [2] przedstawiający a woman with short hair [1], który będzie pasować do opisu: portret a woman with short hair [1] w stylu kreskówki 3D z rozmytym tłem. Urocza postać z uśmiechniętą twarzą, patrząca w obiektyw, w pastelowych kolorach ... |
Stylizacja obrazu osoby zsiatką twarzy jako danymi wejściowymi |
Obraz tematu (maksymalnie 3) Obraz kontrolny siatki twarzy (1) |
Wygeneruj obraz przedstawiający SUBJECT_DESCRIPTION [1] za pomocą Face mesh from the control image [2]. ${PROMPT} | Wygeneruj obraz przedstawiający the person [1] w stylu face mesh from the control image [2]. Osoba powinna patrzeć prosto przed siebie z neutralnym wyrazem twarzy. Tło powinno być ... |
Stylizacja obrazu osoby zsiatką twarzy jako danymi wejściowymi |
Obraz tematu (maksymalnie 3) Obraz kontrolny siatki twarzy (1) |
Utwórz obraz przedstawiający SUBJECT_DESCRIPTION [1] w pozycji CONTROL_IMAGE [2], który będzie pasować do opisu: portret SUBJECT_DESCRIPTION [1] ${PROMPT} | Utwórz obraz przedstawiający a woman with short hair [1] w pozycji control image [2], który będzie pasować do opisu: portret a woman with short hair [1] w stylu kreskówki 3D z rozmytym tłem. Urocza postać z uśmiechniętą twarzą, patrząca w obiektyw, w pastelowych kolorach… |
Stylizacja obrazu osoby zsiatką twarzy jako danymi wejściowymi |
Obraz tematu (maksymalnie 3) Obraz kontrolny siatki twarzy (1) |
Utwórz obraz STYLE_DESCRIPTION [3] przedstawiający SUBJECT_DESCRIPTION [1] w pozycji CONTROL_IMAGE [2], który będzie pasować do opisu: portret SUBJECT_DESCRIPTION [1] ${PROMPT} | Utwórz obraz 3d-cartoon style [3] przedstawiający a woman with short hair [1] w pozycji control image [2], aby dopasować go do opisu: portret a woman with short hair [1] w stylu kreskówki 3D z rozmytym tłem. Urocza postać z uśmiechniętą twarzą, patrząca w obiektyw, w pastelowych kolorach ... |
Sprawdzone metody i ograniczenia
Jeśli jako motyw wykorzystujesz osobę, zalecamy, aby twarz na zdjęciu referencyjnym miała te cechy:
- jest wyśrodkowany i zajmuje co najmniej połowę całego obrazu;
- jest obracana w widoku z przodu we wszystkich kierunkach (obrót, pochylenie i odchylenie);
- nie jest zasłonięta przez obiekty takie jak okulary przeciwsłoneczne czy maski;
Przypadki użycia
Możliwość dostosowywania obejmuje promptowanie w dowolnym stylu, co może sprawiać wrażenie, że model potrafi więcej, niż został wytrenowany. W sekcjach poniżej opisujemy przewidywane przypadki użycia dostosowywania oraz niewyczerpujące przykłady nieprzewidywanych przypadków użycia.
Zalecamy korzystanie z tej funkcji w przypadkach użycia, do których jest ona przeznaczona, ponieważ model został wytrenowany pod kątem tych przypadków i oczekujemy w nich dobrych wyników. Z kolei jeśli będziesz zmuszać model do wykonywania zadań wykraczających poza jego przeznaczenie, możesz spodziewać się słabych wyników.
Przewidywane przypadki użycia
Poniżej znajdziesz przykłady zastosowań dostosowywania na podstawie tematu:
Stylizowanie zdjęcia osoby.
Stylizuj zdjęcie osoby, zachowując jej wyraz twarzy.
(Niska skuteczność) Umieść produkt, np. kanapę lub ciasteczko, w różnych scenach pod różnymi kątami.
Generowanie odmian produktu, które nie zachowują dokładnych szczegółów.
Stylizuj zdjęcie osoby, zachowując wyraz twarzy.
Przykłady niezamierzonych przypadków użycia
Poniżej znajduje się niepełna lista niezamierzonych przypadków użycia dostosowywania na podstawie podmiotu. Model nie jest trenowany pod kątem tych przypadków użycia i prawdopodobnie będzie dawać słabe wyniki.
Umieść co najmniej 2 osoby w różnych scenach, zachowując ich tożsamość.
Umieść 2 lub więcej osób w różnych scenach, zachowując ich tożsamość i określając styl obrazu wyjściowego za pomocą przykładowego obrazu jako danych wejściowych dla stylu.
Stylizuj zdjęcie przedstawiające co najmniej 2 osoby, zachowując ich tożsamość.
Umieść zwierzaka w różnych scenach, zachowując jego tożsamość.
Stylizuj zdjęcie zwierzaka i przekształć je w rysunek.
Stylizuj zdjęcie zwierzaka i przekształć je w rysunek, zachowując lub określając styl obrazu (np. akwarela).
Umieść zwierzę i osobę w innej scenerii, zachowując ich tożsamość.
Stylizuj zdjęcie zwierzęcia i co najmniej jednej osoby, aby przekształcić je w rysunek.
Umieść 2 produkty w różnych scenach pod różnymi kątami.
Umieść produkt, np. ciasteczko lub kanapę, w różnych scenach, pod różnymi kątami i w określonym stylu obrazu (np. fotorealistycznym z określonymi kolorami, stylami oświetlenia lub animacją).
Umieść produkt w innej scenie, zachowując konkretną kompozycję sceny określoną przez obraz kontrolny.
Umieść 2 produkty w różnych scenach pod różnymi kątami, używając konkretnego obrazu jako danych wejściowych (np. fotorealistycznego z określonymi kolorami, stylami oświetlenia lub animacją).
Umieść 2 produkty w różnych scenach, zachowując konkretną kompozycję sceny określoną przez obraz kontrolny.