Générer des images avec Imagen 3

Imagen 3 est un modèle de génération d'images. Il peut être utilisé pour générer des avatars personnalisés pour les profils utilisateur ou pour intégrer des composants visuels personnalisés dans des flux d'écran existants afin d'accroître l'engagement des utilisateurs.

Vous pouvez accéder aux modèles Imagen depuis votre application Android à l'aide du SDK Vertex AI in Firebase.

Accéder aux modèles Imagen 3 à l'aide de Vertex AI dans Firebase
Figure 1. Accédez aux modèles Imagen 3 à l'aide de Vertex AI dans Firebase.

Tester des requêtes

Créer les requêtes idéales nécessite souvent plusieurs tentatives. Vous pouvez tester des requêtes d'image dans Vertex AI Studio, un IDE pour la conception et le prototypage de requêtes. Pour obtenir des conseils sur l'amélioration de vos requêtes, consultez le guide des attributs de requête et d'image.

Vertex AI Studio peut vous aider à affiner vos requêtes de génération d'images.
Figure 2. Vertex AI Studio peut vous aider à affiner vos requêtes de génération d'images.

Configurer un projet Firebase et associer votre application

Suivez les étapes décrites dans la documentation Firebase pour ajouter Firebase à votre projet Android.

Ajouter la dépendance Gradle

Ajoutez les dépendances suivantes à votre fichier d'application build.gradle:

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

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

Imagen 3 dans Vertex AI in Firebase nécessite la BOM Firebase 33.10.0 ou une version ultérieure.

Générer une image

Pour générer une image dans votre application Android, commencez par instancier un ImagenModel avec une configuration facultative.

Vous pouvez utiliser le paramètre generationConfig pour définir une invite négative, le nombre d'images, le format de l'image de sortie, le format d'image et ajouter un filigrane. Vous pouvez utiliser le paramètre safetySettings pour configurer les filtres de sécurité et de personne.

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

Une fois votre ImagenModel instanciée, vous pouvez générer des images en appelant 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();
}

Étapes suivantes