Genera imágenes con Imagen 3

Imagen 3 es un modelo de generación de imágenes. Se puede usar para generar avatares personalizados para los perfiles de usuario o para integrar recursos visuales personalizados en los flujos de pantallas existentes para aumentar la participación de los usuarios.

Puedes acceder a los modelos de Imagen desde tu app para Android con el SDK de Vertex AI en Firebase.

Accede a los modelos de Imagen 3 con Vertex AI en Firebase
Figura 1: Accede a los modelos de Imagen 3 con Vertex AI en Firebase.

Experimenta con instrucciones

A menudo, crear las instrucciones ideales requiere varios intentos. Puedes experimentar con instrucciones de imágenes en Vertex AI Studio, un IDE para el diseño y el prototipado de instrucciones. Si quieres obtener sugerencias para mejorar tus instrucciones, consulta la guía de atributos de imágenes y mensajes.

Vertex AI Studio puede ayudarte a definir mejor tus instrucciones de generación de imágenes
Figura 2: Vertex AI Studio puede ayudarte a definir mejor tus instrucciones de generación de imágenes.

Configura un proyecto de Firebase y conecta tu app

Sigue los pasos que se indican en la documentación de Firebase para agregar Firebase a tu proyecto de Android.

Agrega la dependencia de Gradle

Agrega las siguientes dependencias al archivo de app build.gradle:

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

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

Imagen 3 en Vertex AI in Firebase requiere la BoM de Firebase 33.10.0 o una posterior.

Genera una imagen

Para generar una imagen en tu app para Android, primero crea una instancia de un ImagenModel con una configuración opcional.

Puedes usar el parámetro generationConfig para definir una instrucción negativa, la cantidad de imágenes, la relación de aspecto de la imagen de salida, el formato de imagen y agregar una marca de agua. Puedes usar el parámetro safetySettings para configurar los filtros de seguridad y de personas.

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

Una vez que se cree una instancia de ImagenModel, puedes generar imágenes llamando a 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();
}

Próximos pasos