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

‫Imagen هو نموذج لإنشاء الصور. ويمكن استخدامها لإنشاء صور رمزية مخصّصة لملفات المستخدمين الشخصية أو لدمج مواد عرض مرئية مخصّصة في مسارات الشاشة الحالية لزيادة تفاعل المستخدمين.

يمكنك الوصول إلى نماذج Imagen من تطبيق Android باستخدام Firebase AI Logic SDK. تتوفّر نماذج Imagen باستخدام كلتا جهتَي توفير واجهة برمجة التطبيقات في Firebase AI Logic: Gemini Developer API (ننصح بها معظم المطوّرين) وVertex AI.

مخطّط بياني يوضّح بنية دمج Firebase AI Logic
       للوصول إلى Gemini Developer API يستخدم تطبيق Android حزمة تطوير البرامج (SDK) لنظام Android من Firebase للربط بمنصة Firebase. يتفاعل Firebase بعد ذلك مع Gemini Developer API، الذي يصل إلى Gemini Pro وFlash داخل السحابة الإلكترونية.
الشكل 1. الوصول إلى نماذج Imagen باستخدام Firebase AI Logic

تجربة الطلبات

يتطلّب إنشاء الطلبات المثالية غالبًا عدّة محاولات. يمكنك تجربة طلبات الصور في Vertex AI Studio، وهي بيئة تطوير متكاملة لتصميم الطلبات وإنشاء النماذج الأولية. للحصول على نصائح حول كيفية تحسين طلباتك، راجِع دليل سمات الطلبات والصور.

لقطة شاشة لواجهة Google Cloud Vertex AI Studio تعرض أربع صور من إنشاء الذكاء الاصطناعي لديناصور T-Rex يحمل حقيبة ظهر زرقاء في غابة تعود إلى عصور ما قبل التاريخ. يعرض الشريط الجانبي الأيمن خيارات التنقّل، مثل "لوحة البيانات" وModel Garden وVision، بينما تحتوي اللوحة اليسرى على "المَعلمات" الخاصة بإعدادات إنشاء الصور.
الشكل 2. يمكن أن يساعدك Vertex AI Studio في تحسين طلباتك لإنشاء الصور.

إعداد مشروع على Firebase وربط تطبيقك به

اتّبِع الخطوات الواردة في مستندات Firebase من أجل إضافة Firebase إلى مشروع Android.

إضافة تبعية Gradle

أضِف التبعيات التالية إلى ملف build.gradle:

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:34.2.0"))

  // Add the dependency for the Firebase AI Logic library. When using the BoM,
  // you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
}

إنشاء صورة

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

يمكنك استخدام المَعلمة generationConfig لتحديد طلب سلبي وعدد الصور ونسبة العرض إلى الارتفاع للصورة الناتجة وتنسيق الصورة وإضافة علامة مائية. يمكنك استخدام المَعلمة safetySettings لإعداد فلاتر الأمان والأشخاص.

Kotlin

val config = ImagenGenerationConfig {
    numberOfImages = 2,
    aspectRatio = ImagenAspectRatio.LANDSCAPE_16x9,
    imageFormat = ImagenImageFormat.jpeg(compressionQuality = 100),
    addWatermark = false
}

// Initialize the Gemini Developer API backend service
// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
    modelName = "imagen-3.0-generate-002",
    generationConfig = config,
    safetySettings = ImagenSafetySettings(
       safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE,
       personFilterLevel = ImagenPersonFilterLevel.BLOCK_ALL
    )
)

Java

ImagenGenerationConfig config = new ImagenGenerationConfig.Builder()
    .setNumberOfImages(2)
    .setAspectRatio(ImagenAspectRatio.LANDSCAPE_16x9)
    .setImageFormat(ImagenImageFormat.jpeg(100))
    .setAddWatermark(false)
    .build();

// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
ImagenModelFutures model = ImagenModelFutures.from(
    FirebaseAI.ai(backend = GenerativeBackend.googleAI()).imagenModel(
       "imagen-3.0-generate-002",
       config,
       ImagenSafetySettings.builder()
          .setSafetyFilterLevel(ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE)
          .setPersonFilterLevel(ImagenPersonFilterLevel.BLOCK_ALL)
          .build())
);

بعد إنشاء مثيل ImagenModel، يمكنك إنشاء صور من خلال استدعاء generateImages:

Kotlin

val imageResponse = model.generateImages(
  prompt = "An astronaut riding a horse",
)
val image = imageResponse.images.first
val bitmapImage = image.asBitmap()

Java

CompletableFuture<GenerateContentResponse> futureResponse =
    model.generateContent(
        Content.newBuilder()
            .addParts(
                Part.newBuilder()
                    .setText("An astronaut riding a horse")
                    .build())
            .build());

try {
  GenerateContentResponse imageResponse = futureResponse.get();
  List<GeneratedImage> images =
      imageResponse
          .getCandidates(0)
          .getContent()
          .getParts(0)
          .getInlineData()
          .getImagesList();

  if (!images.isEmpty()) {
    GeneratedImage image = images.get(0);
    Bitmap bitmapImage = image.asBitmap();
    // Use bitmapImage
  }
} catch (ExecutionException | InterruptedException e) {
  e.printStackTrace();
}