Bilder mit Imagen 3 generieren

Imagen 3 ist ein Modell zur Bildgenerierung. Mit dieser Funktion können Sie benutzerdefinierte Avatare für Nutzerprofile erstellen oder personalisierte visuelle Assets in vorhandene Bildschirmflüsse einbinden, um das Nutzer-Engagement zu steigern.

Sie können über das Vertex AI in Firebase SDK von Ihrer Android-App aus auf Imagen-Modelle zugreifen.

Über Vertex AI in Firebase auf Imagen 3-Modelle zugreifen
Abbildung 1: Sie können über Vertex AI in Firebase auf Imagen 3-Modelle zugreifen.

Mit Prompts experimentieren

Das Erstellen der idealen Prompts erfordert oft mehrere Versuche. Sie können mit Bildprompts in Vertex AI Studio experimentieren, einer IDE für das Entwerfen und Prototyping von Prompts. Tipps zur Verbesserung Ihrer Prompts finden Sie im Leitfaden zu Prompt- und Bildattributen.

Mit Vertex AI Studio können Sie Ihre Prompts für die Bildgenerierung optimieren
Abbildung 2: Mit Vertex AI Studio können Sie Ihre Prompts für die Bildgenerierung optimieren.

Firebase-Projekt einrichten und App verknüpfen

Folgen Sie der Anleitung in der Firebase-Dokumentation, um Firebase Ihrem Android-Projekt hinzuzufügen.

Gradle-Abhängigkeit hinzufügen

Fügen Sie der build.gradle-App-Datei die folgenden Abhängigkeiten hinzu:

dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.9.0"))

    implementation("com.google.firebase:firebase-vertexai")
}

Für Imagen 3 in Vertex AI in Firebase ist Firebase BOM 33.10.0 oder höher erforderlich.

Bild erstellen

Wenn Sie ein Bild in Ihrer Android-App generieren möchten, müssen Sie zuerst eine ImagenModel mit einer optionalen Konfiguration instanziieren.

Mit dem Parameter generationConfig können Sie einen Negativvorschlag, die Anzahl der Bilder, das Seitenverhältnis des Ausgabebilds und das Bildformat definieren und ein Wasserzeichen hinzufügen. Mit dem Parameter safetySettings können Sie die Sicherheits- und Personenfilter konfigurieren.

Kotlin

val imagenModel = Firebase.vertexAI.imagenModel(
  modelName = "imagen-3.0-generate-001",
  generationConfig = ImagenGenerationConfig(
    negativePrompt = "frogs",
    numberOfImages = 2,
    aspectRatio = ImagenAspectRatio.LANDSCAPE_16x9,
    imageFormat = ImagenImageFormat.jpeg(compressionQuality = 100),
    addWatermark = false
  ),
  safetySettings = ImagenSafetySettings(
    safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE,
    personFilterLevel = ImagenPersonFilterLevel.BLOCK_ALL
  )
)

Java

GenerativeModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
    "imagen-3.0-generate-001",
    ImagenGenerationConfig.builder()
        .setNegativePrompt("frogs")
        .setNumberOfImages(2)
        .setAspectRatio(ImagenAspectRatio.LANDSCAPE_16x9)
        .setImageFormat(ImagenImageFormat.jpeg(100))
        .setAddWatermark(true)
        .build(),
    ImagenSafetySettings.builder()
        .setSafetyFilterLevel(ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE)
        .setPersonFilterLevel(ImagenPersonFilterLevel.BLOCK_ALL)
        .build()
);

Nachdem ImagenModel instanziiert wurde, können Sie Bilder generieren, indem Sie generateImages aufrufen:

Kotlin

val imageResponse = imagenModel.generateImages(
  prompt = "An astronaut riding a horse",
)
val image = imageResponse.images.first
val bitmapImage = image.asBitmap()

Java

CompletableFuture<GenerateContentResponse> futureResponse =
    imagenModel.generateContent(
        Content.newBuilder()
            .addParts(
                Part.newBuilder()
                    .setText("An astronaut riding a horse")
                    .build())
            .build());

try {
  GenerateContentResponse imageResponse = futureResponse.get();
  List<GeneratedImage> images =
      imageResponse
          .getCandidates(0)
          .getContent()
          .getParts(0)
          .getInlineData()
          .getImagesList();

  if (!images.isEmpty()) {
    GeneratedImage image = images.get(0);
    Bitmap bitmapImage = image.asBitmap();
    // Use bitmapImage
  }
} catch (ExecutionException | InterruptedException e) {
  e.printStackTrace();
}

Nächste Schritte