إنشاء صور باستخدام Imagen


تتيح لك حِزم تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic الوصول إلى نماذج Imagen (من خلال Imagen API) لتتمكّن من إنشاء صور من طلب نصي. باستخدام هذه الإمكانية، يمكنك إجراء ما يلي:

  • إنشاء صور من طلبات مكتوبة بلغة طبيعية
  • إنشاء صور بتنسيقات وأنماط متنوعة
  • عرض النص في الصور

يوضّح هذا الدليل كيفية إنشاء صور باستخدام Imagen من خلال تقديم طلب نصي فقط.

يُرجى العِلم أنّ Imagen يمكنه أيضًا إنشاء صور استنادًا إلى صورة مرجعية باستخدام إمكانية التخصيص (تتوفّر حاليًا على Android وFlutter فقط). في الطلب، يمكنك تقديم طلب نصي وصورة مرجعية توجّه النموذج لإنشاء صورة جديدة استنادًا إلى النمط أو الموضوع (مثل منتج أو شخص أو حيوان) أو عنصر التحكّم المحدّد. على سبيل المثال، يمكنك إنشاء صورة جديدة من صورة قطة أو رسمة لصاروخ والقمر.

الانتقال إلى رمز الإدخال النصي فقط

الاختيار بين طرازَي Gemini وImagen

تتيح حِزم تطوير البرامج (SDK) في Firebase AI Logic إنشاء الصور وتعديلها باستخدام نموذج Gemini أو نموذج Imagen.

في معظم حالات الاستخدام، ابدأ بـ Gemini، ثم اختَر Imagen فقط للمهام المتخصّصة التي تكون فيها جودة الصورة مهمة.

اختَر Gemini عندما تريد:

  • استخدام المعرفة العالمية والاستدلال لإنشاء صور ذات صلة بالسياق
  • لدمج النصوص والصور بسلاسة أو لتبديل النصوص والصور في الناتج
  • لتضمين مرئيات دقيقة ضمن تسلسلات نصية طويلة
  • لتعديل الصور بشكل حواري مع الحفاظ على السياق

اختَر Imagen عندما تريد:

  • لإعطاء الأولوية لجودة الصورة أو الواقعية أو التفاصيل الفنية أو الأنماط المحدّدة (مثل الانطباعية أو الأنمي)
  • لإضافة لمسة من العلامة التجارية أو الأسلوب أو إنشاء الشعارات وتصاميم المنتجات
  • لتحديد نسبة العرض إلى الارتفاع أو تنسيق الصور التي يتم إنشاؤها بشكل صريح

قبل البدء

انقر على مزوّد Gemini API لعرض المحتوى والرمز الخاصين بالمزوّد على هذه الصفحة.

إذا لم يسبق لك إجراء ذلك، أكمل دليل بدء الاستخدام الذي يوضّح كيفية إعداد مشروعك على Firebase، وربط تطبيقك بـ Firebase، وإضافة حزمة تطوير البرامج (SDK)، وتهيئة خدمة الخلفية لمزوّد واجهة برمجة التطبيقات الذي اخترته، وإنشاء مثيل ImagenModel.

الطُرز التي تتيح هذه الإمكانية

يتيح Gemini Developer API إنشاء الصور باستخدام أحدث نماذج Imagen المستقرة. ينطبق هذا القيد على طُرز Imagen المتوافقة بغض النظر عن طريقة الوصول إلى Gemini Developer API.

  • imagen-4.0-generate-001
  • imagen-4.0-fast-generate-001
  • imagen-4.0-ultra-generate-001
  • imagen-3.0-generate-002

إنشاء صور من إدخالات نصية فقط

يمكنك أن تطلب من نموذج Imagen إنشاء صور من خلال تقديم طلب نصي فقط. يمكنك إنشاء صورة واحدة أو صور متعددة.

يمكنك أيضًا ضبط العديد من خيارات الإعداد المختلفة لإنشاء الصور، مثل نسبة العرض إلى الارتفاع وتنسيق الصورة.

إنشاء صورة واحدة من إدخال نصي فقط

قبل تجربة هذا النموذج، أكمل القسم قبل البدء من هذا الدليل لإعداد مشروعك وتطبيقك.
في هذا القسم، ستنقر أيضًا على زر لمقدّم الخدمة الذي اخترته 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-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


// 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
  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 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-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


// 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
  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:

لا يتيح Firebase AI Logic استخدام الميزات المتقدّمة التالية في نماذج Imagen:

  • ضبط لغة النص المُدخَل

  • تفعيل includeSafetyAttributes، ما يعني أنّه لا يمكن إرجاع safetyAttributes.categories وsafetyAttributes.scores

  • إيقاف أداة إعادة كتابة الطلبات (المَعلمة enhancePrompt). وهذا يعني أنّ أداة إعادة كتابة الطلبات المستندة إلى نماذج لغوية كبيرة ستضيف تلقائيًا المزيد من التفاصيل إلى الطلب المقدَّم للحصول على صور أعلى جودة تعكس الطلب المقدَّم بشكل أفضل.

  • كتابة صورة تم إنشاؤها مباشرةً في Google Cloud Storage كجزء من الرد الذي يقدّمه النموذج (المَعلمة storageUri) بدلاً من ذلك، يتم دائمًا عرض الصور كبايتات صور مرمّزة بـ Base64 في الردّ.
    إذا أردت تحميل صورة من إنشاء الذكاء الاصطناعي التوليدي إلى Cloud Storage، يمكنك استخدام Cloud Storage for Firebase.

المواصفات والقيود

الموقع (لكل طلب) القيمة
الحدّ الأقصى لعدد الرموز المميزة للإدخال ‫480 رمزًا مميزًا
الحد الأقصى لعدد الصور الناتجة ‫4 صور
درجات دقة الصور الناتجة المتوافقة (بالبكسل)
  • ‫1024 × 1024 بكسل (نسبة العرض إلى الارتفاع 1:1)
  • ‫896×1280 (نسبة العرض إلى الارتفاع 3:4)
  • ‫1280x896 (نسبة العرض إلى الارتفاع 4:3)
  • ‫768 × 1408 (نسبة العرض إلى الارتفاع 9:16)
  • ‫1408x768 (نسبة العرض إلى الارتفاع 16:9)



ما هي الإجراءات الأخرى التي يمكنك تنفيذها؟

كيفية التحكّم في إنشاء المحتوى

مزيد من المعلومات عن النماذج المتاحة

يمكنك الاطّلاع على النماذج المتاحة لمختلف حالات الاستخدام والحصص والأسعار الخاصة بها.


تقديم ملاحظات حول تجربتك مع Firebase AI Logic