Bilder mit Imagen an einen bestimmten Stil anpassen


Auf dieser Seite wird beschrieben, wie Sie die Anpassungsfunktion von Imagen verwenden, um Bilder basierend auf einem angegebenen Stil zu bearbeiten oder zu generieren, indem Sie die Firebase AI Logic-SDKs verwenden.

Funktionsweise: Sie geben einen Text-Prompt und mindestens ein Referenzbild mit einem bestimmten Stil an, z. B. ein Muster, eine Textur oder einen Designstil. Das Modell verwendet diese Eingaben, um ein neues Bild basierend auf dem angegebenen Stil in den Referenzbildern zu generieren.

Sie können beispielsweise ein neues Bild einer Küche auf Grundlage eines Bilds aus einem beliebten Einzelhandelskatalog generieren, den Sie bereitstellen.

Zum Code springen



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 Stilbearbeitung senden

Im folgenden Beispiel wird eine Anfrage zur Stilanpassung gezeigt, in der das Modell aufgefordert wird, ein neues Bild im Stil des bereitgestellten Referenzbilds zu generieren (in diesem Beispiel „Sternennacht“ von Van Gogh).

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 style reference using the reference image.
    val styleReference = ImagenStyleReference(
        image = referenceImage,
        referenceID = 1,
        description = "Van Gogh style"
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the style reference with ID 1.
    val prompt = "A cat flying through outer space, in the Van Gogh style[1]"

    // Use the editImage API to perform the style customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(styleReference),
        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 style reference using the reference image.
ImagenStyleReference subjectReference = new ImagenStyleReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("Van Gogh style")
        .build();

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
String prompt = "A cat flying through outer space, in the Van Gogh style[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 style customization.
// Pass the list of references, the prompt, and the editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(styleReference), 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 style reference using the reference image.
final styleReference = ImagenStyleReference(
  image: referenceImage,
  referenceId: 1,
  description: 'Van Gogh style',
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
final prompt = "A cat flying through outer space, in the Van Gogh style[1]";

try {
  // Use the editImage API to perform the style customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [styleReference],
    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 Request geben Sie Referenzbilder (bis zu 4 Bilder) an, indem Sie ein ImagenStyleReference definieren, in dem Sie eine Referenz-ID für ein Bild (und optional auch eine Stilbeschreibung) angeben. Mehrere Bilder können dieselbe Referenz-ID haben, z. B. mehrere Fotos desselben Musters.

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 finden Sie Prompt-Vorlagen, die als Ausgangspunkt für das Schreiben von Prompts zur stilbasierten Anpassung dienen können.

Anwendungsfall Referenzbilder Prompt-Vorlage Beispiel
Objektstil Bild des Motivs (1–4) Generiere ein Bild in STYLE_DESCRIPTION [1] basierend auf dem folgenden Untertitel: IMAGE_DESCRIPTION. Generiere ein Bild in neon sign style [1] basierend auf dem folgenden Untertitel: a sign saying have a great day.
Stilisierung von Personenbildern ohne Eingabe von Gesichts-Mesh Bild des Motivs (1–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 mit Gesichtserkennung Motivbild (1–3)

Facemesh-Kontrollbild (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 …



Best Practices und Einschränkungen

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 auf Grundlage eines Stils aufgeführt:

  • Ein Bild aus Texteingaben generieren, das dem Stil eines Referenzbilds entspricht.

  • Ein Foto einer Person verändern.

  • Ein Foto einer Person bearbeiten und dabei den Gesichtsausdruck beibehalten

Beispiele für unbeabsichtigte Anwendungsfälle

Im Folgenden finden Sie eine unvollständige Liste von nicht beabsichtigten Anwendungsfällen für die Anpassung auf Grundlage eines Stils. Das Modell ist nicht für diese Anwendungsfälle trainiert und wird wahrscheinlich schlechte Ergebnisse liefern.

  • Generieren Sie ein Bild aus Text und einem Referenzbild, um die Komposition des generierten Bildes anhand des Referenzbildes zu steuern.

  • Ein Bild einer Person aus einem Referenzbild generieren, auf dem eine Person mit einem bestimmten Gesichtsausdruck zu sehen ist.

  • Zwei Personen in eine andere Szene einfügen, ihre Identitäten beibehalten und den Stil des Ausgabebilds (z. B. ein Ölgemälde) mithilfe eines Referenzbilds festlegen.

  • Ein Foto eines Haustiers stilisieren und in eine Zeichnung umwandeln, wobei die Komposition des Bildes beibehalten oder angegeben wird.

  • 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).