Auf dieser Seite wird beschrieben, wie Sie die Anpassungsfunktion von Imagen verwenden, um Bilder basierend auf einem angegebenen Motiv zu bearbeiten oder zu generieren. Dazu nutzen Sie die Firebase AI Logic-SDKs.
Funktionsweise: Sie geben einen Text-Prompt und mindestens ein Referenzbild an, auf dem ein bestimmtes Motiv zu sehen ist, z. B. ein Produkt, eine Person oder ein Tier. Das Modell verwendet diese Eingaben, um ein neues Bild basierend auf dem angegebenen Motiv in den Referenzbildern zu generieren.
Sie können das Modell beispielsweise bitten, ein Foto eines Kindes in einen Cartoon zu verwandeln oder die Farbe eines Fahrrads auf einem Bild zu ändern.
Hinweis
Nur verfügbar, wenn Sie Vertex AI Gemini API als API-Anbieter verwenden. |
Falls noch nicht geschehen, folgen Sie dem Startleitfaden. Darin wird beschrieben, wie Sie Ihr Firebase-Projekt einrichten, Ihre App mit Firebase verbinden, das SDK hinzufügen, den Backend-Dienst für den von Ihnen ausgewählten API-Anbieter initialisieren und eine ImagenModel
-Instanz erstellen.
Modelle, die diese Funktion unterstützen
Imagen bietet Bildbearbeitung über das capability
-Modell:
imagen-3.0-capability-001
Bei Imagen-Modellen wird der Speicherort global
nicht unterstützt.
Anfrage zur Anpassung von Themen senden
Im folgenden Beispiel sehen Sie eine Anfrage zur Anpassung des Motivs, in der das Modell aufgefordert wird, ein neues Bild basierend auf dem bereitgestellten Referenzbild (in diesem Beispiel eine Katze) zu generieren. Da eine Katze ein Tier ist, wird der Betrefftyp ImagenSubjectReferenceType.ANIMAL
verwendet.
Wenn es sich bei Ihrem Motiv um eine Person oder ein Produkt handelt, können Sie dieses Beispiel auch verwenden, müssen aber die folgenden Änderungen vornehmen:
Wenn es sich bei Ihrem Thema um eine Person handelt, verwenden Sie den Thementyp
ImagenSubjectReferenceType.PERSON
. Sie können diese Art von Anfrage mit oder ohne Kontrollbild für das Gesichts-Mesh senden, um die Bildgenerierung weiter zu steuern.Wenn es sich bei Ihrem Thema um ein Produkt handelt, verwenden Sie den Thementyp
ImagenSubjectReferenceType.PRODUCT
.
Weiter unten auf dieser Seite finden Sie Prompt-Vorlagen, mit denen Sie lernen können, wie Sie Prompts schreiben und Referenzbilder darin verwenden.
Swift
Die Bildbearbeitung mit Imagen-Modellen wird für Swift nicht unterstützt. Schauen Sie später in diesem Jahr noch einmal vorbei.
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
Die Bildbearbeitung mit Imagen-Modellen wird für Web-Apps nicht unterstützt. Schauen Sie später in diesem Jahr noch einmal vorbei.
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');
}
Einheit
Die Bildbearbeitung mit Imagen-Modellen wird für Unity nicht unterstützt. Schauen Sie später in diesem Jahr noch einmal vorbei.
Prompt-Vorlagen
Im Antrag geben Sie Referenzbilder (bis zu 4 Bilder) an, indem Sie ein ImagenSubjectReference
definieren, in dem Sie eine Referenz-ID für ein Bild (und optional auch eine Beschreibung des Motivs) angeben. Mehrere Bilder können dieselbe Referenz-ID haben, z. B. mehrere Fotos derselben Katze.
Beim Schreiben des Prompts verweisen Sie dann auf diese IDs. Sie verwenden beispielsweise [1]
im Prompt, um auf Bilder mit der Referenz-ID 1
zu verweisen. Wenn Sie eine Beschreibung des Motivs angeben, können Sie diese auch in den Prompt aufnehmen, damit er für Menschen leichter zu lesen ist.
In der folgenden Tabelle werden Prompt-Vorlagen beschrieben, die als Ausgangspunkt für das Schreiben von Prompts zur Anpassung auf Grundlage eines Themas (z. B. ein Produkt, eine Person oder ein Tier) dienen können.
Anwendungsfall | Referenzbilder | Prompt-Vorlage | Beispiel |
---|---|---|---|
Stilisierung von Produktbildern – Anzeige | Bild des Motivs (bis zu 4) | Erstelle ein Bild zum Thema SUBJECT_DESCRIPTION [1], das der Beschreibung ${PROMPT} entspricht. |
Erstelle ein Bild von Luxe Elixir hair oil, golden liquid in glass bottle [1], das der folgenden Beschreibung entspricht: Eine Nahaufnahme einer Frauenhand, die Luxe Elixir hair oil, golden liquid in glass bottle [1] vor einem rein weißen Hintergrund hält. Die Hand der Frau ist gut beleuchtet und die Flasche ist scharf fokussiert. Die geringe Schärfentiefe lässt den Hintergrund verschwimmen und betont das Produkt. Die Beleuchtung ist weich und diffus und erzeugt einen subtilen Schein um die Flasche und die Hand. Die Gesamtkomposition ist schlicht und elegant und unterstreicht die luxuriöse Ausstrahlung des Produkts. |
Produktbild-Stilisierung – Attributänderung | Bild des Motivs (bis zu 4) | Generiere ein Bild von einem SUBJECT_DESCRIPTION, aber ${PROMPT} |
Generiere ein Bild von einem Seiko watch [1], aber in Blau. |
Stilisierung von Personenbildern ohne Eingabe von Gesichts-Mesh | Bild des Motivs (bis zu 4) | Erstelle ein Bild von SUBJECT_DESCRIPTION [1], das der Beschreibung entspricht: ein Porträt von SUBJECT_DESCRIPTION [1] ${PROMPT} | Erstelle ein Bild von a woman with short hair[1], das der Beschreibung entspricht: ein Porträt von a woman with short hair[1] im 3D-Cartoon-Stil mit verschwommenem Hintergrund. Eine niedliche und liebenswerte Figur, mit einem lächelnden Gesicht, die in die Kamera schaut, Pastellfarben … |
Stilisierung von Personenbildern ohne Eingabe von Gesichts-Mesh | Bild des Motivs (bis zu 4) | Erstelle ein STYLE_DESCRIPTION [2]-Bild von SUBJECT_DESCRIPTION [1], das der Beschreibung entspricht: ein Porträt von SUBJECT_DESCRIPTION [1] STYLE_PROMPT | Erstelle ein 3d-cartoon style [2]-Bild von a woman with short hair [1], das der Beschreibung entspricht: ein Porträt von a woman with short hair [1] im 3D-Cartoonstil mit verschwommenem Hintergrund. Eine niedliche und liebenswerte Figur mit einem lächelnden Gesicht, die in die Kamera schaut, Pastellfarben … |
Stilisierung von Personenbildern mit Gesichts-Mesh-Eingabe |
Motivbild (bis zu 3) Kontrollbild für das Gesichts-Mesh (1) |
Generiere ein Bild von SUBJECT_DESCRIPTION [1] mit dem Face mesh from the control image [2]. ${PROMPT} | Generiere ein Bild von the person [1] mit der face mesh from the control image [2]. Die Person sollte mit einem neutralen Gesichtsausdruck geradeaus blicken. Der Hintergrund sollte ... |
Stilisierung von Personenbildern mit Gesichts-Mesh-Eingabe |
Motivbild (bis zu 3) Kontrollbild für das Gesichts-Mesh (1) |
Erstelle ein Bild von SUBJECT_DESCRIPTION [1] in der Pose von CONTROL_IMAGE [2], das der Beschreibung entspricht: ein Porträt von SUBJECT_DESCRIPTION [1] ${PROMPT} | Erstelle ein Bild von a woman with short hair [1] in der Pose von control image [2], das der Beschreibung entspricht: ein Porträt von a woman with short hair [1] im 3D-Cartoonstil mit verschwommenem Hintergrund. Eine niedliche und liebenswerte Figur mit einem lächelnden Gesicht, die in die Kamera schaut, Pastellfarben … |
Stilisierung von Personenbildern mit Gesichts-Mesh-Eingabe |
Motivbild (bis zu 3) Kontrollbild für das Gesichts-Mesh (1) |
Erstelle ein STYLE_DESCRIPTION [3]-Bild von SUBJECT_DESCRIPTION [1] in der Pose des CONTROL_IMAGE [2], das der Beschreibung entspricht: ein Porträt von SUBJECT_DESCRIPTION [1] ${PROMPT} | Erstelle ein 3d-cartoon style [3]-Bild von a woman with short hair [1] in der Pose des control image [2], das der Beschreibung entspricht: ein Porträt von a woman with short hair [1] im 3D-Cartoonstil mit verschwommenem Hintergrund. Eine niedliche und liebenswerte Figur mit einem lächelnden Gesicht, die in die Kamera schaut, Pastellfarben … |
Best Practices und Einschränkungen
Wenn Sie eine Person als Motiv verwenden, sollte das Gesicht im Referenzbild die folgenden Eigenschaften haben:
- Das Motiv ist zentriert und nimmt mindestens die Hälfte des gesamten Bildes ein.
- Wird in der Frontansicht in alle Richtungen gedreht (Rollen, Neigen und Gieren)
- Nicht durch Objekte wie Sonnenbrillen oder Masken verdeckt
Anwendungsfälle
Die Anpassungsfunktion bietet die Möglichkeit, Prompts kostenlos zu formulieren. Dadurch kann der Eindruck entstehen, dass das Modell mehr kann, als es gelernt hat. In den folgenden Abschnitten werden vorgesehene Anwendungsfälle für die Anpassung sowie Beispiele für nicht vorgesehene Anwendungsfälle beschrieben.
Wir empfehlen, diese Funktion für die vorgesehenen Anwendungsfälle zu verwenden, da wir das Modell für diese Anwendungsfälle trainiert haben und gute Ergebnisse erwarten. Wenn Sie das Modell hingegen für Dinge verwenden, die nicht dem vorgesehenen Anwendungsfall entsprechen, sollten Sie mit schlechten Ergebnissen rechnen.
Vorgesehene Anwendungsfälle
Im Folgenden sind vorgesehene Anwendungsfälle für die Anpassung basierend auf einem Thema aufgeführt:
Ein Foto einer Person stilisieren
Ein Foto einer Person stilisieren und dabei den Gesichtsausdruck der Person beibehalten.
(Geringer Erfolg) Platzieren Sie ein Produkt wie ein Sofa oder einen Keks in verschiedenen Szenen mit unterschiedlichen Produktwinkeln.
Varianten eines Produkts generieren, bei denen nicht alle Details beibehalten werden.
Ein Foto einer Person stilisieren, ohne den Gesichtsausdruck zu verändern.
Beispiele für unbeabsichtigte Anwendungsfälle
Im Folgenden finden Sie eine unvollständige Liste von nicht beabsichtigten Anwendungsfällen für die Anpassung basierend auf einem Thema. Das Modell ist nicht für diese Anwendungsfälle trainiert und wird wahrscheinlich schlechte Ergebnisse liefern.
Zwei oder mehr Personen in verschiedenen Szenen platzieren, ohne ihre Identitäten zu verändern
Zwei oder mehr Personen in verschiedenen Szenen platzieren, dabei ihre Identitäten beibehalten und den Stil des Ausgabebilds mit einem Beispielbild als Eingabe für den Stil festlegen.
Ein Foto von zwei oder mehr Personen stilisieren, ohne ihre Identitäten zu verändern
Haustiere in verschiedenen Szenen platzieren, ohne ihre Identität zu verändern
Ein Foto eines Haustiers stilisieren und in eine Zeichnung umwandeln
Ein Foto eines Haustiers in eine Zeichnung umwandeln und dabei den Stil des Bildes beibehalten oder festlegen (z. B. Aquarell).
Ein Haustier und eine Person in eine andere Szene einfügen, wobei die Identitäten beider erhalten bleiben.
Ein Foto eines Haustiers und einer oder mehrerer Personen stilisieren und in eine Zeichnung umwandeln
Platzieren Sie zwei Produkte in verschiedenen Szenen mit unterschiedlichen Produktansichten.
Platzieren Sie ein Produkt wie einen Keks oder ein Sofa in verschiedenen Szenen mit unterschiedlichen Produktansichten und in einem bestimmten Bildstil (z. B. fotorealistisch mit bestimmten Farben, Beleuchtungsarten oder Animationen).
Ein Produkt in eine andere Szene einfügen, wobei die spezifische Komposition der Szene, wie durch ein Kontrollbild angegeben, beibehalten wird.
Platzieren Sie zwei Produkte in verschiedenen Szenen mit unterschiedlichen Produktansichten und verwenden Sie dabei ein bestimmtes Bild als Eingabe (z. B. fotorealistisch mit bestimmten Farben, Beleuchtungsstilen oder Animationen).
Zwei Produkte in unterschiedliche Szenen einfügen, wobei die spezifische Komposition der Szene gemäß einem Kontrollbild beibehalten wird.