Na tej stronie dowiesz się, jak korzystać z funkcji dostosowywania w Imagen, aby edytować lub generować obrazy na podstawie określonego elementu sterującego za pomocą pakietów SDK Firebase AI Logic.
Jak to działa: podajesz prompt tekstowy i co najmniej 1 kontrolny obraz referencyjny (np. rysunek lub obraz z wykrytymi krawędziami Canny). Model wykorzystuje te dane wejściowe do wygenerowania nowego obrazu na podstawie obrazów kontrolnych.
Możesz na przykład przesłać modelowi rysunek rakiety i księżyca wraz z promptem tekstowym, aby utworzyć na jego podstawie obraz akwarelowy.
Typy obrazów referencyjnych dotyczących sterowania
Obrazem referencyjnym do sterowanego dostosowywania może być bazgroł, obraz z wykrytymi krawędziami lub siatka twarzy.
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 żądania kontrolowanego dostosowania
Poniższy przykład pokazuje kontrolowane żądanie dostosowania, w którym model jest proszony o wygenerowanie nowego obrazu na podstawie podanego obrazu referencyjnego (w tym przykładzie jest to rysunek przedstawiający kosmos, np. rakietę i księżyc). Obraz referencyjny to szkic lub kontur narysowany odręcznie, dlatego używa typu sterowania CONTROL_TYPE_SCRIBBLE
.
Jeśli obraz referencyjny to obraz uzyskany z użyciem algorytmu wykrywania krawędzi Canny'ego lub siatka twarzy, możesz też użyć tego przykładu, ale z tymi zmianami:
Jeśli obraz referencyjny jest obrazem uzyskanym z użyciem algorytmu wykrywania krawędzi Canny'ego, użyj typu elementu sterującego
CONTROL_TYPE_CANNY
.Jeśli obrazem referencyjnym jest siatka twarzy, użyj typu sterowania
CONTROL_TYPE_FACE_MESH
. Ta funkcja może być używana tylko w przypadku dostosowywania tematów dotyczących osób.
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 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
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 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
Edytowanie obrazów za pomocą modeli Imagen nie jest obsługiwane w przypadku Unity. Sprawdź ponownie w późniejszym terminie.
Szablony promptów
W żądaniu podajesz obrazy referencyjne (maksymalnie 4 obrazy), definiując element ImagenControlReference
, w którym określasz identyfikator referencyjny obrazu.
Pamiętaj, że wiele obrazów może mieć ten sam identyfikator odniesienia (np. kilka szkiców tego samego pomysłu).
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
.
W tabeli poniżej znajdziesz szablony promptów, które mogą stanowić punkt wyjścia do pisania promptów na potrzeby dostosowywania na podstawie elementu sterującego.
Przypadek użycia | Obrazy referencyjne | Szablon prompta | Przykład |
---|---|---|---|
Kontrolowane dostosowywanie | Mapa odręczna (1) | Wygeneruj obraz zgodny z scribble map [1] pasujący do opisu: ${STYLE_PROMPT} ${PROMPT}. | Wygeneruj obraz zgodny z scribble map [1], aby pasował do opisu: Obraz powinien być w stylu impresjonistycznego obrazu olejnego z delikatnymi pociągnięciami pędzla. Ma naturalne oświetlenie i widoczne pociągnięcia pędzla. Widok z boku samochodu. Samochód jest zaparkowany na mokrej, odbijającej światło nawierzchni drogi, a światła miasta odbijają się w kałużach. |
Kontrolowane dostosowywanie | Obraz kontrolny Canny (1) | Wygeneruj obraz zgodny z edge map [1], aby pasował do opisu: ${STYLE_PROMPT} ${PROMPT} | Wygeneruj obraz zgodny z edge map [1], który będzie pasować do opisu: Obraz powinien być w stylu impresjonistycznego obrazu olejnego z delikatnymi pociągnięciami pędzla. Ma naturalne oświetlenie i widoczne pociągnięcia pędzla. Widok z boku samochodu. Samochód jest zaparkowany na mokrej, odbijającej światło nawierzchni drogi, a światła miasta odbijają się w kałużach. |
Stylizacja obrazu osoby z użyciem danych wejściowych FaceMesh |
Obraz tematu (1–3) Obraz kontrolny FaceMesh (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 z użyciem danych wejściowych FaceMesh |
Obraz tematu (1–3) Obraz kontrolny FaceMesh (1) |
Utwórz obraz ${STYLE_PROMPT} przedstawiający SUBJECT_DESCRIPTION [1] w pozycji CONTROL_IMAGE [2], aby pasował do opisu: portret SUBJECT_DESCRIPTION [1] ${PROMPT} | Utwórz obraz w stylu kreskówki 3D 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 ... |
Sprawdzone metody i ograniczenia
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 grupy kontrolnej:
Wygeneruj obraz zgodny z promptem i obrazami kontrolnymi uzyskanymi z użyciem algorytmu wykrywania krawędzi Canny'ego.
Wygeneruj obraz zgodny z promptem i obrazami z bazgrołami.
Stylizuj zdjęcie osoby, zachowując wyraz twarzy.
Przykłady niezamierzonych przypadków użycia
Poniżej znajdziesz niepełną listę niezamierzonych przypadków użycia dostosowywania na podstawie elementu sterującego. Model nie jest trenowany pod kątem tych przypadków użycia i prawdopodobnie będzie dawać słabe wyniki.
Generowanie obrazu w stylu określonym w prompcie.
Generuj obrazy na podstawie tekstu w określonym stylu, który jest podany na obrazie referencyjnym. Możesz też kontrolować kompozycję obrazu za pomocą obrazu kontrolnego.
Generuj obraz na podstawie tekstu w określonym stylu podanym przez obraz referencyjny, z pewnym poziomem kontroli nad kompozycją obrazu za pomocą szkicu kontrolnego.
Generuj obraz na podstawie tekstu w określonym stylu, który jest podany na obrazie referencyjnym. Możesz też kontrolować kompozycję obrazu za pomocą obrazu kontrolnego. Osoba na zdjęciu ma określony wyraz twarzy.
Stylizuj zdjęcie co najmniej 2 osób i zachowaj ich mimikę.
Stylizuj zdjęcie zwierzaka i przekształć je w rysunek. Zachowaj lub określ kompozycję obrazu (np. akwarela).