Gerar imagens usando o Imagen


Os SDKs Vertex AI in Firebase dão acesso aos modelos Imagen 3 (pelo Imagen API) para que você possa gerar imagens de um comando de texto. Com esse recurso, é possível:

  • Gerar imagens com base em comandos escritos em linguagem natural
  • Gerar imagens em vários formatos e estilos
  • Renderizar texto em imagens

O Vertex AI in Firebase ainda não oferece suporte a todos os recursos disponíveis para os modelos Imagen. Saiba mais em Capacidades e recursos compatíveis mais adiante nesta página.

Ir para o código de entrada somente de texto

Antes de começar

Se ainda não tiver feito isso, conclua o guia de início, que descreve como configurar seu projeto do Firebase, conectar seu app ao Firebase, adicionar o SDK, inicializar o serviço Vertex AI e criar uma instância ImagenModel.

Verifique se você está usando pelo menos estas versões da biblioteca do Firebase:
iOS+: v11.9.0+ | Android: v16.2.0+ (BoM: v33.10.0+) | Web: v11.4.1+ | Flutter: v1.4.0+ (BoM: v3.8.0+)

Modelos compatíveis com esse recurso

A geração de imagens é compatível com os modelos Imagen 3. A geração de imagens por modelos Gemini 2.0 vai ser compatível em breve.

Gerar imagens com base em entradas somente de texto

É possível pedir para um modelo Imagen gerar imagens usando um comando com texto. É possível gerar uma imagem ou várias imagens.

Gerar uma imagem com base em uma entrada somente de texto

Conclua a seção Antes de começar deste guia antes de testar este exemplo.

É possível pedir a um modelo Imagen para gerar uma única imagem com uma solicitação de texto.

Crie uma instância ImagenModel e chame generateImages.

Swift

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.imagenModel(modelName: "imagen-3.0-generate-002")

// Provide an image generation prompt
let prompt = "An astronaut riding a horse"

// To generate an image, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)

// Handle the generated image
guard let image = response.images.first else {
  fatalError("No image in the response.")
}
let uiImage = UIImage(data: image.data)

Kotlin

// Using Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Vertex AI service and create an `ImagenModel` instance
  // Specify an Imagen 3 model that supports your use case
  val imagenModel = Firebase.vertexAI.imagenModel("imagen-3.0-generate-002")

  // Provide an image generation prompt
  val prompt = "An astronaut riding a horse"

  // To generate an image, call `generateImages` with the text prompt
  val imageResponse = imagenModel.generateImages(prompt)

  // Handle the generated image
  val image = imageResponse.images.first()

  val bitmapImage = image.asBitmap()
}

Java

// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
        /* modelName */ "imagen-3.0-generate-002");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// Provide an image generation prompt
String prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
    @Override
    public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> 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

import { initializeApp } from "firebase/app";
import { getVertexAI, getImagenModel } from "firebase/vertexai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Vertex AI service
const vertexAI = getVertexAI(firebaseApp);

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
  vertexAI,
  {
    model: "imagen-3.0-generate-002"
  }
);

// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";

// To generate an image, call `generateImages` with the text prompt
const response = await imagenModel.generateImages(prompt)

// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
  console.log(response.filteredReason);
}

if (response.images.length == 0) {
  throw new Error("No images in the response.")
}

const image = response.images[0];

Dart

import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

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

// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model =
    FirebaseVertexAI.instance.imagenModel(model: 'imagen-3.0-generate-002');

// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';

// To generate an image, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);

if (response.images.isNotEmpty) {
  final image = response.images[0];
  // Process the image
} else {
  // Handle the case where no images were generated
  print('Error: No images were generated.');
}

Saiba como escolher um modelo e, opcionalmente, um local adequado para seu caso de uso e app.

Gerar várias imagens com base em uma entrada somente de texto

Conclua a seção Antes de começar deste guia antes de testar este exemplo.

Por padrão, os modelos Imagen 3 geram apenas uma imagem por solicitação. No entanto, é possível pedir que um modelo Imagen gere várias imagens por solicitação fornecendo um ImagenGenerationConfig ao criar a instância ImagenModel.

Crie uma instância ImagenModel e chame generateImages.

Swift

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.imagenModel(
  modelName: "imagen-3.0-generate-002",
  // Configure the model to generate multiple images for each request
  // See: https://firebase.google.com/docs/vertex-ai/model-parameters
  generationConfig: ImagenGenerationConfig(numberOfImages: 4)
)

// Provide an image generation prompt
let prompt = "An astronaut riding a horse"

// To generate images, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)

// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if let filteredReason = response.filteredReason {
  print(filteredReason)
}

// Handle the generated images
let uiImages =  response.images.compactMap { UIImage(data: $0.data) }

Kotlin

// Using Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Vertex AI service and create an `ImagenModel` instance
  // Specify an Imagen 3 model that supports your use case
  val imagenModel = Firebase.vertexAI.imagenModel(
      modelName = "imagen-3.0-generate-002",
      // Configure the model to generate multiple images for each request
      // See: https://firebase.google.com/docs/vertex-ai/model-parameters
      generationConfig = ImagenGenerationConfig(numberOfImages = 4)
  )

  // Provide an image generation prompt
  val prompt = "An astronaut riding a horse"

  // To generate images, call `generateImages` with the text prompt
  val imageResponse = imagenModel.generateImages(prompt)

  // If fewer images were generated than were requested,
  // then `filteredReason` will describe the reason they were filtered out
  if (imageResponse.filteredReason != null) {
    Log.d(TAG, "FilteredReason: ${imageResponse.filteredReason}")
  }

  for (image in imageResponse.images) {
    val bitmap = image.asBitmap()
    // Use the bitmap to display the image in your UI
  }
}

Java

// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
        .setNumberOfImages(4)
        .build();

// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
        /* modelName */ "imagen-3.0-generate-002",
        /* imageGenerationConfig */ imagenGenerationConfig);

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// Provide an image generation prompt
String prompt = "An astronaut riding a horse";

// To generate images, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
    @Override
    public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> result) {
        // If fewer images were generated than were requested,
        // then `filteredReason` will describe the reason they were filtered out
        if (result.getFilteredReason() != null){
            Log.d("TAG", "FilteredReason: " + result.getFilteredReason());
        }

        // Handle the generated images
        List<ImagenInlineImage> images = result.getImages();
        for (ImagenInlineImage image : images) {
            Bitmap bitmap = image.asBitmap();
            // Use the bitmap to display the image in your UI
        }
    }

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

Web

import { initializeApp } from "firebase/app";
import { getVertexAI, getImagenModel } from "firebase/vertexai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Vertex AI service
const vertexAI = getVertexAI(firebaseApp);

// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
  vertexAI,
  {
    model: "imagen-3.0-generate-002",
    // Configure the model to generate multiple images for each request
    // See: https://firebase.google.com/docs/vertex-ai/model-parameters
    generationConfig: {
      numberOfImages: 4
    }
  }
);

// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";

// To generate images, call `generateImages` with the text prompt
const response = await imagenModel.generateImages(prompt)

// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
  console.log(response.filteredReason);
}

if (response.images.length == 0) {
  throw new Error("No images in the response.")
}

const images = response.images[0];

Dart

import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

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

// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model = FirebaseVertexAI.instance.imagenModel(
  model: 'imagen-3.0-generate-002',
  // Configure the model to generate multiple images for each request
  // See: https://firebase.google.com/docs/vertex-ai/model-parameters
  generationConfig: ImagenGenerationConfig(numberOfImages: 4),
);

// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';

// To generate images, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);

// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason != null) {
  print(response.filteredReason);
}

if (response.images.isNotEmpty) {
  final images = response.images;
  for(var image in images) {
  // Process the image
  }
} else {
  // Handle the case where no images were generated
  print('Error: No images were generated.');
}

Saiba como escolher um modelo e, opcionalmente, um local adequado para seu caso de uso e app.



Recursos e requisitos compatíveis

Os modelos Imagen 3 oferecem muitos recursos relacionados à geração de imagens. Esta seção descreve o que é compatível ao usar os modelos com Vertex AI in Firebase.

Recursos e recursos compatíveis

Vertex AI in Firebase oferece suporte a esses recursos dos modelos Imagen 3.

Vertex AI in Firebase não oferece suporte a esses recursos avançados dos modelos Imagen 3.

A maioria desses recursos exige que você esteja em uma lista de usuários aprovados, mesmo ao usar modelos Imagen do lado do servidor.

  • Recursos de edição ou manipulação de imagens, incluindo o aumento de imagens

  • Incluir imagens na solicitação para o modelo (como para o aprendizado de few-shot)

  • Como verificar marcas d'água digitais usando os SDKs
    Para verificar se uma imagem tem uma marca d'água, faça o upload dela no Vertex AI Studio usando a guia Mídia.

  • Geração de "imagens ao vivo" a partir de texto (geração de MP4)

  • Gerar imagens usando um estilo predefinido

  • Definir o idioma do texto de entrada

  • Ativar includeSafetyAttributes, o que significa que safetyAttributes.categories e safetyAttributes.scores não podem ser retornados

  • Desativação do ajuste de comando (o parâmetro enhancePrompt), o que significa que uma ferramenta de reescrita de comando com base em LLM sempre vai adicionar automaticamente mais detalhes ao comando fornecido para gerar imagens de maior qualidade que reflitam melhor o comando fornecido.

  • Gravar uma imagem gerada diretamente em Google Cloud Storage como parte da resposta do modelo (o parâmetro storageUri). Em vez disso, as imagens são sempre retornadas como bytes de imagem codificados em base64 na resposta.
    Se você quiser fazer upload de uma imagem gerada para Cloud Storage, use Cloud Storage for Firebase.

Especificações e limitações

Limites (por solicitação) Imagem 3 Imagen 3 Fast
Número máximo de tokens de entrada 480 tokens 480 tokens
Número máximo de imagens de saída 4 imagens 4 imagens
Resoluções de imagem de saída compatíveis (pixels)
  • 1024x1024 pixels (proporção de 1:1)
  • 896x1280 (proporção de 3:4)
  • 1280x896 (proporção de 4:3)
  • 768x1408 (proporção de 9:16)
  • 1408x768 (proporção de 16:9)
  • 1024x1024 pixels (proporção de 1:1)
  • 896x1280 (proporção de 3:4)
  • 1280x896 (proporção de 4:3)
  • 768x1408 (proporção de 9:16)
  • 1408x768 (proporção de 16:9)



O que mais você pode fazer?

Saiba como controlar a geração de conteúdo

Saiba mais sobre os modelos compatíveis

Saiba mais sobre os modelos disponíveis para vários casos de uso e as cotas e o preço.


Enviar feedback sobre sua experiência com o Vertex AI in Firebase