GenAI Speech Recognition API

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

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

主要功能

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

示例结果

音频 模式 语言区域 转录
audio_1 基本版 en-US “This is a short message”
audio_2 高级 es-ES “Este es un mensaje corto.”

与平台语音识别 API 的比较

使用基本模式时,机器学习套件语音识别 API 提供的核心功能与平台语音识别 API 类似。机器学习套件的一个主要优势是,它支持更广泛的 Android 平台版本,需要 API 级别为 31 或更高版本,这比某些平台 API 更广泛。

此外,机器学习套件语音识别 API 在高级模式下使用设备端 Gemini 模型,可提供更广泛的语言覆盖范围。

开始使用

build.gradle 配置中将机器学习套件语音识别 API 添加为依赖项

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

如需将语音识别 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()
}

音频输入要求

生成式 AI 语音识别 API 支持通过文件描述符从麦克风或自定义来源输入。

如果您使用 AudioSource.fromPfd(parcelFileDescriptor),则输入音频必须满足以下严格要求:

  • 格式:原始、无标头的 16 位 PCM。
  • 声道:单声道(单声道)。
  • 采样率:16 kHz。

对于大多数使用场景,建议使用 AudioSource.fromMic(),因为它会自动处理这些限制。

支持的语言和设备

模式 语言区域
基本版 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 版)

支持的设备

模式 支持的设备
基本版 使用 API 级别 31 及更高级别的 Android 设备。
高级 Pixel 10

常见的设置问题

机器学习套件生成式 AI API 依赖于 Android AICore 应用来访问 Gemini Nano。当设备刚刚设置(包括重置)或 AICore 应用刚刚重置(例如清除数据、卸载然后重新安装)时,AICore 应用可能没有足够的时间来完成初始化(包括从服务器下载最新配置)。因此,机器学习套件生成式 AI API 可能无法按预期运行。以下是您可能会看到的常见设置错误消息以及处理方法:

错误消息示例 处理方法
AICore 失败,错误类型为 4-CONNECTION_ERROR,错误代码为 601-BINDING_FAILURE:AICore 服务无法绑定。 如果您在设备设置后立即使用机器学习套件生成式 AI API 安装应用,或者在安装应用后卸载 AICore,则可能会发生这种情况。更新 AICore 应用,然后重新安装应用应该可以解决此问题。
AICore 失败,错误类型为 3-PREPARATION_ERROR,错误代码为 606-FEATURE_NOT_FOUND:功能 ... 不可用。 如果 AICore 尚未完成下载最新配置,则可能会发生这种情况。当设备连接到互联网时,通常需要几分钟到几小时才能更新。重新启动设备可以加快更新速度。

请注意,如果设备的引导加载程序已解锁,您也会看到此错误 - 此 API 不支持引导加载程序已解锁的设备。
AICore 失败,错误类型为 1-DOWNLOAD_ERROR,错误代码为 0-UNKNOWN:功能 ... 失败,失败状态为 0,错误 esz 为:UNAVAILABLE:无法解析主机 ... 保持网络连接,等待几分钟,然后重试。

示例代码