Personaliza imágenes según un estilo específico 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 estilo específico con los SDKs de Firebase AI Logic.

Cómo funciona: Proporcionas una instrucción de texto y, al menos, una imagen de referencia que muestre un estilo específico (como un patrón, una textura o un estilo de diseño). El modelo usa estas entradas para generar una imagen nueva basada en el estilo especificado en las imágenes de referencia.

Por ejemplo, puedes generar una imagen nueva de una cocina a partir de una imagen de un catálogo minorista popular que proporciones.

Ir al código



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 de estilo

En el siguiente ejemplo, se muestra una solicitud de personalización de estilo que le pide al modelo que genere una imagen nueva con el estilo de la imagen de referencia proporcionada (en este ejemplo, "La noche estrellada" de Van Gogh).

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 style reference using the reference image.
    val styleReference = ImagenStyleReference(
        image = referenceImage,
        referenceID = 1,
        description = "Van Gogh style"
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the style reference with ID 1.
    val prompt = "A cat flying through outer space, in the Van Gogh style[1]"

    // Use the editImage API to perform the style customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(styleReference),
        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 style reference using the reference image.
ImagenStyleReference subjectReference = new ImagenStyleReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("Van Gogh style")
        .build();

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
String prompt = "A cat flying through outer space, in the Van Gogh style[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 style customization.
// Pass the list of references, the prompt, and the editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(styleReference), 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 style reference using the reference image.
final styleReference = ImagenStyleReference(
  image: referenceImage,
  referenceId: 1,
  description: 'Van Gogh style',
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
final prompt = "A cat flying through outer space, in the Van Gogh style[1]";

try {
  // Use the editImage API to perform the style customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [styleReference],
    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 ImagenStyleReference en el que especificas un ID de referencia para una imagen (y, de manera opcional, una descripción del estilo). Ten en cuenta que varias imágenes pueden tener el mismo ID de referencia (por ejemplo, varias fotos del mismo patrón).

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. Si proporcionas una descripción del tema, también puedes incluirla en la instrucción para que sea más fácil de leer.

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

Caso de uso Imágenes de referencia Plantilla de instrucciones Ejemplo
Estilo del objeto Imagen del sujeto (1 a 4) Genera una imagen en STYLE_DESCRIPTION [1] basada en la siguiente leyenda: IMAGE_DESCRIPTION. Genera una imagen en neon sign style [1] basada en la siguiente leyenda: a sign saying have a great day.
Estilización de imágenes de personas sin entrada de malla facial Imagen del sujeto (1 a 4) Crea una imagen sobre SUBJECT_DESCRIPTION [1] que coincida con la descripción: un retrato de SUBJECT_DESCRIPTION [1]. ${PROMPT} Crea una imagen sobre a woman with short hair[1] para que coincida con la descripción: un retrato de a woman with short hair[1] en estilo de dibujo animado en 3D con 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 malla facial 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 fondo desenfocado. Un personaje lindo y encantador, con una cara sonriente, mirando a la cámara, en tonos 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

Los siguientes son casos de uso previstos para la personalización basada en un estilo:

  • Genera una imagen a partir de una entrada de texto que sigue el estilo específico proporcionado por una imagen de referencia.

  • Alterar la foto de una persona

  • Alterar la foto de una persona y conservar 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 estilo. El modelo no está entrenado para estos casos de uso y es probable que produzca resultados deficientes.

  • Generar una imagen a partir de texto y con una imagen de referencia, con la intención de tener cierto nivel de control de la composición generada a partir de la imagen de referencia

  • Genera una imagen de una persona a partir de una imagen de referencia que muestre a una persona con una expresión facial particular.

  • Colocar a dos personas en una escena diferente, conservar sus identidades y especificar el estilo de la imagen de salida (como una pintura al óleo) con una imagen de referencia

  • Estiliza una foto de una mascota y conviértela en un dibujo, a la vez que conservas o especificas la composición de la imagen.

  • Coloca un producto, como una galleta o un sofá, en diferentes escenas con ángulos distintos y siguiendo un estilo de imagen específico (como fotorrealista con colores, estilos de iluminación o animación específicos).