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

输入和输出#

本节总结了 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 缓冲区

特性#

下表总结了该插件的特性。

Gst-nvdsasr 插件特性#

特性

描述

发布版本

语音 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 服务的自定义库实现。将 libnvds_riva_asr_grpc.so 设置为 customlib-name,并将 create_riva_asr_grpc_ctx 设置为 create-speech-ctx-func

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 底层库的 riva_server 配置属性#

属性

含义

类型和范围

示例注释

名称

唯一名称

字符串

name: riva_server

详情

Riva 服务器设置详情的节点

节点

detail: server_uri: “localhost:50051”

server_uri

详情节点的一部分。指定 Riva ASR 服务地址。在 gRPC API 的情况下使用。

字符串

server_uri: “localhost:50051”

Riva 底层库的 riva_model 配置属性#

属性

含义

类型和范围

示例注释

名称

唯一名称

字符串

必须是 name: riva_model

详情

Riva 模型设置详情的节点

节点

detail: model_name: citrinet-1024-asr-trt-ensemble-vad-streaming

model_name

详情节点的一部分。指定使用哪个模型条目

字符串

model_name: citrinet-1024-asr-trt-ensemble-vad-streaming

Riva 底层库的 ds_riva_asr_stream 配置属性#

属性

含义

类型和范围

示例注释

名称

唯一名称

字符串

必须是 name: riva_asr_stream

详情

Riva ASR 流设置详情的节点

节点

detail: encoding: LINEAR_PCM

encoding

详情节点的一部分。指定输入数据格式。仅支持值 LINEAR_PCM

字符串

encoding: LINEAR_PCM

sample_rate_hertz

详情节点的一部分。输入音频采样率。仅支持值 16000

整数 & >0

sample_rate_hertz: 16000

language_code

详情节点的一部分。指定用于识别的语言。仅支持值 en-US

字符串

language_code: en-US

max_alternatives

详情节点的一部分。按最高置信度选择的最大候选项。目前仅支持 1

整数 & >0

max_alternatives: 1

enable_automatic_punctuation

详情节点的一部分。是否启用自动标点

布尔值

enable_automatic_punctuation: false

DS-Riva ASR 库设置的 ds_riva_asr_plugin 配置属性#

属性

含义

类型和范围

示例注释

名称

唯一名称

字符串

必须是 name: ds_riva_asr_plugin

详情

DS-Riva ASR 库详情的节点

节点

detail: final_only: false

final_only

详情节点的一部分。指定是否仅最终转录或同时输出部分转录

布尔值

final_only: false

enable_text_pts

详情节点的一部分。指定是否启用文本缓冲区时间戳。

布尔值

enable_text_pts: false

use_riva_pts

详情节点的一部分。指定是否使用 Riva 服务提供的时间信息来计算输出缓冲区的时间戳和持续时间。注意:目前,此选项仅支持非实时源

布尔值

use_riva_pts: false

force_final_trailing

详情节点的一部分。在最终转录后启用插入换行符

布尔值

force_final_trailing: false

Riva ASR 服务部署#

请查看 https://docs.nvda.net.cn/deeplearning/riva/user-guide/docs/quick-start-guide.html,了解使用 Riva 快速入门脚本部署模型的步骤

使用所需的 ASR 模型部署 Riva 服务器的示例步骤

  1. 下载 Riva 快速入门包

    $ ngc registry resource download-version nvidia/riva/riva_quickstart:1.5.0-beta
    $ cd riva_quickstart_v1.5.0-beta
    
  2. 更新 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}"
    )
    
  3. 运行 Riva 初始化脚本

    $ bash riva_init.sh
    
  4. 部署 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 运行示例测试。