تمنحك حِزم تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic إمكانية الوصول إلى نماذج Imagen (من خلال Imagen API) لإنشاء الصور من طلب نصي. باستخدام هذه الإمكانية، يمكنك تنفيذ مهام مثل:
- إنشاء صور من طلبات مكتوبة بلغة طبيعية
- إنشاء صور بمجموعة كبيرة من التنسيقات والأنماط
- عرض النصوص في الصور
يشرح هذا الدليل كيفية إنشاء الصور باستخدام Imagen من خلال تقديم طلب نصي فقط.
يُرجى العِلم أنّ Imagen يمكنه أيضًا إنشاء صور استنادًا إلى صورة مرجعية باستخدام إمكانية التخصيص (متاحة حاليًا لأجهزة Android وFlutter فقط). في الطلب، يمكنك تقديم طلب نصي وصورة مرجعية لتوجيه النموذج لإنشاء صورة جديدة استنادًا إلى النمط أو الموضوع (مثل منتج أو شخص أو حيوان) أو عنصر التحكّم المحدّد. على سبيل المثال، يمكنك إنشاء صورة جديدة من صورة لقطة أو رسمة لصاروخ والقمر.
arrow_downward الانتقال إلى رمز الإدخال النصي فقط
قبل البدء
|
انقر على مقدّم خدمة Gemini API لعرض المحتوى الخاص بمقدّم الخدمة والرمز البرمجي على هذه الصفحة. |
إذا لم يسبق لك ذلك، يُرجى إكمال
دليل بدء الاستخدام الذي يوضّح كيفية
إعداد مشروعك على Firebase وربط تطبيقك بـ Firebase وإضافة حزمة تطوير البرامج (SDK) و
تهيئة خدمة الخلفية لمقدّم خدمة واجهة برمجة التطبيقات الذي اخترته و
إنشاء مثيل 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 (متاحة حاليًا لأجهزة Android وFlutter فقط)
إضافة علامة مائية إلى الصور التي يتم إنشاؤها
التحقّق من العلامات المائية الرقمية عند استخدام Vertex AI Gemini API
إذا أردت التحقّق من أنّ الصورة تتضمّن علامة مائية، يمكنك تحميلها إلى Vertex AI Studio باستخدام علامة التبويب الوسائط.ضبط مَعلمات إنشاء الصور ، مثل عدد الصور التي يتم إنشاؤها ونسبة العرض إلى الارتفاع والعلامات المائية
ضبط إعدادات الأمان
لا تتيح Firebase AI Logic الميزات المتقدّمة التالية في نماذج Imagen:
إيقاف أداة إعادة كتابة الطلبات (المَعلمة
enhancePrompt): يعني ذلك أنّ أداة إعادة كتابة الطلبات المستندة إلى نموذج لغوي كبير ستضيف تلقائيًا دائمًا المزيد من التفاصيل إلى الطلب المقدَّم لتقديم صور أعلى جودة تعكس بشكلٍ أفضل الطلب المقدَّم.كتابة صورة تم إنشاؤها مباشرةً في Google Cloud Storage كجزء من الردّ من النموذج (المَعلمة
storageUri): بدلاً من ذلك، يتم دائمًا عرض الصور كبايتات صور بترميز base64 في الردّ.
إذا أردت تحميل صورة تم إنشاؤها إلى Cloud Storage، يمكنك استخدام Cloud Storage for Firebase.
المواصفات والقيود
| السمة (لكل طلب) | القيمة |
|---|---|
| الحد الأقصى لعدد الرموز المميّزة للإدخال | 480 رمزًا مميّزًا |
| الحد الأقصى لعدد الصور الناتجة | 4 صور |
| درجات دقة الصور الناتجة المتاحة (بالبكسل) |
|
ما المهام الأخرى التي يمكنك تنفيذها؟
-
ابدأ التفكير في الاستعداد للإنتاج (راجِع
قائمة المهام لعملية الإنتاج):
- يمكنك إعداد Firebase App Check في أقرب وقت ممكن لحماية Gemini API من إساءة الاستخدام من قِبل العملاء غير المصرَّح لهم.
- دمج Firebase Remote Config لتعديل القيم في تطبيقك (مثل اسم النموذج) بدون نشر إصدار جديد من التطبيق.
كيفية التحكّم في إنشاء المحتوى
- تعرَّف على تصميم الطلبات، بما في ذلك أفضل الممارسات والاستراتيجيات وأمثلة على الطلبات.
- يمكنك ضبط مَعلمات نموذج Imagen ، مثل نسبة العرض إلى الارتفاع وإنشاء الأشخاص والعلامات المائية.
- استخدام إعدادات الأمان لضبط احتمالية الحصول على ردود قد تُعتبر ضارة.
مزيد من المعلومات عن النماذج المتاحة
تعرَّف على الـ نماذج المتاحة لحالات الاستخدام المختلفة وحصصها و أسعارها.تقديم ملاحظاتك حول تجربتك مع Firebase AI Logic