Firebase AI Logic SDK를 사용하면 텍스트 프롬프트에서 이미지를 생성할 수 있도록 Imagen 모델에 액세스할 수 있습니다 (Imagen API) . 이 기능을 사용하면 다음과 같은 작업을 할 수 있습니다.
- 자연어로 작성된 프롬프트에서 이미지 생성
- 다양한 형식과 스타일로 이미지 생성
- 이미지에 텍스트 렌더링
이 가이드에서는 Imagen을 사용하여 텍스트 프롬프트만 제공하여 이미지를 생성하는 방법을 설명합니다.
하지만 Imagen은 참조 이미지를 기반으로 이미지를 생성할 수도 있습니다. 맞춤설정 기능 (현재 Android 및 Flutter에서만 사용 가능) 요청에서 텍스트 프롬프트와 참조 이미지를 제공하여 모델이 지정된 스타일, 피사체 (예: 제품, 사람 또는 동물) 또는 컨트롤을 기반으로 새 이미지를 생성하도록 안내합니다. 예를 들어 고양이 사진이나 로켓과 달 그림에서 새 이미지를 생성할 수 있습니다.
시작하기 전에
|
Gemini API 제공업체를 클릭하여 이 페이지에서 제공업체별 콘텐츠 및 코드를 확인합니다. |
아직 시작 가이드를 완료하지 않았다면
시작 가이드를 완료하세요. 시작 가이드에서는
Firebase 프로젝트를 설정하고, 앱을 Firebase에 연결하고, SDK를 추가하고,
선택한 API 제공업체의 백엔드 서비스를 초기화하고,
ImagenModel 인스턴스를 만드는 방법을 설명합니다.
이 기능을 지원하는 모델
Gemini Developer API는 최신 안정적인 Imagen 모델을 통한 이미지 생성을 지원합니다. 지원되는 Imagen 모델의 이 제한사항은 액세스하는 방식과 관계없이 적용됩니다. Gemini Developer API.
imagen-4.0-generate-001imagen-4.0-fast-generate-001imagen-4.0-ultra-generate-001imagen-3.0-generate-002
텍스트 전용 입력에서 이미지 생성
텍스트로만 프롬프트를 표시하여 Imagen 모델에 이미지를 생성하도록 요청할 수 있습니다. 이미지 한 개 또는 여러 개를 생성할 수 있습니다.
가로세로 비율 및 이미지 형식과 같은 이미지 생성에 대한 다양한 구성 옵션을 설정할 수도 있습니다.
텍스트 전용 입력에서 이미지 한 개 생성
|
이 샘플을 사용해 보기 전에 이 가이드의
시작하기 전에 섹션을 완료하여 프로젝트와 앱을 설정하세요. 이 섹션에서 선택한 Gemini API 제공업체의 버튼을 클릭하면 이 페이지에 제공업체별 콘텐츠가 표시됩니다. |
텍스트로만 프롬프트를 표시하여 Imagen 모델에 단일 이미지를 생성하도록 요청할 수 있습니다.
ImagenModel 인스턴스를 만들고 generateImages를 호출해야 합니다.
Swift
import FirebaseAILogic
// 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-4.0-generate-001")
// 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
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val model = ai.imagenModel("imagen-4.0-generate-001")
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
val imageResponse = model.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-4.0-generate-001");
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 model that supports your use case
const model = getImagenModel(ai, { model: "imagen-4.0-generate-001" });
// 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 model.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
final model = FirebaseAI.googleAI();
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(model: 'imagen-4.0-generate-001');
// 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.');
}
Unity
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(modelName: "imagen-4.0-generate-001");
// Provide an image generation prompt
var prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);
// Handle the generated image
if (response.Images.Count == 0) {
throw new Exception("No image in the response.");
}
var image = response.Images[0].AsTexture2D();
사용 사례와 앱에 적합한 모델 (선택사항)를 선택하는 방법을 알아보세요.
텍스트 전용 입력에서 이미지 여러 개 생성
|
이 샘플을 사용해 보기 전에 이 가이드의
시작하기 전에 섹션을 완료하여 프로젝트와 앱을 설정하세요. 이 섹션에서 선택한 Gemini API 제공업체의 버튼을 클릭하면 이 페이지에 제공업체별 콘텐츠가 표시됩니다. |
기본적으로 Imagen 모델은 요청당 이미지 하나만 생성합니다.
하지만 Imagen 모델에 요청당 여러 이미지를 생성하도록 요청할 수 있습니다. ImagenGenerationConfig 인스턴스를 만들 때 제공합니다.ImagenModel
ImagenModel 인스턴스를 만들고 generateImages를 호출해야 합니다.
Swift
import FirebaseAILogic
// 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-4.0-generate-001",
// 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
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val model = ai.imagenModel(
modelName = "imagen-4.0-generate-001",
// 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 = model.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-4.0-generate-001",
/* 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 model that supports your use case
const model = getImagenModel(
ai,
{
model: "imagen-4.0-generate-001",
// 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 model.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
final ai = FirebaseAI.googleAI();
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(
model: 'imagen-4.0-generate-001',
// 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.');
}
Unity
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(
modelName: "imagen-4.0-generate-001",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: new ImagenGenerationConfig(numberOfImages: 4)
);
// Provide an image generation prompt
var prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (!string.IsNullOrEmpty(response.FilteredReason)) {
UnityEngine.Debug.Log("Filtered reason: " + response.FilteredReason);
}
// Handle the generated images
var images = response.Images.Select(image => image.AsTexture2D());
사용 사례와 앱에 적합한 모델 (선택사항)를 선택하는 방법을 알아보세요.
지원되는 기능 및 요구사항
Imagen 모델은 이미지 생성과 관련된 다양한 기능을 제공합니다. 이 섹션에서는 모델을 Firebase AI Logic 사용할 때 지원되는 기능을 설명합니다.
지원되는 기능
Firebase AI Logic은 Imagen 모델의 다음 기능을 지원합니다.
생성된 이미지 내에서 사람, 얼굴, 텍스트 생성
Vertex AI Gemini API를 사용할 때 요청에서 이미지 수정 또는 이미지 포함 Vertex AI Gemini API (현재 Android 및 Flutter에서만 사용 가능)
생성된 이미지에 워터마크 추가
디지털 워터마크 확인 Vertex AI Gemini API
를 사용할 때 이미지에 워터마크가 있는지 확인하려면 Vertex AI Studio에 이미지를 업로드하면 됩니다. 미디어 탭을 사용하여이미지 생성 매개변수 구성, 생성된 이미지 수, 가로세로 비율, 워터마크와 같은
안전 설정 구성
Firebase AI Logic은 Imagen 모델의 다음과 같은 고급 기능을 지원하지 않습니다:
프롬프트 재작성기 (
enhancePrompt매개변수) 사용 중지 즉, LLM 기반 프롬프트 재작성 도구는 항상 제공된 프롬프트에 세부정보를 자동으로 추가하여 제공된 프롬프트를 더 잘 반영하는 고품질 이미지를 제공합니다.모델의 응답 (
storageUri매개변수)의 일부로 생성된 이미지를 Google Cloud Storage에 직접 작성 대신 이미지는 항상 응답에서 base64로 인코딩된 이미지 바이트로 반환됩니다.
생성된 이미지를 Cloud Storage에 업로드하려면 Cloud Storage for Firebase를 사용하면 됩니다.
사양 및 제한사항
| 속성 (요청당) | 값 |
|---|---|
| 최대 입력 토큰 수 | 토큰 480개 |
| 최대 출력 이미지 수 | 이미지 4개 |
| 지원되는 출력 이미지 해상도 (픽셀) |
|
또 뭘 할 수 있니?
-
프로덕션 준비를 시작합니다 (프로덕션 체크리스트 참고):
- 무단 클라이언트의 Gemini API 악용을 방지하려면 Firebase App Check 최대한 빨리 Firebase 앱 체크를 설정하세요.
- 통합 Firebase Remote Config 하여 새 앱 버전을 출시하지 않고도 앱의 값 (예: 모델 이름)을 업데이트하세요.
콘텐츠 생성 제어 방법 알아보기
- 프롬프트 설계를 비롯한 권장사항, 전략, 예시 프롬프트를 이해합니다.
- 가로세로 비율, 사람 생성, 워터마크와 같은 Imagen 모델 매개변수 를 구성합니다.
- 안전 설정을 사용하여 유해하다고 간주될 수 있는 응답을 받을 가능성을 조정합니다.
지원되는 모델 자세히 알아보기
다양한 사용 사례에 사용할 수 있는 모델 과 할당량 및 가격을 알아봅니다.의견 보내기 Firebase AI Logic 사용 경험에 관한