Generowanie obrazów za pomocą Imagen


Pakiety SDK Vertex AI in Firebase zapewniają dostęp do modeli Imagen 3 (za pomocą Imagen API), dzięki czemu możesz generować obrazy na podstawie prompta tekstowego. Dzięki tej funkcji możesz:

  • generować obrazy na podstawie promptów napisanych w języku naturalnym;
  • generować obrazy w wielu formatach i stylach;
  • Renderowanie tekstu na obrazach

Pamiętaj, że Vertex AI in Firebase nie obsługuje jeszcze wszystkich funkcji dostępnych w modelach Imagen. Więcej informacji znajdziesz w sekcji Obsługiwane funkcje i możliwości na tej stronie.

Przejdź do kodu dla danych wejściowych tylko tekstowych

Zanim zaczniesz

Jeśli jeszcze tego nie zrobisz, przeczytaj przewodnik dla początkujących, w którym znajdziesz instrukcje konfigurowania projektu Firebase, łączenia aplikacji z Firebase, dodawania pakietu SDK, inicjowania usługi Vertex AI i tworzenia wystąpienia ImagenModel.

Upewnij się, że co najmniej używasz tych wersji biblioteki Firebase:
iOS i nowsze: wersja 11.9.0 lub nowsza | Android: wersja 16.2.0 lub nowsza (BoM: wersja 33.10.0 lub nowsza) | Sieć: wersja 11.4.1 lub nowsza | Flutter: wersja 1.4.0 lub nowsza (BoM: wersja 3.8.0 lub nowsza)

Modele, które obsługują tę funkcję

Generowanie obrazów jest obsługiwane przez modele Imagen 3. Wkrótce udostępnimy obsługę generowania obrazów za pomocą modeli Gemini 2.0.

Generowanie obrazów na podstawie danych wejściowych zawierających tylko tekst

Możesz poprosić model Imagen o wygenerowanie obrazów, podając prompt tekstowy. Możesz wygenerować 1 obraz lub wiele obrazów.

Generowanie jednego obrazu na podstawie danych wejściowych zawierających tylko tekst

Zanim spróbujesz użyć tego szablonu, przeczytaj sekcję Zanim zaczniesz w tym przewodniku.

Możesz poprosić model Imagen o wygenerowanie pojedynczego obrazu, podając prompt tekstowy.

Utwórz instancję ImagenModel i wywołaj funkcję 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.');
}

Dowiedz się, jak wybrać model i opcjonalnie lokalizację odpowiednią do przypadku użycia i aplikacji.

Generowanie wielu obrazów na podstawie danych wejściowych zawierających tylko tekst

Zanim spróbujesz użyć tego szablonu, przeczytaj sekcję Zanim zaczniesz w tym przewodniku.

Domyślnie modele Imagen 3 generują tylko 1 obraz na każde żądanie. Możesz jednak poprosić model Imagen o wygenerowanie wielu obrazów na żądanie, podając ImagenGenerationConfig podczas tworzenia instancji ImagenModel.

Utwórz instancję ImagenModel i wywołaj funkcję 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.');
}

Dowiedz się, jak wybrać model i opcjonalnie lokalizację odpowiednią do przypadku użycia i aplikacji.



Obsługiwane funkcje i wymagania

Modele Imagen 3 oferują wiele funkcji związanych z generowaniem obrazów. W tej sekcji opisano obsługiwane opcje przy korzystaniu z modeli w usługach Vertex AI in Firebase.

Obsługiwane funkcje i możliwości

Vertex AI in Firebase obsługuje te funkcje w modelach Imagen 3.

  • generowanie osób i twarzy (pod warunkiem, że Twój projekt Firebase ma zatwierdzanie Google Cloud).

  • generowanie tekstu na wygenerowanych obrazach;

  • Dodawanie znaku wodnego do wygenerowanych obrazów

  • Konfigurowanie parametrów generowania obrazów, takich jak liczba generowanych obrazów, format obrazu i znak wodny.

  • Konfigurowanie ustawień bezpieczeństwa

Vertex AI in Firebase nie obsługuje tych zaawansowanych funkcji modeli Imagen 3.

Pamiętaj, że większość z tych funkcji wymaga umieszczenia na liście zatwierdzonych użytkowników, nawet jeśli używasz modeli Imagen po stronie serwera.

  • funkcje edycji lub manipulacji obrazem, w tym skalowanie obrazu;

  • Dołączanie obrazów do żądania wysyłanego do modelu (np. w przypadku uczenia się z niewielkiej próby)

  • Weryfikowanie cyfrowych znaków wodnych za pomocą pakietów SDK
    Jeśli chcesz sprawdzić, czy obraz zawiera znak wodny, możesz go przesłać do Vertex AI Studio za pomocą karty Media.

  • Generowanie „żywych obrazów” na podstawie tekstu (generowanie plików MP4)

  • Generowanie obrazów przy użyciu wstępnie zdefiniowanego stylu

  • Ustawianie języka tekstu wejściowego

  • Włączenie opcji includeSafetyAttributes, co oznacza, że safetyAttributes.categories i safetyAttributes.scores nie mogą zostać zwrócone.

  • Wyłączenie ulepszania promptów (parametr enhancePrompt), co oznacza, że narzędzie do przeredagowywania promptów oparte na modelu LLM zawsze automatycznie doda więcej szczegółów do podanych promptów, aby dostarczać obrazy o wyższej jakości, które lepiej odzwierciedlają prompt

  • zapisywanie wygenerowanego obrazu bezpośrednio w pliku Google Cloud Storage jako części odpowiedzi modelu (parametru storageUri). Zamiast tego obrazy są zawsze zwracane w odpowiedzi jako bajty obrazu zakodowane w formacie Base64.
    Jeśli chcesz przesłać wygenerowany obraz do Cloud Storage, możesz użyć Cloud Storage for Firebase.

Specyfikacje i ograniczenia

Limity (na żądanie) Imagen 3 Imagen 3 Fast
Maksymalna liczba tokenów wejściowych 480 tokenów 480 tokenów
Maksymalna liczba obrazów wyjściowych 4 obrazy 4 obrazy
Obsługiwane rozdzielczości obrazów wyjściowych (w pikselach)
  • 1024 x 1024 pikseli (stosunek proporcji 1:1)
  • 896 x 1280 (format obrazu 3:4)
  • 1280 x 896 (format obrazu 4:3)
  • 768 x 1408 (format obrazu 9:16)
  • 1408 x 768 (format obrazu 16:9)
  • 1024 x 1024 pikseli (stosunek proporcji 1:1)
  • 896 x 1280 (format obrazu 3:4)
  • 1280 x 896 (format obrazu 4:3)
  • 768 x 1408 (format obrazu 9:16)
  • 1408 x 768 (format obrazu 16:9)



Co jeszcze możesz zrobić?

Dowiedz się, jak kontrolować generowanie treści

Więcej informacji o obsługiwanych modelach

Dowiedz się więcej o modelach dostępnych w różnych przypadkach użycia oraz o ich limitachcenach.


Prześlij opinię o swoich wrażeniach związanych z usługą Vertex AI in Firebase