如何使用 Riva ASR API 和开箱即用模型?
目录

如何使用 Riva ASR API 和开箱即用模型?#
本教程将引导您了解 Riva Speech Skills ASR 服务的基础知识,特别是介绍如何将 Riva ASR API 与开箱即用模型结合使用。
NVIDIA Riva 概述#
NVIDIA Riva 是一个 GPU 加速的 SDK,用于构建针对您的用例定制并提供实时性能的语音 AI 应用程序。
Riva 提供丰富的语音和自然语言理解服务,例如
自动语音识别 (ASR)
文本到语音合成 (TTS)
一系列自然语言处理 (NLP) 服务,例如命名实体识别 (NER)、标点符号、意图分类。
在本教程中,我们将与自动语音识别 (ASR) API 进行交互。
有关 Riva 的更多信息,请参阅 Riva 开发者文档。
使用 Riva ASR API 进行转录#
ASR 接受音频流或音频缓冲区作为输入,并返回一个或多个文本转录,以及其他可选元数据。Riva 中的语音识别是一个 GPU 加速的计算管道,具有优化的性能和准确性。
Riva 为多种语言(如英语、西班牙语、德语、俄语和普通话)提供最先进的 OOTB(开箱即用)模型和管道,这些模型和管道可以通过 Riva 快速入门脚本轻松部署。Riva 还支持以各种方式轻松自定义 ASR 管道,以满足您的特定需求。
有关更多信息,请参阅 Riva ASR 文档。
现在,让我们使用 Riva API 为一些示例音频剪辑生成转录,使用 OOTB 管道,从英语开始。
要求和设置#
启动 Riva Speech Skills 服务器。
按照 Riva 快速入门指南 中的说明,在本教程运行之前,在 Riva Speech Skills 服务器上部署 OOTB ASR 模型。默认情况下,仅部署英语模型。安装 Riva 客户端库。
按照 Riva 客户端的要求和设置 中的步骤安装 Riva 客户端库。
导入 Riva 客户端库#
让我们导入一些必需的库,包括 Riva 客户端库。
import io
import IPython.display as ipd
import grpc
import riva.client
创建 Riva 客户端并连接到 Riva Speech API 服务器#
以下 URI 假定 Riva Speech API 服务器的本地部署在默认端口上。如果服务器部署在不同的主机上或通过 Kubernetes 上的 Helm chart,请使用适当的 URI。
auth = riva.client.Auth(uri='localhost:50051')
riva_asr = riva.client.ASRService(auth)
英语离线识别#
您可以在流模式或离线模式下使用 Riva ASR。在流模式下,连续的音频流被捕获和识别,生成转录文本流。在离线模式下,一段设定长度的音频剪辑被转录为文本。
让我们看一个示例,展示英语离线 ASR API 的用法
向 Riva Speech API 服务器发出 gRPC 请求#
Riva ASR API 支持脉冲编码调制 (PCM) 格式的 .wav
文件;包括单通道的 .alaw
、.mulaw
和 .flac
格式。
现在,让我们向 Riva Speech 服务器发出 gRPC 请求,以使用示例 .wav
文件在离线模式下进行 ASR。首先加载音频。
# This example uses a .wav file with LINEAR_PCM encoding.
# read in an audio file from local disk
path = "./audio_samples/en-US_sample.wav"
with io.open(path, 'rb') as fh:
content = fh.read()
ipd.Audio(path)
接下来,创建一个音频 RecognizeRequest
对象,根据需要设置配置参数。
# Set up an offline/batch recognition request
config = riva.client.RecognitionConfig()
#req.config.encoding = ra.AudioEncoding.LINEAR_PCM # Audio encoding can be detected from wav
#req.config.sample_rate_hertz = 0 # Sample rate can be detected from wav and resampled if needed
config.language_code = "en-US" # Language code of the audio clip
config.max_alternatives = 1 # How many top-N hypotheses to return
config.enable_automatic_punctuation = True # Add punctuation when end of VAD detected
config.audio_channel_count = 1 # Mono channel
最后,将请求提交到服务器。
response = riva_asr.offline_recognize(content, config)
asr_best_transcript = response.results[0].alternatives[0].transcript
print("ASR Transcript:", asr_best_transcript)
print("\n\nFull Response Message:")
print(response)
了解 ASR API 参数#
Riva ASR 在向 gRPC 端点发出转录请求时支持许多选项,如上一节所示。让我们详细了解这些参数
encoding
- 输入音频文件的音频编码类型。支持 (LINEAR_PCM
,FLAC
,MULAW
或ALAW
)。可以从音频文件检测到sample_rate_hertz
- 输入音频的采样率,单位为 Hz。请注意,可以从音频.wav
文件自动检测采样率,并在需要时重新采样,使此参数成为可选参数。language_code
- 输入音频的语言。“en-US”代表英语(美国)。其他选项包括 (es-US
,de-DE
,ru-RU
,zh-CN
)。我们将在下一节中探讨非英语语言的 ASR。max_alternatives
- 确定要返回的顶部备选转录的数量enable_automatic_punctuation
- 在 VAD(语音活动检测)结束时添加标点符号。audio_channel_count
- 音频通道数。典型的麦克风有 1 个音频通道。
非英语语言的离线识别 - 西班牙语示例#
在上一节中,我们介绍了 Riva API 的用法,并了解了 ASR API 的不同参数。现在,让我们看看如何在离线模式下将 ASR API 用于非英语语言,如西班牙语。
请注意,我们可以通过使用其对应的语言代码,类似地运行德语、俄语和普通话的 Riva ASR。我们将在本节末尾详细说明这一点。
西班牙语 ASR 的要求和设置:#
非英语 ASR(在本例中为西班牙语 ASR)的要求和设置步骤与英语 ASR 几乎相同。唯一的区别是在西班牙语音频上运行推理之前,我们需要首先在 Riva Speech Skills 服务器上部署西班牙语 ASR 管道。
注意:我们在上面 要求和设置部分 中为英语 ASR 遵循的 Riva Speech Skills 服务器 快速入门指南 解释了如何默认仅部署英语模型。
启动带有西班牙语 ASR 管道的 Riva Speech Skills 服务器。
1.1. 导航到快速入门指南文件夹。您在上面的 要求和设置部分 中下载了此文件夹。1.2. 运行
bash riva_stop.sh
以关闭正在运行的 Riva Speech Skills 服务器。如果 Riva Speech Skills 服务器当前未运行,您可以跳过此步骤。1.3. [可选] 运行
bash riva_clean.sh
以清理之前的本地 Riva 安装。这将停止并删除所有与 Riva 相关的容器,并删除用于存储模型文件的 Docker 卷或目录。Docker 镜像也可以删除,但是,在删除之前,系统会要求您确认。1.4. 更新
config.sh
文件:更新language_code=("en-US")
行,以包含西班牙语(语言代码"es-US"
)模型,具体按照config.sh
脚本中此行上方的说明进行操作。1.5. 重新运行
bash riva_init.sh
以下载并初始化西班牙语模型和管道。如果您在此步骤中看到任何错误,请从步骤 1.3 重新开始。1.6. 重新运行
bash riva_start.sh
以重新启动 Riva Speech Skills 服务器。
向 Riva Speech API 服务器发出 gRPC 请求#
让我们向 Riva Speech 服务器发出 gRPC 请求,以使用示例西班牙语 .wav
文件在离线模式下进行 ASR。
和以前一样,首先加载音频。
# This example uses a .wav file with LINEAR_PCM encoding.
# read in an audio file from local disk
path = "audio_samples/es-US_sample.wav" #Link to the Spanish sample audio file
with io.open(path, 'rb') as fh:
content = fh.read()
ipd.Audio(path)
与英语一样,创建一个音频 RecognizeRequest
对象,根据需要设置配置参数。请注意,我们已将请求配置的 language_code
更新为西班牙语语言代码 ("es-US"
)。
# Set up an offline/batch recognition request
config = riva.client.RecognitionConfig()
#req.config.encoding = ra.AudioEncoding.LINEAR_PCM # Audio encoding can be detected from wav
#req.config.sample_rate_hertz = 0 # Sample rate can be detected from wav and resampled if needed
config.language_code = "es-US" # Language code of the audio clip. Set to Spanish
config.max_alternatives = 1 # How many top-N hypotheses to return
config.enable_automatic_punctuation = True # Add punctuation when end of VAD detected
config.audio_channel_count = 1 # Mono channel
最后,将请求提交到服务器。
response = riva_asr.offline_recognize(content, config)
asr_best_transcript = response.results[0].alternatives[0].transcript
print("ASR Transcript:", asr_best_transcript)
print("\n\nFull Response Message:")
print(response)
我们可以通过在请求配置中设置其对应的语言代码 (de-DE
, ru-RU
和 zh-CN
),类似地运行德语、俄语和普通话的 Riva ASR。确保这些管道已按照 西班牙语 ASR 的要求和设置 中的说明部署在 Riva Speech Skills 服务器上。