NVIDIA Riva中文手册 (四) —— Riva ASR自动语音识别API的使用

本文介绍了如何使用NVIDIA Riva SDK与开箱即用的模型进行自动语音识别(ASR)。Riva提供GPU加速的ASR、TTS和NLP服务,支持多种语言。通过启动Riva服务器和客户端,导入Riva客户端库,创建并提交RecognizeRequest,可以实现语音到文本的转录。此外,还详细说明了如何为非英语语言设置RivaASR,并提供了进一步学习Riva功能的资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何通过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。

### NVIDIA Riva与C++集成 NVIDIA Riva 是一套用于构建语音应用程序的云原生服务和API集合。尽管主要通过Python API提供支持,但在某些情况下可能需要使用C++来实现更底层的功能或性能优化。 对于希望在C++项目中利用Riva功能的应用开发者来说,通常会采用以下几种方式: #### 使用gRPC接口 由于Riva提供了基于gRPC的服务端点,因此可以直接从C++客户端调用这些服务。这涉及到创建一个能够连接到运行中的Riva服务器并发送请求接收响应的程序[^1]。 ```cpp #include <grpcpp/grpcpp.h> #include "riva_api.grpc.pb.h" using grpc::Channel; using grpc::ClientContext; using grpc::Status; class RivaClient { public: explicit RivaClient(std::shared_ptr<Channel> channel) : stub_(nvidia::clara::riva::asr::SpeechRecognitionService::NewStub(channel)) {} std::string Recognize(const std::string& audio_file_path) { nvidia::clara::riva::asr::RecognizeRequest request; // 设置音频文件路径或其他参数... ClientContext context; nvidia::clara::riva::asr::RecognizeResponse response; Status status = stub_->Recognize(&context, request, &response); if (status.ok()) { return response.text(); } else { throw std::runtime_error(status.error_message()); } } private: std::unique_ptr<nvidia::clara::riva::asr::SpeechRecognitionService::Stub> stub_; }; ``` 此代码片段展示了如何设置一个简单的C++ gRPC客户端以访问Riva ASR自动语音识别)服务。 #### 利用CUDA库加速计算密集型任务 当处理涉及大量数据的操作时,可以考虑将部分工作负载转移到GPU上执行。为此目的而设计的一些特定于NVIDIA硬件特性的函数可以在cuDNN、TensorRT等CUDA相关库找到,并且能够在不牺牲太多易读性的情况下显著提高效率。 需要注意的是,在早期阶段如提到过的RIVA TNT系列芯片组时期,并不存在现今意义上的Riva平台及其对应的软件栈;上述讨论仅适用于现代版本的NVIDIA产品线以及其配套开发工具集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值