Gst-nvdsasr#
Gst-nvdsasr 插件对输入音频数据执行自动语音识别 (ASR)。该插件提供了一种在运行时加载自定义 ASR 底层库的机制。它在 x86 和 Jetson 平台上均受支持,并且可以在 x86、Jetson 设备或 DeepStream Docker 容器内部使用。提供了一个自定义库 libnvds_riva_asr_grpc.so
,它使用 gRPC API 访问 Riva ASR 服务。该库使用优化的 Riva 模型与 NVIDIA Riva SDK 的 ASR 服务进行通信,以实现语音识别和标点符号-大小写转换。
注意
DS-Riva ASR 库
libnvds_riva_asr_grpc.so
使用 gRPC API 访问 Riva ASR 服务。Riva ASR 服务应在使用此库之前启动。所需步骤在下面的“Riva ASR 服务部署”部分中概述。客户端需要安装 gRPC C++ 库 (v1.38)。所需步骤在下面的“gRPC C++ 库安装”部分中概述。
注意
libnvds_riva_asr_grpc.so
库与 NVIDIA Riva Release 1.5.0 Beta 或更高版本配合使用。
该插件接受来自上游组件的原始 PCM 音频 GStreamer 缓冲区 (GstBuffer
)。它将音频转换为通用文本 GstBuffer
输出。
模型需要 S16LE(有符号 16 位小端)原始音频数据输入。可以通过 YAML 格式文件(通过在 Gst-nvdsasr
插件上设置属性)配置库设置,该文件具有插件的多部分设置。
如下图所示,输入的 S16LE 原始音频数据由 Riva ASR 服务进行预处理和推理。最终输出以 UTF8 文本形式提供。

输入和输出#
本节总结了 Gst-nvdsasr 插件与基于 gRPC 的 ASR 库的输入、输出和通信功能。
输入
原始音频 GStreamer 缓冲区
控制参数
customlib-name
: 设置插件加载以执行推理的自定义 ASR 库。使用:libnvds_riva_asr_grpc.so
create-speech-ctx-func
: 用于创建 ASR 语音上下文的符号名称。使用:create_riva_asr_grpc_ctx
config-file
: 用于配置插件的文本文件。使用riva_asr_grpc_conf.yml
输出
包含 ASR 输出的文本 GStreamer 缓冲区
特性#
下表总结了该插件的特性。
特性 |
描述 |
发布版本 |
---|---|---|
语音 ASR 模板 |
该插件是一个 ASR 语音基础,可以在运行时支持自定义 ASR 库加载 |
DS 6.0 |
实时流转录 |
支持实时部分转录输出 |
DS 6.0 |
最终转录 |
支持仅对本地音频流有用的最终转录 |
DS 6.0 |
语言支持 |
该插件目前仅针对英语 (en-US) 进行了测试 |
DS 6.0 |
单词标点 |
支持单词标点和大小写 |
DS 6.0 |
带有 gRPC API 实现的自定义库 |
支持使用 gRPC API 访问 Riva ASR gRPC 服务的自定义库实现。将 |
DS 6.0 |
x86 平台支持 |
– |
DS 6.0 |
Jetson 平台支持 |
– |
DS 6.2 |
DS-Riva ASR 库 YAML 文件配置规范#
DS-Riva ASR 配置文件使用 YAML 1.2 文件格式:https://yaml.org/spec/1.2/spec.html。
配置文件中有多个部分。
riva_asr_grpc_conf.yml
yml 文件的示例位于/opt/nvidia/deepstream/deepstream/sources/apps/audio_apps/deepstream_asr_tts_app/
。每个部分都有一个name
指示唯一的部分名称,以及一个detail
指示设置详情。name: riva_server
部分在其对应的节点detail:
中配置 Riva ASR 服务器设置。name: riva_model
部分在其对应的节点detail:
中配置 Riva ASR 模型条目。name: riva_asr_stream
部分在其对应的节点detail:
中配置 Riva 底层库支持的功能。每个 ASR 插件实例将启动一个独立的 Riva 流。不同插件实例之间的设置可能不同。name: ds_riva_asr_plugin
部分在其对应的节点detail:
中配置 DS-Riva ASR 设置。根据 YAML 规范,在 2 个相邻部分之间插入一个分隔线
---
。
Gst 属性#
下表描述了 Gst-nvdsasr
插件的 Gst 属性。
属性 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|
名称 |
唯一名称 |
字符串 |
|
详情 |
Riva 服务器设置详情的节点 |
节点 |
|
server_uri |
详情节点的一部分。指定 Riva ASR 服务地址。在 gRPC API 的情况下使用。 |
字符串 |
|
属性 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|
名称 |
唯一名称 |
字符串 |
必须是 |
详情 |
Riva 模型设置详情的节点 |
节点 |
|
model_name |
详情节点的一部分。指定使用哪个模型条目 |
字符串 |
|
属性 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|
名称 |
唯一名称 |
字符串 |
必须是 |
详情 |
Riva ASR 流设置详情的节点 |
节点 |
|
encoding |
详情节点的一部分。指定输入数据格式。仅支持值 LINEAR_PCM |
字符串 |
|
sample_rate_hertz |
详情节点的一部分。输入音频采样率。仅支持值 16000 |
整数 & >0 |
|
language_code |
详情节点的一部分。指定用于识别的语言。仅支持值 en-US |
字符串 |
|
max_alternatives |
详情节点的一部分。按最高置信度选择的最大候选项。目前仅支持 1 |
整数 & >0 |
|
enable_automatic_punctuation |
详情节点的一部分。是否启用自动标点 |
布尔值 |
|
属性 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|
名称 |
唯一名称 |
字符串 |
必须是 |
详情 |
DS-Riva ASR 库详情的节点 |
节点 |
|
final_only |
详情节点的一部分。指定是否仅最终转录或同时输出部分转录 |
布尔值 |
|
enable_text_pts |
详情节点的一部分。指定是否启用文本缓冲区时间戳。 |
布尔值 |
|
use_riva_pts |
详情节点的一部分。指定是否使用 Riva 服务提供的时间信息来计算输出缓冲区的时间戳和持续时间。注意:目前,此选项仅支持非实时源 |
布尔值 |
|
force_final_trailing |
详情节点的一部分。在最终转录后启用插入换行符 |
布尔值 |
|
Riva ASR 服务部署#
请查看 https://docs.nvda.net.cn/deeplearning/riva/user-guide/docs/quick-start-guide.html,了解使用 Riva 快速入门脚本部署模型的步骤
使用所需的 ASR 模型部署 Riva 服务器的示例步骤
下载 Riva 快速入门包
$ ngc registry resource download-version nvidia/riva/riva_quickstart:1.5.0-beta $ cd riva_quickstart_v1.5.0-beta
更新 config.sh 文件以获取所需的 ASR 模型,例如 CitriNet-1024
service_enabled_asr=true service_enabled_nlp=false service_enabled_tts=false riva_model_loc="riva-asr-model-repo" models_asr=( "${riva_ngc_org}/${riva_ngc_team}/rmir_asr_citrinet_1024_asrset1p7_streaming:${riva_ngc_model_version}" "${riva_ngc_org}/${riva_ngc_team}/rmir_nlp_punctuation_bert_base:${riva_ngc_model_version}" )
运行 Riva 初始化脚本
$ bash riva_init.sh
部署 Riva ASR 服务
$ bash riva_start.sh
要在应用程序成功运行后停止 ASR 服务,请运行以下命令
$ bash riva_stop.sh
gRPC C++ 库安装#
DS-Riva ASR 库需要安装 gRPC C++ 共享库 v1.38 才能访问 Riva ASR gRPC 服务。要安装库,请按照 https://grpc.org.cn/docs/languages/cpp/quickstart/ 中给出的步骤进行操作,并将 -DBUILD_SHARED_LIBS=ON
添加到 cmake 构建选项。(建议使用 make -j4
而不是 make -j
)
或
使用包含的脚本安装 gRPC C++ 库,此脚本执行相同的步骤
$ cd /opt/nvidia/deepstream/deepstream/sources/apps/audio_apps/deepstream_asr_app
$ sudo chmod +x gRPC_installation.sh
$ ./gRPC_installation.sh
请运行以下命令将安装路径添加到 LD_LIBRARY_PATH 环境变量
$ export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH
gRPC C++ 库已预安装在 DeepStream dGPU Docker 镜像上。在 dGPU Docker 容器中,请运行以下命令将安装路径添加到 LD_LIBRARY_PATH 环境变量
$ export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH
示例测试应用程序#
有关 Gst-nvdsasr
示例测试的信息,请参阅目录 sources/apps/audio_apps/deepstream_asr_app
下的源代码。按照 README
运行示例测试。