GenAI Speech Recognition API

ML Kit の GenAI Speech Recognition API を使用すると、音声コンテンツをテキストに変換できます。この API は、次のモードをサポートしています。

  • Basic: Speech Recognition API は、SpeechRecognizer API と同様に、従来のオンデバイス音声認識モデルを使用します。
    • API レベル 31 以上を搭載したほとんどの Android デバイスで一般提供
  • 高精度: Speech Recognition API は、より広範な言語をカバーし、全体的な品質を向上させる GenAI モデルを使用します。
    • Google Pixel 10 で利用可能。他のデバイスにも対応予定

主な機能

  • マイクまたは音声ファイルからのストリーミング入力をキャプチャする
  • 文字起こしされたテキストは連続したストリームとして提供されます。最初は部分的なもので、最終的なコンテンツになる前に変更される可能性があります。

検索結果の例

音声 モード 言語/地域 音声文字変換
audio_1 基本 en-US 「これは短いメッセージです」
audio_2 高度 es-ES 「Este es un mensaje corto.」

プラットフォームの Speech Recognition API との比較

基本モードを使用する場合、ML Kit Speech Recognition API はプラットフォームの Speech Recognition API と同様のコア機能を提供します。ML Kit の大きなメリットは、幅広い Android プラットフォーム バージョンをサポートしていることです。API レベル 31 以上が必要で、一部のプラットフォーム API よりも広範囲です。

また、ML Kit 音声認識 API は、詳細モードでデバイス上の Gemini モデルを使用し、より広範な言語をサポートします。

始める

build.gradle 構成で ML Kit Speech Recognition API を依存関係として追加する

implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")

Speech Recognition API をアプリに統合するには、SpeechRecognizer クライアントを作成します。必要なオンデバイス モデル機能のステータスを確認し、モデルがデバイスにまだない場合はダウンロードします。SpeechRecognizerRequest で音声入力を準備したら、クライアントを使用して推論を実行し、Kotlin Flow からストリーミング出力を受け取ります。最後に、リソースを解放するためにクライアントを閉じる必要があります。

// 1. Create a SpeechRecognizer with desired options.
val options: SpeechRecognizerOptions =
    speechRecognizerOptions {
        locale = Locale.US
        preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
    }
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(options)

// 2. Check if the recognition model is available or needs downloading.
launch {
    val status: Int = speechRecognizer.checkStatus()
    if (status == FeatureStatus.DOWNLOADABLE) {
        // 3. If needed, download the model and monitor progress.
        speechRecognizer.download.collect { downloadStatus ->
            when (downloadStatus) {
                is DownloadStatus.DownloadCompleted -> {
                    // Model is ready, start recognition.
                    startMyRecognition(speechRecognizer)
                }
                is DownloadStatus.DownloadFailed -> {
                    // Handle download failure (e.g., inform the user).
                }
                is DownloadStatus.DownloadProgress -> {
                    // Handle download progress (e.g., update a progress bar).
                }
            }
        }
    } else if (status == FeatureStatus.AVAILABLE) {
        // Model is already ready, start recognition immediately.
        startMyRecognition(speechRecognizer)
    } else {
        // Handle other statuses (e.g., DOWNLOADING, UNAVAILABLE).
    }
}

// 4. Define your recognition logic using a suspend function.
suspend fun startMyRecognition(recognizer: SpeechRecognizer) {
    // Create a request (e.g., specifying audio source).
    val request: SpeechRecognizerRequest
        = speechRecognizerRequest { audioSource = AudioSource.fromMic() }
    // Start recognition and process the continuous stream of responses.
    recognizer.startRecognition(request).collect {
        // Process the SpeechRecognitionResponse data here.
    }
}

// 5. Stop recognition and clean up resources when the session is complete.
launch {
    recognizer.stopRecognition()
    recognizer.close()
}

音声入力の要件

GenAI Speech Recognition API は、ファイル記述子を介してマイクまたはカスタムソースからの入力をサポートしています。

AudioSource.fromPfd(parcelFileDescriptor) を使用する場合、入力オーディオは次の厳しい要件を満たさなければなりません。

  • 形式: ヘッダーなしの RAW 16 ビット PCM。
  • チャンネル: モノラル(単一チャンネル)。
  • サンプルレート: 16 kHz。

ほとんどのユースケースでは、これらの制約を自動的に処理する AudioSource.fromMic() が推奨されます。

サポートされている言語とデバイス

Mode 言語 / 地域
基本 en-US、fr-FR(ベータ版)、it-IT(ベータ版)、de-DE(ベータ版)、es-ES(ベータ版)、hi-IN(ベータ版)、ja-JP(ベータ版)、pt-BR(ベータ版)、tr-TR(ベータ版)、pl-PL(ベータ版)、cmn-Hans-CN(ベータ版)、ko-KR(ベータ版)、cmn-Hant-TW(ベータ版)、ru-RU(ベータ版)、vi-VN(ベータ版)
高度 通常、精度が高いロケール: en-US、ko-KR、es-ES、fr-FR、de-DE、it-IT、pt-PT、cmn-Hans-CN、cmn-Hant-TW、ja-JP、th-TH、ru-RU、nl-NL(ベータ版)、da-DK(ベータ版)、sv-SE(ベータ版)、pl-PL(ベータ版)、hi-IN(ベータ版)、vi-VN(ベータ版)、id-ID(ベータ版)、ar-SA(ベータ版)、tr-TR(ベータ版)

サポートされているデバイス

Mode サポートされているデバイス
基本 API レベル 31 以上を使用する Android デバイス。
高度 Google Pixel 10

セットアップに関する一般的な問題

ML Kit GenAI API は、Android AICore アプリを使用して Gemini Nano にアクセスします。デバイスのセットアップ直後(リセット後を含む)や、AICore アプリのリセット直後(データの消去、アンインストール後の再インストールなど)は、AICore アプリの初期化(サーバーからの最新の構成のダウンロードなど)が完了するまでに十分な時間がかからないことがあります。そのため、ML Kit GenAI API が想定どおりに機能しない可能性があります。表示される可能性のある一般的な設定エラー メッセージとその対処方法は次のとおりです。

エラー メッセージの例 対応方法
AICore がエラータイプ 4-CONNECTION_ERROR とエラーコード 601-BINDING_FAILURE で失敗しました。AICore サービスをバインドできませんでした。 この問題は、デバイスのセットアップ直後に ML Kit GenAI API を使用してアプリをインストールした場合や、アプリのインストール後に AICore がアンインストールされた場合に発生する可能性があります。AICore アプリを更新してからアプリを再インストールすると、問題が解決します。
AICore がエラータイプ 3-PREPARATION_ERROR とエラーコード 606-FEATURE_NOT_FOUND で失敗しました。機能 ... は利用できません。 これは、AICore が最新の構成のダウンロードを完了していない場合に発生する可能性があります。デバイスがインターネットに接続されている場合、通常は数分から数時間で更新が完了します。デバイスを再起動すると、アップデートを速く完了できます。

デバイスのブートローダーがロック解除されている場合も、このエラーが表示されます。この API は、ブートローダーがロック解除されているデバイスをサポートしていません。
AICore がエラータイプ 1(DOWNLOAD_ERROR)とエラーコード 0(UNKNOWN)で失敗しました。機能 ... が失敗ステータス 0 とエラー esz で失敗しました。UNAVAILABLE: ホスト ... を解決できません。 ネットワーク接続を維持し、数分待ってから再試行します。

サンプルコード

  • GitHub で ML Kit Speech Recognition API のコードサンプルを調べます。