GenAI Speech Recognition API

在机器学习套件的生成式 AI 语音识别 API 中,您可以将音频内容转写为文本。此 API 支持以下模式:

  • 基本:Speech Recognition API 使用传统的设备端语音识别模型,类似于 SpeechRecognizer API
    • 在大多数搭载 API 级别 31 及更高版本的 Android 设备上正式版可用
  • 高级:Speech Recognition API 使用生成式 AI 模型,可提供更广泛的语言覆盖范围和更好的整体质量
    • 适用于 Pixel 10 设备,更多设备正在开发中

主要功能

  • 捕获来自麦克风或音频文件的流式输入
  • 转写文本以连续流的形式提供,最初可能只是部分内容(并且可能会发生变化),之后才会成为最终内容。

示例结果

音频 模式 语言区域 转录
audio_1 基本 en-US “这是一条简短的消息”
audio_2 高级 es-ES "Este es un mensaje corto."

与平台语音识别 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()
}

支持的语言和设备

Mode 语言区域
基本 en-US、fr-FR(Beta 版)、it-IT(Beta 版)、de-DE(Beta 版)、es-ES(Beta 版)、hi-IN(Beta 版)、ja-JP(Beta 版)、pt-BR(Beta 版)、tr-TR(Beta 版)、pl-PL(Beta 版)、cmn-Hans-CN(Beta 版)、ko-KR(Beta 版)、cmn-Hant-TW(Beta 版)、ru-RU(Beta 版)、vi-VN(Beta 版)
高级 通常具有较高准确度的语言区域: 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(Beta 版)、da-DK(Beta 版)、sv-SE(Beta 版)、pl-PL(Beta 版)、hi-IN(Beta 版)、vi-VN(Beta 版)、id-ID(Beta 版)、ar-SA(Beta 版)、tr-TR(Beta 版)

支持的设备

Mode 支持的设备
基本 使用 API 级别 31 及更高版本的 Android 设备。
高级 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 代码示例