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 dla 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.

Do modeli Imagen możesz uzyskać dostęp z aplikacji na Androida za pomocą pakietu SDK Firebase AI Logic. Modele Imagen są dostępne za pomocą obu dostawców interfejsów API Firebase AI Logic: interfejsu Gemini Developer API (zalecanego dla większości programistów) i Vertex AI.

Diagram ilustrujący architekturę integracji logiki AI Firebase do uzyskiwania dostępu do interfejsu API dla programistów Gemini Aplikacja na Androida używa pakietu SDK Firebase na Androida do łączenia się z Firebase. Następnie Firebase wchodzi w interakcję z interfejsem Gemini Developer API, który uzyskuje dostęp do Gemini Pro i Flash w chmurze.
Rysunek 1. Uzyskaj dostęp do modeli Imagen 3 za pomocą Firebase AI Logic.

Eksperymentowanie z promptami

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

Zrzut ekranu z interfejsem Google Cloud Vertex AI Studio, na którym wyświetlają się 4 wygenerowane obrazy dinozaura T-rexa z niebieskim plecakiem w prehistorycznym lesie. Na pasku bocznym po lewej stronie znajdują się opcje nawigacyjne, takie jak Dashboard, Model Garden i Vision, a panel po prawej stronie zawiera parametry ustawień 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 build.gradle te zależności:

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.14.0"))

  // Add the dependency for the Firebase AI Logic library. When using the BoM,
  // you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
}

Generowanie obrazu

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

Parametr generationConfig umożliwia zdefiniowanie promptu wykluczającego, liczby obrazów, formatu wyjściowego obrazu i formatu znaku wodnego. Parametr safetySettings służy do konfigurowania filtrów bezpieczeństwa i filtrów dotyczących osób.

Kotlin

val config = ImagenGenerationConfig {
    numberOfImages = 2,
    aspectRatio = ImagenAspectRatio.LANDSCAPE_16x9,
    imageFormat = ImagenImageFormat.jpeg(compressionQuality = 100),
    addWatermark = false
}

// Initialize the Gemini Developer API backend service
// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
    modelName = "imagen-3.0-generate-002",
    generationConfig = config,
    safetySettings = ImagenSafetySettings(
       safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE,
       personFilterLevel = ImagenPersonFilterLevel.BLOCK_ALL
    )
)

Java

ImagenGenerationConfig config = new ImagenGenerationConfig.Builder()
    .setNumberOfImages(2)
    .setAspectRatio(ImagenAspectRatio.LANDSCAPE_16x9)
    .setImageFormat(ImagenImageFormat.jpeg(100))
    .setAddWatermark(false)
    .build();

// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
ImagenModelFutures model = ImagenModelFutures.from(
    FirebaseAI.ai(backend = GenerativeBackend.googleAI()).imagenModel(
       "imagen-3.0-generate-002",
       config,
       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 = model.generateImages(
  prompt = "An astronaut riding a horse",
)
val image = imageResponse.images.first
val bitmapImage = image.asBitmap()

Java

CompletableFuture<GenerateContentResponse> futureResponse =
    model.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();
}