Firebase AI Logic SDK를 사용하면 Imagen API를 통해 Imagen 3 모델에 액세스하여 텍스트 프롬프트에서 이미지를 생성할 수 있습니다. 이 기능을 사용하면 다음과 같은 작업을 할 수 있습니다.
- 자연어로 작성된 프롬프트에서 이미지 생성
- 다양한 형식과 스타일로 이미지 생성
- 이미지에 텍스트 렌더링
Firebase AI Logic는 아직 Imagen 모델에서 사용할 수 있는 모든 기능을 지원하지 않습니다. 이 페이지의 뒷부분에 있는 지원되는 기능 및 기능에서 자세히 알아보세요.
시작하기 전에
Gemini API 제공업체를 클릭하여 이 페이지에서 제공업체별 콘텐츠와 코드를 확인합니다. |
아직 완료하지 않았다면 Firebase 프로젝트를 설정하고, 앱을 Firebase에 연결하고, SDK를 추가하고, 선택한 API 제공업체의 백엔드 서비스를 초기화하고, ImagenModel
인스턴스를 만드는 방법을 설명하는 시작 가이드를 완료하세요.
이 기능을 지원하는 모델
이미지 생성은 Imagen 3 모델에서 지원됩니다.
Firebase AI Logic은 Gemini 모델의 이미지 생성도 지원합니다. 문서는 곧 제공될 예정입니다.
텍스트 전용 입력에서 이미지 생성
텍스트로 프롬프트하여 Imagen 모델에 이미지를 생성해 달라고 요청할 수 있습니다. 하나의 이미지 또는 여러 이미지를 생성할 수 있습니다.
텍스트 전용 입력에서 이미지 1개 생성
이 샘플을 사용해 보기 전에 이 가이드의 시작하기 전에 섹션을 완료하여 프로젝트와 앱을 설정하세요. 이 섹션에서 선택한 Gemini API 제공업체의 버튼을 클릭하면 이 페이지에 제공업체별 콘텐츠가 표시됩니다. |
Imagen 모델에 텍스트로 프롬프트하여 단일 이미지를 생성하도록 요청할 수 있습니다.
ImagenModel
인스턴스를 만들고 generateImages
를 호출해야 합니다.
Swift
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.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.');
}
Unity
Unity에서는 아직 Imagen 사용이 지원되지 않지만 곧 지원될 예정이니 다시 확인해 주세요.
사용 사례 및 앱에 적합한 모델을 선택하는 방법을 알아보세요.
텍스트 전용 입력에서 여러 이미지 생성
이 샘플을 사용해 보기 전에 이 가이드의 시작하기 전에 섹션을 완료하여 프로젝트와 앱을 설정하세요. 이 섹션에서 선택한 Gemini API 제공업체의 버튼을 클릭하면 이 페이지에 제공업체별 콘텐츠가 표시됩니다. |
기본적으로 Imagen 3 모델은 요청당 하나의 이미지만 생성합니다.
하지만 ImagenModel
인스턴스를 만들 때 ImagenGenerationConfig
를 제공하여 요청당 여러 이미지를 생성하도록 Imagen 모델에 요청할 수 있습니다.
ImagenModel
인스턴스를 만들고 generateImages
를 호출해야 합니다.
Swift
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.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.');
}
Unity
Unity에서는 아직 Imagen 사용이 지원되지 않지만 곧 지원될 예정이니 다시 확인해 주세요.
사용 사례 및 앱에 적합한 모델을 선택하는 방법을 알아보세요.
지원되는 기능 및 요구사항
Imagen 3 모델은 이미지 생성과 관련된 다양한 기능을 제공합니다. 이 섹션에서는 Firebase AI Logic와 함께 모델을 사용할 때 지원되는 항목을 설명합니다.
지원되는 기능
Firebase AI Logic는 Imagen 3 모델의 다음 기능을 지원합니다.
사람 및 얼굴 생성 (Firebase 프로젝트에 Google Cloud의 승인이 있는 경우)
생성된 이미지 내에서 텍스트 생성
생성된 이미지에 워터마크 추가
생성된 이미지 수, 가로세로 비율, 워터마킹과 같은 이미지 생성 매개변수 구성
안전 설정 구성
Firebase AI Logic는 Imagen 3 모델의 이러한 고급 기능을 지원하지 않습니다.
이러한 기능의 대부분은 서버 측에서 Imagen 모델을 사용하는 경우에도 승인된 사용자 목록에 있어야 합니다.
이미지 편집 또는 조작 기능(이미지 확대 포함)
모델에 대한 요청에 이미지 포함 (예: 퓨샷 학습)
SDK를 사용하여 디지털 워터마크 확인
이미지에 워터마크가 있는지 확인하려면 미디어 탭을 사용하여 이미지를 Vertex AI 스튜디오에 업로드하면 됩니다.텍스트에서 '실시간 이미지' 생성 (MP4 생성)
사전 정의된 스타일을 사용하여 이미지 생성
includeSafetyAttributes
를 사용 설정하면safetyAttributes.categories
및safetyAttributes.scores
를 반환할 수 없습니다.프롬프트 개선(
enhancePrompt
매개변수)을 사용 중지합니다. 즉, LLM 기반 프롬프트 수정 도구는 항상 제공된 프롬프트에 더 많은 세부정보를 자동으로 추가하여 제공된 프롬프트를 더 잘 반영하는 고품질 이미지를 제공합니다.생성된 이미지를 모델의 응답 (
storageUri
매개변수)의 일부로 Google Cloud Storage에 직접 작성합니다. 대신 이미지는 항상 응답에서 base64로 인코딩된 이미지 바이트로 반환됩니다.
생성된 이미지를 Cloud Storage에 업로드하려면 Cloud Storage for Firebase를 사용하면 됩니다.
사양 및 제한사항
한도 (요청당) | Imagen 3 | Imagen 3 Fast |
---|---|---|
최대 입력 토큰 수 | 토큰 480개 | 토큰 480개 |
최대 출력 이미지 수 | 이미지 4개 | 이미지 4개 |
지원되는 출력 이미지 해상도 (픽셀) |
|
|
또 뭘 할 수 있니?
-
다음을 포함하여 프로덕션 준비 (프로덕션 체크리스트 참고)에 대해 생각해 보세요.
- 승인되지 않은 클라이언트의 악용으로부터 Gemini API를 보호하기 위해 Firebase App Check를 설정합니다.
- Firebase Remote Config 통합: 새 앱 버전을 출시하지 않고도 앱의 값 (예: 모델 이름)을 업데이트합니다.
콘텐츠 생성을 제어하는 방법 알아보기
- 권장사항, 전략, 프롬프트 예시를 포함하여 프롬프트 설계 이해하기
- 가로세로 비율, 인물 생성, 워터마킹과 같은 Imagen 모델 매개변수를 구성합니다.
- 안전 설정을 사용하여 유해하다고 간주될 수 있는 대답을 받을 가능성을 조정합니다.
지원되는 모델 자세히 알아보기
다양한 사용 사례에 사용할 수 있는 모델과 할당량, 가격에 대해 알아보세요.Firebase AI Logic 사용 경험에 관한 의견 보내기