Генерируйте изображения с помощью Imagen


Firebase AI Logic SDKs предоставляют вам доступ к моделям Imagen 3 (через Imagen API ), чтобы вы могли генерировать изображения из текстового запроса. С помощью этой возможности вы можете делать следующее:

  • Генерируйте изображения на основе подсказок, написанных на естественном языке.
  • Создавайте изображения в широком диапазоне форматов и стилей
  • Отображение текста в изображениях

Обратите внимание, что Firebase AI Logic пока не поддерживает все функции, доступные для моделей Imagen . Узнайте больше в разделе Поддерживаемые возможности и функции далее на этой странице.

Перейти к коду для ввода только текста

Прежде чем начать

Щелкните своего поставщика API Gemini , чтобы просмотреть специфичный для этого поставщика контент и код на этой странице.

Если вы еще этого не сделали, ознакомьтесь с руководством по началу работы , в котором описывается, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать внутреннюю службу для выбранного поставщика API и создать экземпляр ImagenModel .

Модели, поддерживающие эту возможность

Генерация изображений поддерживается моделями Imagen 3 .

Обратите внимание, что Firebase AI Logic также поддерживает генерацию изображений с помощью моделей Gemini — документация появится скоро!

Генерация изображений из текстового ввода

Вы можете попросить модель Imagen сгенерировать изображения, используя текстовые подсказки. Вы можете сгенерировать одно изображение или несколько изображений .

Сгенерировать одно изображение из текстового ввода

Прежде чем приступить к работе с этим примером, выполните действия, описанные в разделе «Перед началом работы» данного руководства, чтобы настроить свой проект и приложение.
В этом разделе вы также нажмете кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, специфичный для этого поставщика .

Вы можете попросить модель Imagen сгенерировать одно изображение, отправив ей текстовую подсказку.

Обязательно создайте экземпляр ImagenModel и вызовите generateImages .

Быстрый


import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())


// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.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 this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Gemini Developer API backend service
  // Create an `ImagenModel` instance with an Imagen model that supports your use case
  val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).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 Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI()).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 { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// 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 Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });


// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(ai, { 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_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 Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model =
  FirebaseAI.googleAI().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.');
}

Единство

Использование Imagen пока не поддерживается для Unity, но проверьте позже!

Узнайте, как выбрать модель , подходящую для вашего варианта использования и приложения.

Генерация нескольких изображений из текстового ввода

Прежде чем приступить к работе с этим примером, выполните действия, описанные в разделе «Перед началом работы» данного руководства, чтобы настроить свой проект и приложение.
В этом разделе вы также нажмете кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, специфичный для этого поставщика .

По умолчанию модели Imagen 3 генерируют только одно изображение на запрос. Однако вы можете попросить модель Imagen генерировать несколько изображений на запрос, предоставив ImagenGenerationConfig при создании экземпляра ImagenModel .

Обязательно создайте экземпляр ImagenModel и вызовите generateImages .

Быстрый


import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())


// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.imagenModel(
  modelName: "imagen-3.0-generate-002",
  // Configure the model to generate multiple images for each request
  // See: https://firebase.google.com/docs/ai-logic/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 this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Gemini Developer API backend service
  // Create an `ImagenModel` instance with an Imagen model that supports your use case
  val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
      modelName = "imagen-3.0-generate-002",
      // Configure the model to generate multiple images for each request
      // See: https://firebase.google.com/docs/ai-logic/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/ai-logic/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
        .setNumberOfImages(4)
        .build();

// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI()).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 { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// 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 Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });


// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
  ai,
  {
    model: "imagen-3.0-generate-002",
    // Configure the model to generate multiple images for each request
    // See: https://firebase.google.com/docs/ai-logic/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_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 Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model =
  FirebaseAI.googleAI().imagenModel(
    model: 'imagen-3.0-generate-002',
    // Configure the model to generate multiple images for each request
    // See: https://firebase.google.com/docs/ai-logic/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.');
}

Единство

Использование Imagen пока не поддерживается для Unity, но проверьте позже!

Узнайте, как выбрать модель , подходящую для вашего варианта использования и приложения.



Поддерживаемые функции и требования

Модели Imagen 3 предлагают множество функций, связанных с генерацией изображений. В этом разделе описывается, что поддерживается при использовании моделей с Firebase AI Logic .

Поддерживаемые возможности и функции

Firebase AI Logic поддерживает эти функции моделей Imagen 3 .

  • Генерация людей и лиц (при условии, что ваш проект Firebase одобрен Google Cloud )

  • Генерация текста внутри сгенерированных изображений

  • Добавление водяного знака к сгенерированным изображениям

  • Настройка параметров генерации изображений , таких как количество генерируемых изображений, соотношение сторон и водяные знаки

  • Настройка параметров безопасности

Firebase AI Logic не поддерживает эти расширенные функции моделей Imagen 3 .

Обратите внимание, что для большинства этих функций требуется наличие в списке одобренных пользователей даже при использовании моделей Imagen на стороне сервера.

  • Функции редактирования и обработки изображений, включая масштабирование изображений

  • Включение изображений в запрос к модели (например, для обучения по нескольким снимкам)

  • Проверка цифровых водяных знаков с использованием SDK
    Если вы хотите проверить, есть ли на изображении водяной знак, вы можете загрузить изображение в Vertex AI Studio, используя вкладку «Медиа» .

  • Генерация «живых изображений» из текста (генерация MP4)

  • Создание изображений с использованием предопределенного стиля

  • Установка языка вводимого текста

  • Включение includeSafetyAttributes означает, что safetyAttributes.categories и safetyAttributes.scores не могут быть возвращены

  • Отключение улучшения подсказок (параметр enhancePrompt ), что означает, что инструмент перезаписи подсказок на основе LLM всегда будет автоматически добавлять больше деталей к предоставленной подсказке, чтобы предоставлять изображения более высокого качества, которые лучше отражают предоставленную подсказку

  • Запись сгенерированного изображения непосредственно в Google Cloud Storage как часть ответа от модели (параметр storageUri ). Вместо этого изображения всегда возвращаются в ответе как байты изображения, закодированные в base64.
    Если вы хотите загрузить сгенерированное изображение в Cloud Storage , вы можете использовать Cloud Storage for Firebase .

Характеристики и ограничения

Лимиты (по запросу) Изображение 3 Imagen 3 Быстрый
Максимальное количество входных токенов 480 токенов 480 токенов
Максимальное количество выходных изображений 4 изображения 4 изображения
Поддерживаемые разрешения выходного изображения (пиксели)
  • 1024x1024 пикселей (соотношение сторон 1:1)
  • 896x1280 (соотношение сторон 3:4)
  • 1280x896 (соотношение сторон 4:3)
  • 768x1408 (соотношение сторон 9:16)
  • 1408x768 (соотношение сторон 16:9)
  • 1024x1024 пикселей (соотношение сторон 1:1)
  • 896x1280 (соотношение сторон 3:4)
  • 1280x896 (соотношение сторон 4:3)
  • 768x1408 (соотношение сторон 9:16)
  • 1408x768 (соотношение сторон 16:9)



Что еще можно сделать?

Узнайте, как контролировать генерацию контента

Узнайте больше о поддерживаемых моделях

Узнайте о моделях, доступных для различных вариантов использования , а также об их квотах и ​​ценах .


Оставьте отзыв о своем опыте использования Firebase AI Logic