如何通过Riva ASR API 与开箱即用的语音识别模型一起使用?
本节将引导您了解 Riva Speech Skills ASR 服务的基础知识,特别介绍如何将 Riva ASR API 与开箱即用的模型一起使用。
NVIDIA Riva 概述
NVIDIA Riva 是一个 GPU 加速的 SDK,用于帮助您构建定制化的语音 AI 应用程序并提供实时性能。Riva 提供丰富的语音和自然语言理解服务,例如:
- 自动语音识别 (ASR)
- 文本到语音合成 (TTS)
- 自然语言处理 (NLP) 服务的集合,例如命名实体识别 (NER)、自动加标点、意图分类。
其中Riva ASR 将音频流作为输入,并返回一个或多个文本副本以及其他可选元数据。Riva 中的语音识别是一种 GPU 加速的计算的处理流程,具有优化的性能和准确性。
Riva 为多种语言(如英语、西班牙语、德语、俄语和普通话)提供最先进的 OOTB(开箱即用)模型和管道,可以使用 Riva 快速启动脚本轻松部署。 Riva 还支持以各种方式轻松定制 ASR 管道,以满足您的特定需求。我们将介绍如何使用自动语音识别 (ASR) API 有关 Riva 的更多信息请参阅 Riva 开发人员文档
使用 Riva ASR API 进行语音识别从语音到文字的转录
1 启动 Riva Speech Skills 服务器和客户端
在运行本脚本之前,按照 Riva 快速入门指南中的说明,首先启动 Riva Speech Skills 服务器和客户端,初始化部署开箱即用的ASR 模型并启动客户端服务(默认情况下仅自动部署英文模型,非英语模型需要自定义部署)。
ngc registry resource download-version nvidia/riva/riva_quickstart:2.1.0
cd riva_quickstart_v2.1.0
bash riva_init.sh
bash riva_start.sh
bash riva_start_client.sh
jupyter notebook --ip=0.0.0.0 --allow-root
2 导入 Riva 客户端库
进入Jupyter并打开ipynb文件之后,首先让我们导入一些包括 Riva Client在内的必要的工具库:
import io
import IPython.display as ipd
import grpc #google开源的微服务框架
import riva_api.riva_asr_pb2 as rasr # riva asr工具类
import riva_api.riva_asr_pb2_grpc as rasr_srv # riva asr微服务工具类
import riva_api.riva_audio_pb2 as ra # riva 音频处理工具类
3 创建一个Riva客户端并连接到Riva Speech API服务器¶
channel = grpc.insecure_channel('localhost:50051')
riva_asr = rasr_srv.RivaSpeechRecognitionStub(channel)
Note:上面的“localhost:50051”是Riva Speech API服务器的本地部署在默认端口上。如果服务器部署在不同的主机上或通过Kubernetes上的Helm图表,请使用适当的URI。
4 在磁盘中读取一条语音文件
path = "./audio_samples/en-US_sample.wav"
with io.open(path, 'rb') as fh:
content = fh.read()
ipd.Audio(path)
5 创建RecognizeRequest 语音识别请求对象,根据需要设置配置参数。
# 设置离线批处理的语音识别请求
req = rasr.RecognizeRequest()
req.audio = content # 语音内容
#req.config.encoding = ra.AudioEncoding.LINEAR_PCM # 语音编码支持(LINEAR_PCM、FLAC、MULAW 或 ALAW)
#req.config.sample_rate_hertz = 0 # 可以从 wav 中检测采样率并在需要时重新采样
req.config.language_code = "en-US" # 语种选择 “en-US”代表英语(美国)。其他选项包括(es-US西班牙语、de-DE德语、ru-RU俄语、zh-CN中文)
req.config.max_alternatives = 1 # 要返回多少个 top-N 假设
req.config.enable_automatic_punctuation = True # 自动添加标点符号
req.config.audio_channel_count = 1 # 单声道
6 将设置好的请求提交给riva服务器进行处理:
response = riva_asr.Recognize(req)
asr_best_transcript = response.results[0].alternatives[0].transcript
print("ASR Transcript:", asr_best_transcript)
print("\n\nFull Response Message:")
print(response)
#打印语音识别结果
ASR Transcript: What is natural language processing?
Full Response Message:
results {
alternatives {
transcript: "What is natural language processing? "
confidence: 1.0
}
channel_tag: 1
audio_processed: 4.1519999504089355
}
7 使用非英语的ASR处理流程首先启动 Riva Speech Skills 服务器
– 进入到快速入门指南文件夹。
cd riva_quickstart_v2.1.0
– 运行 bash riva_stop.sh 以关闭正在运行的 Riva Speech Skills 服务器。如果 Riva Speech Skills 服务器当前未运行,您可以跳过此步骤。
bash riva_stop.sh
– 更新 config.sh 文件:打开config.sh配置文件修改其中 language_code=(“en-US”)选择其他语种
– 重新运行 bash riva_init.sh 以下载并初始化所选语种的模型和管道。
– 重新运行 bash riva_start.sh 以重新启动 Riva Speech Skills 服务器。
通过在代码中的请求配置部分设置相应的语言代码(de-DE、ru-RU 和 zh-CN),我们可以类似地为德语、俄语和中文普通话运行 Riva ASR。
8 深入了解 Riva 功能
现在您已经对 Riva ASR API 有了基本的了解,在此处查看更多 Riva ASR(和 TTS)教程,了解如何使用 Riva ASR 的一些高级功能,包括根据您的特定需求定制 ASR。
-
有关如何在实际应用中使用 Riva 技能的更多示例,您可以关注虚拟助手演示
-
有关微服务gRPC可以参考 gRPC gRPC & Protocol Buffers
-
更多的客户端命令行可参考 API Command-line Clients
-
要了解有关 Riva 技能的更多信息,请访问 NVIDIA Riva 开发者主页NVIDIA Riva | NVIDIA Developer。
-
更多精彩内容,请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划。