Imagen 3로 이미지 생성

Imagen 3은 이미지 생성 모델입니다. 사용자 프로필의 맞춤 아바타를 생성하거나 맞춤설정된 시각적 애셋을 기존 화면 흐름에 통합하여 사용자 참여도를 높이는 데 사용할 수 있습니다.

Firebase AI Logic SDK를 사용하여 Android 앱에서 Imagen 모델에 액세스할 수 있습니다. Imagen 모델은 Firebase AI 로직 API 제공업체인 Gemini Developer API (대부분의 개발자에게 권장됨)와 Vertex AI를 모두 사용하여 사용할 수 있습니다.

Gemini Developer API에 액세스하기 위한 Firebase AI 로직 통합 아키텍처를 보여주는 다이어그램 Android 앱은 Firebase Android SDK를 사용하여 Firebase에 연결합니다. 그러면 Firebase는 클라우드 내에서 Gemini Pro 및 Flash에 액세스하는 Gemini Developer API와 상호작용합니다.
그림 1. Firebase AI 로직을 사용하여 Imagen 3 모델에 액세스합니다.

프롬프트 실험

이상적인 프롬프트를 만드는 데는 여러 번의 시도가 필요한 경우가 많습니다. 프롬프트 설계 및 프로토타입 제작을 위한 IDE인 Vertex AI Studio에서 이미지 프롬프트를 실험할 수 있습니다. 프롬프트를 개선하는 방법에 관한 도움말은 프롬프트 및 이미지 속성 가이드를 참고하세요.

선사시대 숲에 파란색 배낭을 메고 있는 T-Rex의 생성된 이미지 4개가 표시된 Google Cloud Vertex AI Studio 인터페이스의 스크린샷 왼쪽 사이드바에는 대시보드, 모델 가든, Vision과 같은 탐색 옵션이 표시되고 오른쪽 패널에는 이미지 생성 설정의 매개변수가 포함되어 있습니다.
그림 2. Vertex AI Studio를 사용하면 이미지 생성 프롬프트를 미세 조정할 수 있습니다.

Firebase 프로젝트 설정 및 앱 연결

Firebase 문서의 단계에 따라 Android 프로젝트에 Firebase를 추가합니다.

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

자바

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