Generowanie obrazów za pomocą Imagen 3

Imagen 3 to model do generowania obrazów. Można go używać do generowania niestandardowych awatarów na potrzeby profili użytkowników lub do integrowania spersonalizowanych zasobów wizualnych z dotychczasowymi przepływami ekranów w celu zwiększenia zaangażowania użytkowników.

Modele Imagen możesz uzyskać w aplikacji na Androida, korzystając z pakietu SDK Vertex AI w Firebase.

Uzyskiwanie dostępu do modeli Imagen 3 za pomocą Vertex AI w Firebase
Rysunek 1. Uzyskaj dostęp do modeli Imagen 3 za pomocą Vertex AI w Firebase.

Eksperymentowanie z promptami

Utworzenie idealnych promptów często wymaga kilku prób. Możesz eksperymentować z promptami obrazów w Vertex AI Studio, czyli środowisku IDE do projektowania i prototypowania promptów. Wskazówki dotyczące ulepszania promptów znajdziesz w przewodniku promptów i atrybutów obrazów.

Vertex AI Studio może pomóc Ci w dostosowaniu promptów do generowania obrazów
Rysunek 2. Vertex AI Studio może pomóc Ci dopraczać prompty do generowania obrazów.

Konfigurowanie projektu Firebase i łączenie z nim aplikacji

Wykonaj czynności opisane w dokumentacji Firebase, aby dodać Firebase do projektu na Androida.

Dodawanie zależności Gradle

Dodaj do pliku aplikacji build.gradle te zależności:

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

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

Imagen 3 w Vertex AI w Firebase wymaga wersji Firebase BOM 33.10.0 lub nowszej.

Generowanie obrazu

Aby wygenerować obraz w aplikacji na Androida, zacznij od utworzenia instancji interfejsuImagenModel z opcjonalną konfiguracją.

Parametru generationConfig możesz użyć do zdefiniowania promptu negatywnego, liczby obrazów, formatu obrazu wyjściowego i dodania znaku wodnego. Parametr safetySettings służy do konfigurowania filtrów bezpieczeństwa i osoby.

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()
);

Po uruchomieniu obiektu ImagenModel możesz generować obrazy, wywołując funkcję generateImages:

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();
}

Dalsze kroki