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

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

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

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

تجربة طلبات

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

لقطة شاشة لواجهة Google Cloud Vertex AI Studio،
      تعرض أربع صور تم إنشاؤها لتنين ديناصور مع حقيبة ظهر زرقاء في
      غابة ما قبل التاريخ يعرض الشريط الجانبي الأيمن خيارات التنقّل، مثل
      لوحة البيانات و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:33.14.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();
}