在机器学习套件的生成式 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:无法解析主机 ... | 保持网络连接,等待几分钟,然后重试。 |
示例代码
- 在 GitHub GitHub