Imagen으로 이미지 생성

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

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

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

프롬프트 실험

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

선사 시대 숲에서 파란색 배낭을 멘 티라노사우루스의 생성된 이미지 4개를 표시하는 Google AI Studio 인터페이스의 스크린샷
그림 2. Google AI Studio를 사용하면 이미지 생성 프롬프트를 미세 조정할 수 있습니다.

Firebase 프로젝트 설정 및 앱 연결

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

Gradle 종속 항목 추가

build.gradle 파일에 다음 종속 항목을 추가합니다.

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:34.3.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-4.0-generate-001",
    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-4.0-generate-001",
       config,
       ImagenSafetySettings.builder()
          .setSafetyFilterLevel(ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE)
          .setPersonFilterLevel(ImagenPersonFilterLevel.BLOCK_ALL)
          .build())
);

ImagenModel가 인스턴스화되면 generateImages를 호출하여 이미지를 생성할 수 있습니다.

Kotlin

val imageResponse = model.generateImages(
  prompt = "A hyper realistic picture of a t-rex with a blue bagpack in a prehistoric forest",
)
val image = imageResponse.images.first
val bitmapImage = image.asBitmap()

Java

CompletableFuture<GenerateContentResponse> futureResponse =
    model.generateContent(
        Content.newBuilder()
            .addParts(
                Part.newBuilder()
                    .setText("A hyper realistic picture of a t-rex with a blue bagpack in a prehistoric forest")
                    .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();
}