Personaliza imágenes según un control con Imagen


En esta página, se describe cómo usar la capacidad de personalización de Imagen para editar o generar imágenes basadas en un control especificado con los SDKs de Firebase AI Logic.

Cómo funciona: Proporcionas una instrucción de texto y, al menos, una imagen de referencia de control (como un dibujo o una imagen de borde Canny). El modelo usa estas entradas para generar una imagen nueva basada en las imágenes de control.

Por ejemplo, puedes proporcionarle al modelo un dibujo de una nave espacial y la luna junto con una instrucción de texto para crear una pintura de acuarela basada en el dibujo.

Ir al código

Tipos de imágenes de referencia de control

La imagen de referencia para la personalización controlada puede ser un garabato, una imagen de borde Canny o una malla facial.



Antes de comenzar

Solo está disponible cuando usas Vertex AI Gemini API como tu proveedor de la API.

Si aún no lo hiciste, completa la guía de introducción, en la que se describe cómo configurar tu proyecto de Firebase, conectar tu app a Firebase, agregar el SDK, inicializar el servicio de backend para el proveedor de la API que elijas y crear una instancia de ImagenModel.

Modelos que admiten esta capacidad

Imagen ofrece edición de imágenes a través de su modelo capability:

  • imagen-3.0-capability-001

Ten en cuenta que, para los modelos Imagen, no se admite la ubicación global.

Envía una solicitud de personalización controlada

En el siguiente ejemplo, se muestra una solicitud de personalización controlada que le pide al modelo que genere una imagen nueva basada en la imagen de referencia proporcionada (en este ejemplo, un dibujo del espacio, como un cohete y la Luna). Dado que la imagen de referencia es un boceto o esquema aproximado dibujado a mano, usa el tipo de control CONTROL_TYPE_SCRIBBLE.

Si tu imagen de referencia es una imagen de bordes nítidos o una malla facial, también puedes usar este ejemplo, pero con los siguientes cambios:

Revisa las plantillas de instrucciones más adelante en esta página para obtener información sobre cómo escribir instrucciones y usar imágenes de referencia en ellas.

Swift

La edición de imágenes con modelos de Imagen no se admite en Swift. Vuelve a consultar más adelante este año.

Kotlin

// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun customizeImage() {
    // Initialize the Vertex AI Gemini API backend service
    // Optionally specify the location to access the model (for example, `us-central1`)
    val ai = Firebase.ai(backend = GenerativeBackend.vertexAI(location = "us-central1"))

    // Create an `ImagenModel` instance with an Imagen "capability" model
    val model = ai.imagenModel("imagen-3.0-capability-001")

    // This example assumes 'referenceImage' is a pre-loaded Bitmap.
    // In a real app, this might come from the user's device or a URL.
    val referenceImage: Bitmap = TODO("Load your reference image Bitmap here")

    // Define the subject reference using the reference image.
    val controlReference = ImagenControlReference(
        image = referenceImage,
        referenceID = 1,
        controlType = CONTROL_TYPE_SCRIBBLE
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the subject reference with ID 1.
    val prompt = "A cat flying through outer space arranged like the space scribble[1]"

    // Use the editImage API to perform the controlled customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(controlReference),
        prompt = prompt,
        config = ImagenEditingConfig(
            editSteps = 50 // Number of editing steps, a higher value can improve quality
        )
    )

    // Process the result
}

Java

// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
// Create an `ImagenModel` instance with an Imagen "capability" model
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.vertexAI("us-central1"))
        .imagenModel(
                /* modelName */ "imagen-3.0-capability-001");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap referenceImage = null; // TODO("Load your image Bitmap here");

// Define the subject reference using the reference image.
ImagenControlReference controlReference = new ImagenControlReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setControlType(CONTROL_TYPE_SCRIBBLE)
        .build();

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
String prompt = "A cat flying through outer space arranged like the space scribble[1]";

// Define the editing configuration.
ImagenEditingConfig imagenEditingConfig = new ImagenEditingConfig.Builder()
        .setEditSteps(50) // Number of editing steps, a higher value can improve quality
        .build();

// Use the editImage API to perform the controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(controlReference), prompt, imagenEditingConfig), new FutureCallback<ImagenGenerationResponse>() {
    @Override
    public void onSuccess(ImagenGenerationResponse result) {
        if (result.getImages().isEmpty()) {
            Log.d("TAG", "No images generated");
        }
        Bitmap bitmap = result.getImages().get(0).asBitmap();
        // Use the bitmap to display the image in your UI
    }

    @Override
    public void onFailure(Throwable t) {
        // ...
    }
}, Executors.newSingleThreadExecutor());

Web

La edición de imágenes con modelos Imagen no es compatible con las apps web. Vuelve a consultar más adelante este año.

Dart

import 'dart:typed_data';
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Vertex AI Gemini API backend service
// Optionally specify a location to access the model (for example, `us-central1`)
final ai = FirebaseAI.vertexAI(location: 'us-central1');

// Create an `ImagenModel` instance with an Imagen "capability" model
final model = ai.imagenModel(model: 'imagen-3.0-capability-001');

// This example assumes 'referenceImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List referenceImage = Uint8List(0); // TODO: Load your reference image data here

// Define the control reference using the reference image.
final controlReference = ImagenControlReference(
  image: referenceImage,
  referenceId: 1,
    controlType: ImagenControlType.scribble,
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat flying through outer space arranged like the space scribble[1]";

try {
  // Use the editImage API to perform the controlled customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [controlReference],
    prompt,
    config: ImagenEditingConfig(
      editSteps: 50, // Number of editing steps, a higher value can improve quality
    ),
  );

  // Process the result.
  if (response.images.isNotEmpty) {
    final editedImage = response.images.first.bytes;
    // Use the editedImage (a Uint8List) to display the image, save it, etc.
    print('Image successfully generated!');
  } else {
    // Handle the case where no images were generated.
    print('Error: No images were generated.');
  }
} catch (e) {
  // Handle any potential errors during the API call.
  print('An error occurred: $e');
}

Unity

La edición de imágenes con modelos de Imagen no es compatible con Unity. Vuelve a consultar más adelante este año.

Plantillas de instrucciones

En la solicitud, proporcionas imágenes de referencia (hasta 4 imágenes) definiendo un ImagenControlReference en el que especificas un ID de referencia para una imagen. Ten en cuenta que varias imágenes pueden tener el mismo ID de referencia (por ejemplo, varios bocetos de la misma idea).

Luego, cuando escribas la instrucción, haz referencia a estos IDs. Por ejemplo, usas [1] en la instrucción para hacer referencia a imágenes con el ID de referencia 1.

En la siguiente tabla, se proporcionan plantillas de instrucciones que pueden ser un punto de partida para escribir instrucciones de personalización basadas en un control.

Caso de uso Imágenes de referencia Plantilla de instrucciones Ejemplo
Personalización controlada Mapa de boceto (1) Genera una imagen que se alinee con scribble map [1] para que coincida con la descripción: ${STYLE_PROMPT} ${PROMPT}. Genera una imagen que se alinee con scribble map [1] para que coincida con la descripción: La imagen debe tener el estilo de una pintura al óleo impresionista con pinceladas relajadas. Posee un ambiente iluminado de forma natural y pinceladas notables. Vista lateral de un auto. El automóvil está estacionado sobre una superficie de la ruta mojada y reflectante, con las luces de la ciudad reflejándose en los charcos.
Personalización controlada Imagen de control de Canny (1) Genera una imagen que se alinee con edge map [1] para que coincida con la descripción: ${STYLE_PROMPT} ${PROMPT} Genera una imagen que se alinee con la edge map [1] para que coincida con la descripción: La imagen debe tener el estilo de una pintura al óleo impresionista, con pinceladas relajadas. Posee un ambiente iluminado de forma natural y pinceladas notables. Vista lateral de un automóvil. El automóvil está estacionado sobre una superficie de la ruta mojada y reflectante, con las luces de la ciudad reflejándose en los charcos.
Estilización de imágenes de personas con entrada de FaceMesh Imagen del sujeto (1 a 3)

Imagen de control de FaceMesh (1)
Crea una imagen sobre SUBJECT_DESCRIPTION [1] en la pose de CONTROL_IMAGE [2] para que coincida con la descripción: un retrato de SUBJECT_DESCRIPTION [1] ${PROMPT} Crea una imagen sobre a woman with short hair [1] en la pose de control image [2] para que coincida con la descripción: un retrato de a woman with short hair [1] en estilo de dibujos animados en 3D con un fondo desenfocado. Un personaje lindo y encantador, con una cara sonriente, mirando a la cámara, en tonos pastel…
Estilización de imágenes de personas con entrada de FaceMesh Imagen del sujeto (1 a 3)

Imagen de control de FaceMesh (1)
Crea una imagen de ${STYLE_PROMPT} sobre SUBJECT_DESCRIPTION [1] en la pose de CONTROL_IMAGE [2] para que coincida con la descripción: un retrato de SUBJECT_DESCRIPTION [1] ${PROMPT} Crea una imagen de estilo de dibujo animado en 3D sobre a woman with short hair [1] en la pose de control image [2] para que coincida con la descripción: un retrato de a woman with short hair [1] en estilo de dibujo animado en 3D con un fondo desenfocado. Un personaje lindo y encantador, con una cara sonriente, que mira a la cámara, con un tono de color pastel…



Prácticas recomendadas y limitaciones

Casos de uso

La capacidad de personalización ofrece instrucciones de formato libre, lo que puede dar la impresión de que el modelo puede hacer más de lo que está entrenado para hacer. En las siguientes secciones, se describen los casos de uso previstos para la personalización y ejemplos de casos de uso no previstos (no exhaustivos).

Te recomendamos que uses esta capacidad para los casos de uso previstos, ya que entrenamos el modelo en esos casos de uso y esperamos obtener buenos resultados. Por el contrario, si le pides al modelo que haga cosas fuera de los casos de uso previstos, debes esperar resultados deficientes.

Casos de uso previstos

A continuación, se indican los casos de uso previstos para la personalización en función de un control:

  • Genera una imagen que siga la instrucción y las imágenes de control de borde nítido.

  • Genera una imagen que siga la instrucción y las imágenes de boceto.

  • Estiliza una foto de una persona y conserva su expresión facial.

Ejemplos de casos de uso no previstos

A continuación, se incluye una lista no exhaustiva de casos de uso no previstos para la personalización basada en un control. El modelo no está entrenado para estos casos de uso y es probable que produzca resultados deficientes.

  • Genera una imagen con un estilo especificado en la instrucción.

  • Genera una imagen a partir de texto que sigue un estilo específico proporcionado por una imagen de referencia, con cierto nivel de control sobre la composición de la imagen usando una imagen de control.

  • Genera una imagen a partir de texto que sigue un estilo específico proporcionado por una imagen de referencia, con cierto nivel de control sobre la composición de la imagen a través de un boceto de control.

  • Genera una imagen a partir de texto que sigue un estilo específico proporcionado por la imagen de referencia, con cierto nivel de control sobre la composición de la imagen a través de una imagen de control. La persona de la imagen tiene una expresión facial específica.

  • Estilizar una foto de dos o más personas y conservar sus expresiones faciales

  • Estiliza una foto de una mascota y conviértela en un dibujo. Conserva o especifica la composición de la imagen (por ejemplo, acuarela).