สร้างรูปภาพด้วย Imagen 3

Imagen 3 เป็นโมเดลการสร้างรูปภาพ ซึ่งสามารถใช้ในการสร้างรูปโปรไฟล์ที่กําหนดเองสําหรับโปรไฟล์ผู้ใช้ หรือเพื่อผสานรวมชิ้นงานภาพที่มีการปรับเปลี่ยนในแบบของคุณเข้ากับขั้นตอนบนหน้าจอที่มีอยู่เพื่อเพิ่มการมีส่วนร่วมของผู้ใช้

คุณสามารถเข้าถึงโมเดล Imagen จากแอป Android โดยใช้ Firebase AI Logic SDK โมเดล Imagen พร้อมใช้งานโดยใช้ทั้งผู้ให้บริการ API ของตรรกะ AI ของ Firebase ได้แก่ Gemini Developer API (แนะนำสำหรับนักพัฒนาซอฟต์แวร์ส่วนใหญ่) และ Vertex AI

แผนภาพที่แสดงสถาปัตยกรรมการผสานรวมตรรกะ AI ของ Firebase เพื่อเข้าถึง Gemini Developer API แอป Android ใช้ Firebase Android SDK เพื่อเชื่อมต่อกับ Firebase จากนั้น Firebase จะโต้ตอบกับ Gemini Developer API ซึ่งเข้าถึง Gemini Pro และ Flash ภายในระบบคลาวด์
รูปที่ 1 เข้าถึงโมเดล Imagen 3 โดยใช้ตรรกะ AI ของ Firebase

ทดลองใช้พรอมต์

การสร้างพรอมต์ที่เหมาะมักต้องลองหลายครั้ง คุณสามารถทดลองใช้พรอมต์รูปภาพใน Vertex AI Studio ซึ่งเป็น IDE สําหรับการออกแบบและการสร้างต้นแบบพรอมต์ ดูเคล็ดลับเกี่ยวกับวิธีปรับปรุงพรอมต์ได้ที่คู่มือพรอมต์และแอตทริบิวต์รูปภาพ

ภาพหน้าจอของอินเทอร์เฟซ Vertex AI Studio ของ Google Cloud ที่แสดงรูปภาพไดโนเสาร์พันธุ์ไทแรนโนซอรัสเร็กซ์ 4 ภาพพร้อมกระเป๋าเป้สีน้ำเงินในป่ายุคก่อนประวัติศาสตร์ แถบด้านข้างซ้ายจะแสดงตัวเลือกการนำทาง เช่น แดชบอร์ด สวนโมเดล และวิสัยทัศน์ ส่วนแผงด้านขวาจะมีพารามิเตอร์สำหรับการตั้งค่าการสร้างรูปภาพ
รูปที่ 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 เพื่อกำหนดค่าตัวกรองความปลอดภัยและตัวกรองบุคคลได้

ในเอกสารประกอบของ Firebase

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();
}