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


تمنحك حِزم تطوير البرامج (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-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 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 صور
درجات دقة الصور الناتجة المتاحة (بالبكسل)
  • ‫1024 × 1024 بكسل (نسبة العرض إلى الارتفاع 1:1)
  • ‫896 × 1280 (نسبة العرض إلى الارتفاع 3:4)
  • ‫1280 × 896 (نسبة العرض إلى الارتفاع 4:3)
  • ‫768 × 1408 (نسبة العرض إلى الارتفاع 9:16)
  • ‫1408 × 768 (نسبة العرض إلى الارتفاع 16:9)



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

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

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

تعرَّف على الـ نماذج المتاحة لحالات الاستخدام المختلفة وحصصها و أسعارها.


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