Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Androidifyで学ぶGeminiAPI

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Yomogi. Yomogi.
November 18, 2025
18

 Androidifyで学ぶGeminiAPI

Avatar for Yomogi.

Yomogi.

November 18, 2025
Tweet

Transcript

  1. 6

  2. モデルの生成パターン Geminiモデルの生成は2つのAPIプロバイダ経由で取得 Gemini Developer API val model = Firebase.ai(backend =

    GenerativeBackend.googleAI()) .generativeModel("gemini-2.5-flash") Vertex AI Gemini API val model = Firebase.ai(backend = GenerativeBackend.vertexAI()) .generativeModel("gemini-2.5-flash") 10
  3. モデルの生成パターン (Imagenの場合) Geminiモデル同様に2つのAPIプロバイダ経由で取得 Gemini Developer API val ai = Firebase.ai(backend

    = GenerativeBackend.googleAI())                .imagenModel("imagen-4.0-generate-001") Vertex AI Gemini API val ai = Firebase.ai(backend = GenerativeBackend.vertexAI())                .imagenModel("imagen-4.0-generate-001") 11
  4. GeminiAPIへのリクエスト準備 モデル名・SafetySettingsを指定 ImagenSafetySettings(後述)で生成を許可する画像の閾値を設定 private fun createGenerativeImageModel(): ImagenModel { return Firebase.ai(backend

    = GenerativeBackend.vertexAI()).imagenModel( remoteConfigDataSource.imageModelName(), safetySettings = ImagenSafetySettings( safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE, personFilterLevel = ImagenPersonFilterLevel.ALLOW_ADULT, ), ) } 14
  5. 画像の生成 private suspend fun executeImageGeneration( generativeModel: ImagenModel, prompt: String, ):

    Bitmap { val response = generativeModel.generateImages(prompt) return response.images.first().asBitmap() } 15
  6. プロンプトの生成 override suspend fun generateImageFromPromptAndSkinTone( prompt: String, skinTone: String, ):

    Bitmap { val basePromptTemplate = remoteConfigDataSource.promptImageGenerationWithSkinTone() val imageGenerationPrompt = basePromptTemplate .replace("{prompt}", prompt) .replace("{skinTone}", skinTone) if (remoteConfigDataSource.useImagen()) { val generativeModel = createGenerativeImageModel() return executeImageGeneration( generativeModel, imageGenerationPrompt, ) (以下省略) 16
  7. 画像の生成 private suspend fun executeImageGeneration( generativeModel: ImagenModel, prompt: String, ):

    Bitmap { val response = generativeModel.generateImages(prompt) return response.images.first().asBitmap() } 18
  8. レスポンスから画像を抽出 レスポンスがImagenGenerationResponseの型で返却される public class ImagenGenerationResponse<T> internal constructor(public val images: List<T>,

    public val filteredReason: String?) 生成したimageパラメータの配列で返却されるので、Androidifyでは配列の一つ目を表 示 response.images.first().asBitmap() 19
  9. テキスト生成時の細かい指定 Firebase.ai((省略), safetySettings = listOf( SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.LOW_AND_ABOVE), SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.LOW_AND_ABOVE), SafetySetting(HarmCategory.SEXUALLY_EXPLICIT,

    HarmBlockThreshold.LOW_AND_ABOVE), SafetySetting(HarmCategory.DANGEROUS_CONTENT, HarmBlockThreshold.LOW_AND_ABOVE), SafetySetting(HarmCategory.CIVIC_INTEGRITY, HarmBlockThreshold.LOW_AND_ABOVE), ), ) 指定したい属性(HarmCategory)とそれに対する閾値(HarmBlockThreshold)を指定するこ とで細かく制御 27
  10. HarmCategory HARASSMENT : ハラスメント コンテンツ。 HATE_SPEECH : ヘイトスピーチとコンテンツ。 SEXUALLY_EXPLICIT :

    性的描写が露骨なコンテンツ。 DANGEROUS_CONTENT : 危険なコンテンツ。 CIVIC_INTEGRITY : 市民の誠実性を損なう可能性があるコンテンツ。 ※ 非推奨: 代 わりに enableEnhancedCivicAnswers を使用 指定可能な定義一覧 https://ai.google.dev/api/generate-content?hl=ja#v1beta.HarmCategory enableEnhancedCivicAnswersはモデルへのカテゴリーではなくConfigで指定が推奨 29
  11. 指定に使用するクラス public class ImagenSafetySettings( internal val safetyFilterLevel: ImagenSafetyFilterLevel, internal val

    personFilterLevel: ImagenPersonFilterLevel, ) {} ImagenSafetyFilterLevel:暴力的、有害、または不適切なコンテンツをフィルタリング するために使用 ImagenPersonFilterLevel:人物や顔が画像に含まれることを制御するために使用 32
  12. Androidifyでの指定 Firebase.ai((省略), safetySettings = ImagenSafetySettings( safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE, personFilterLevel =

    ImagenPersonFilterLevel.ALLOW_ADULT, ), ) ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE:最も厳格。最強 ImagenPersonFilterLevel.ALLOW_ADULT:成人向け画像のみを含む画像の生成を許可。 児童の画像は除外。 33
  13. 参考 Gemini API reference https://ai.google.dev/api?hl=ja Androidify https://github.com/android/androidify Firebae AI Logic

    https://firebase.google.com/products/generative-ai https://firebase.google.com/docs/ai-logic Android-AI https://github.com/android/ai-samples 35