Personalizzare le immagini in base a un soggetto specifico utilizzando Imagen


Questa pagina descrive come utilizzare la funzionalità di personalizzazione di Imagen per modificare o generare immagini in base a un soggetto specificato utilizzando gli SDK Firebase AI Logic.

Come funziona: fornisci un prompt di testo e almeno un'immagine di riferimento che mostri un soggetto specifico (ad esempio un prodotto, una persona o un animale domestico). Il modello utilizza questi input per generare una nuova immagine basata sul soggetto specificato nelle immagini di riferimento.

Ad esempio, puoi chiedere al modello di applicare uno stile cartoon a una foto di un bambino o di cambiare il colore di una bicicletta in un'immagine.

Vai al codice



Prima di iniziare

Disponibile solo quando utilizzi Vertex AI Gemini API come provider API.

Se non l'hai ancora fatto, completa la guida introduttiva, che descrive come configurare il progetto Firebase, connettere l'app a Firebase, aggiungere l'SDK, inizializzare il servizio di backend per il provider API scelto e creare un'istanza ImagenModel.

Modelli che supportano questa funzionalità

Imagen offre la modifica delle immagini tramite il modello capability:

  • imagen-3.0-capability-001

Tieni presente che per i modelli Imagen, la posizione global non è supportata.

Inviare una richiesta di personalizzazione dell'oggetto

Il seguente esempio mostra una richiesta di personalizzazione del soggetto che chiede al modello di generare una nuova immagine basata sull'immagine di riferimento fornita (in questo esempio, un gatto). Poiché un gatto è un animale, utilizza il tipo di soggetto ImagenSubjectReferenceType.ANIMAL.

Se il soggetto è una persona o un prodotto, puoi utilizzare anche questo esempio, ma con le seguenti modifiche:

  • Se il soggetto è una persona, utilizza il tipo di soggetto ImagenSubjectReferenceType.PERSON. Puoi inviare questo tipo di richiesta con o senza un'immagine di controllo della mesh del volto per guidare ulteriormente la generazione di immagini.

  • Se l'argomento è un prodotto, utilizza il tipo di argomento ImagenSubjectReferenceType.PRODUCT.

Consulta i modelli di prompt più avanti in questa pagina per scoprire come scrivere prompt e come utilizzare le immagini di riferimento al loro interno.

Swift

La modifica delle immagini con i modelli Imagen non è supportata per Swift. Ricontrolla più tardi quest'anno.

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 subjectReference = ImagenSubjectReference(
        image = referenceImage,
        referenceID = 1,
        description = "cat",
        subjectType = ImagenSubjectReferenceType.ANIMAL
    )

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

    // Use the editImage API to perform the subject customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(subjectReference),
        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.
ImagenSubjectReference subjectReference = new ImagenSubjectReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("cat")
        .setSubjectType(ImagenSubjectReferenceType.ANIMAL)
        .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[1] flying through outer space";

// 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 subject customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(subjectReference), 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 modifica delle immagini con i modelli Imagen non è supportata per le app web. Ricontrolla più tardi quest'anno.

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 subject reference using the reference image.
final subjectReference = ImagenSubjectReference(
  image: referenceImage,
  referenceId: 1,
  description: 'cat',
  subjectType: ImagenSubjectReferenceType.animal,
);

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

try {
  // Use the editImage API to perform the subject customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [subjectReference],
    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 modifica delle immagini con i modelli Imagen non è supportata per Unity. Ricontrolla più tardi quest'anno.

Modelli di prompt

Nella richiesta, fornisci immagini di riferimento (fino a 4 immagini) definendo un ImagenSubjectReference in cui specifichi un ID riferimento per un'immagine (e, facoltativamente, anche una descrizione del soggetto). Tieni presente che più immagini possono avere lo stesso ID riferimento (ad esempio, più foto dello stesso gatto).

Poi, quando scrivi il prompt, fai riferimento a questi ID. Ad esempio, utilizzi [1] nel prompt per fare riferimento alle immagini con l'ID riferimento 1. Se fornisci una descrizione dell'argomento, puoi includerla anche nel prompt in modo che sia più facile da leggere per una persona.

La tabella seguente descrive i modelli di prompt che possono essere un punto di partenza per scrivere prompt per la personalizzazione in base a un soggetto (come un prodotto, una persona o un animale domestico).

Caso d'uso Immagini di riferimento Modello di prompt Esempio
Stylizzazione dell'immagine del prodotto - pubblicità Immagine del soggetto (fino a 4) Crea un'immagine su SUBJECT_DESCRIPTION [1] che corrisponda alla descrizione: ${PROMPT}

Crea un'immagine di Luxe Elixir hair oil, golden liquid in glass bottle [1] in linea con la descrizione: un primo piano con illuminazione intensa della mano di una donna che tiene Luxe Elixir hair oil, golden liquid in glass bottle [1] su uno sfondo bianco puro. La mano della donna è ben illuminata e la messa a fuoco è nitida sulla bottiglia, con una profondità di campo ridotta che sfoca lo sfondo ed enfatizza il prodotto. L'illuminazione è morbida e diffusa, creando un bagliore tenue intorno alla bottiglia e alla mano. La composizione complessiva è semplice ed elegante, mettendo in evidenza l'aspetto lussuoso del prodotto.

Stilizzazione dell'immagine del prodotto - modifica dell'attributo Immagine del soggetto (fino a 4) Genera un'immagine di un SUBJECT_DESCRIPTION ma ${PROMPT}

Genera un'immagine di un Seiko watch [1] ma in blu.

Stilizzazione dell'immagine di una persona senza input della mesh del volto Immagine del soggetto (fino a 4) Crea un'immagine di SUBJECT_DESCRIPTION [1] che corrisponda alla descrizione: un ritratto di SUBJECT_DESCRIPTION [1] ${PROMPT} Crea un'immagine di a woman with short hair[1] che corrisponda alla descrizione: un ritratto di a woman with short hair[1] in stile cartone animato 3D con sfondo sfocato. Un personaggio carino e adorabile, con un volto sorridente, che guarda la fotocamera, tonalità di colore pastello…
Stilizzazione dell'immagine di una persona senza input della mesh del volto Immagine del soggetto (fino a 4) Crea un'immagine STYLE_DESCRIPTION [2] di SUBJECT_DESCRIPTION [1] che corrisponda alla descrizione: un ritratto di SUBJECT_DESCRIPTION [1] STYLE_PROMPT Crea un'immagine di 3d-cartoon style [2] su a woman with short hair [1] che corrisponda alla descrizione: un ritratto di a woman with short hair [1] in stile cartone animato 3D con sfondo sfocato. Un personaggio carino e adorabile, con un volto sorridente, che guarda la fotocamera, tonalità di colore pastello…
Stilizzazione dell'immagine di una persona con input della mesh del volto Immagine del soggetto (fino a 3)

Immagine di controllo della mesh del volto (1)
Genera un'immagine di SUBJECT_DESCRIPTION [1] con Face mesh from the control image [2]. ${PROMPT} Genera un'immagine di the person [1] con face mesh from the control image [2]. La persona deve guardare dritto davanti a sé con un'espressione neutra. Lo sfondo deve essere un ...
Stilizzazione dell'immagine di una persona con input della mesh del volto Immagine del soggetto (fino a 3)

Immagine di controllo della mesh del volto (1)
Crea un'immagine di SUBJECT_DESCRIPTION [1] nella posa di CONTROL_IMAGE [2] in modo che corrisponda alla descrizione: un ritratto di SUBJECT_DESCRIPTION [1] ${PROMPT} Crea un'immagine di a woman with short hair [1] nella posa di control image [2] in linea con la descrizione: un ritratto di a woman with short hair [1] in stile cartone animato 3D con sfondo sfocato. Un personaggio carino e adorabile, con un volto sorridente, che guarda la fotocamera, tonalità di colore pastello…
Stilizzazione dell'immagine di una persona con input della mesh del volto Immagine del soggetto (fino a 3)

Immagine di controllo della mesh del volto (1)
Crea un'immagine di STYLE_DESCRIPTION [3] che SUBJECT_DESCRIPTION [1] sia nella posa di CONTROL_IMAGE [2] in modo che corrisponda alla descrizione: un ritratto di SUBJECT_DESCRIPTION [1] ${PROMPT} Crea un'immagine di 3d-cartoon style [3] che riguarda a woman with short hair [1] nella posa di control image [2] per corrispondere alla descrizione: un ritratto di a woman with short hair [1] in stile cartone animato 3D con sfondo sfocato. Un personaggio carino e adorabile, con un volto sorridente, che guarda la fotocamera, tonalità di colore pastello…



Best practice e limitazioni

Se utilizzi una persona come soggetto, ti consigliamo che il volto nell'immagine di riferimento abbia le seguenti proprietà:

  • Sia centrato e occupi almeno metà dell'intera immagine
  • Viene ruotato nella visuale frontale in tutte le direzioni (rollio, beccheggio e imbardata)
  • Non sia occluso da oggetti, come occhiali da sole o maschere

Casi d'uso

La funzionalità di personalizzazione offre prompt in stile libero, che possono dare l'impressione che il modello possa fare più di quanto sia stato addestrato a fare. Le sezioni seguenti descrivono i casi d'uso previsti per la personalizzazione e alcuni esempi di casi d'uso non previsti.

Ti consigliamo di utilizzare questa funzionalità per i casi d'uso previsti, poiché abbiamo addestrato il modello su questi casi d'uso e ci aspettiamo buoni risultati. Al contrario, se spingi il modello a fare cose al di fuori dei casi d'uso previsti, i risultati saranno scadenti.

Casi d'uso previsti

Di seguito sono riportati casi d'uso previsti�� per la personalizzazione in base a un soggetto�:

  • Stilizzare la foto di una persona.

  • Dai uno stile a una foto di una persona e conserva le sue espressioni facciali.

  • (Successo basso) Inserisci un prodotto, ad esempio un divano o un biscotto, in diverse scene con diverse angolazioni del prodotto.

  • Genera varianti di un prodotto che non conservano i dettagli esatti.

  • Applica uno stile a una foto di una persona, preservando l'espressione facciale.

Esempi di casi d'uso non previsti

Di seguito è riportato un elenco non esaustivo di casi d'uso non intenzionali per la personalizzazione in base a un soggetto. Il modello non è addestrato per questi casi d'uso e probabilmente produrrà risultati scadenti.

  • Posiziona due o più persone in scene diverse preservandone l'identità.

  • Posiziona due o più persone in scene diverse preservandone le identità e specificando lo stile dell'immagine di output utilizzando un'immagine di esempio come input per lo stile.

  • Applica uno stile a una foto di due o più persone preservandone l'identità.

  • Inserisci un animale domestico in scene diverse preservandone l'identità.

  • Dai uno stile a una foto di un animale domestico e trasformala in un disegno.

  • Stilizza la foto di un animale domestico e trasformala in un disegno, mantenendo o specificando lo stile dell'immagine (ad esempio acquerello).

  • Inserisci un animale domestico e una persona in una scena diversa, preservando le identità di entrambi.

  • Dai uno stile a una foto di un animale domestico e di una o più persone e trasformala in un disegno.

  • Inserisci due prodotti in scene diverse con angolazioni diverse.

  • Inserisci un prodotto, ad esempio un biscotto o un divano, in diverse scene con diverse angolazioni del prodotto e seguendo uno stile di immagine specifico (ad esempio fotorealistico con colori, stili di illuminazione o animazioni specifici).

  • Inserisci un prodotto in una scena diversa, mantenendo la composizione specifica della scena come specificato da un'immagine di controllo.

  • Inserisci due prodotti in scene diverse con angolazioni diverse, utilizzando un'immagine specifica come input (ad esempio fotorealistica con colori specifici, stili di illuminazione o animazione).

  • Posiziona due prodotti in scene diverse, preservando la composizione specifica della scena come specificato da un'immagine di controllo.