跳到主要内容

如何使用插件

Runtime Speech Recognizer 插件旨在从传入的音频数据中识别单词。它使用了略微修改版的 whisper.cpp 以与引擎协同工作。要使用该插件,请按照以下步骤操作:

编辑器侧

  1. 按照此处所述,为您的项目选择合适的语言模型。

运行时端

  1. 创建一个语音识别器并设置必要的参数(CreateSpeechRecognizer,参数见此处)。
  2. 绑定所需的委托(OnRecognitionFinishedOnRecognizedTextSegmentOnRecognitionError)。
  3. 开始语音识别(StartSpeechRecognition)。
  4. 处理音频数据并等待委托返回结果(ProcessAudioData)。
  5. 在需要时停止语音识别器(例如在 OnRecognitionFinished 广播之后)。

该插件支持以浮点32位交错PCM格式输入音频。虽然它与 Runtime Audio Importer 配合良好,但并不直接依赖它。

识别参数

该插件支持流式和非流式音频数据识别。要为您的特定使用场景调整识别参数,请调用 SetStreamingDefaultsSetNonStreamingDefaults。此外,您可以灵活地手动设置各个参数,例如线程数、步长、是否将传入的语言翻译成英语,以及是否使用过去的转录。有关可用参数的完整列表,请参阅识别参数列表

提高性能

有关优化插件性能的提示,请参阅如何提高性能部分。在 Android 及基于 Android 的平台(如 Meta Quest)上,还可以考虑使用 Vosk 扩展,它为在 whisper.cpp 中不支持 GPU 加速的硬件提供了替代提供程序。

语音活动检测(VAD)

处理音频输入时,尤其是在流式传输场景中,建议使用语音活动检测(VAD)在音频片段到达识别器之前过滤掉空白或仅含噪声的片段。可以通过 Runtime Audio Importer 插件在可捕获声波一侧启用此过滤功能,这有助于防止语言模型产生幻觉——试图在噪声中寻找模式并生成错误的转录文本。

为了获得最佳的语音识别效果,我们建议使用 Silero VAD 提供程序,它提供更出色的抗噪能力和更准确的语音检测。Silero VAD 可作为 Runtime Audio Importer 插件的扩展使用。有关 VAD 配置的详细说明,请参阅语音活动检测文档

备注

以下示例中的可复制节点出于兼容性原因使用默认的 VAD 提供程序。要提高识别准确度,您可以通过以下方式轻松切换到 Silero VAD:

  1. 按照 Silero VAD 扩展部分 中的说明安装 Silero VAD 扩展。
  2. 使用 Toggle VAD 节点启用 VAD 后,添加一个 Set VAD Provider 节点,然后从下拉菜单中选择“Silero”。

插件附带的演示项目中,VAD 默认启用。您可以在演示项目中找到有关演示实现的更多信息。

示例

插件自带的 Content -> Demo 文件夹中有一个很好的项目演示,您可以将其作为实现的示例

这些示例演示了如何使用 Runtime Speech Recognizer 插件处理流式和非流式音频输入,并以 Runtime Audio Importer 作为获取音频数据的示例。请注意,需要单独下载 RuntimeAudioImporter 才能使用示例中展示的相同音频导入功能(例如可捕获声波和 ImportAudioFromFile)。这些示例仅用于说明核心概念,不包含错误处理。

流式音频输入示例

注意: 在 UE 5.3 及其他版本中,复制 Blueprints 后可能会遇到节点丢失的情况。这可能是由于引擎版本之间的节点序列化差异所致。请始终验证你的实现中所有节点是否都已正确连接。

1. 基础流式识别

此示例演示了使用可捕获声波(Capturable sound wave)以流的形式从麦克风捕获音频数据,并将其传递给语音识别器的基本设置。它会录制约 5 秒的语音,然后处理识别,适用于快速测试和简单实现。 可复制节点

此设置的关键功能:

  • 固定5秒录音时长
  • 简单的一次性识别
  • 最低设置要求
  • 非常适合测试和原型制作

2. 受控流式识别

此示例通过添加对识别过程的手动控制,扩展了基本的流式设置。它允许你随时开始和停止识别,使其适用于需要精确控制识别时机的场景。可复制的节点

此设置的关键特性:

  • 手动开始/停止控制
  • 持续识别能力
  • 灵活的录音时长
  • 适用于交互式应用程序

3. 语音激活命令识别

此示例针对命令识别场景进行了优化。它将流式识别与语音活动检测(VAD)相结合,在用户停止说话时自动处理语音。识别器仅在检测到静音后才开始处理累积的语音,因此非常适合基于命令的界面。可复制节点

此配置的关键特性:

  • 手动启动/停止控制
  • 已启用语音活动检测 (VAD) 以检测语音片段
  • 检测到静音时自动触发识别
  • 最适合短命令识别
  • 通过仅识别实际语音来降低处理开销

4. 自动初始化语音识别并进行最终缓冲区处理

此示例是语音激活识别方法的另一种变体,其生命周期处理方式不同。它会在初始化期间自动启动识别器,并在反初始化期间停止识别器。一个关键特性是,它在停止识别器之前处理最后累积的音频缓冲区,从而确保在用户想要结束识别过程时不会丢失任何语音数据。这种设置对于需要在说话中途停止时仍能捕获完整用户话语的应用程序特别有用。可复制节点

此设置的关键特性:

  • 初始化时自动启动识别器
  • 反初始化时自动停止识别器
  • 在完全停止前处理最终的音频缓冲区
  • 使用语音活动检测(VAD)实现高效识别
  • 确保停止时不会丢失任何语音数据

非流式音频输入

此示例将音频数据导入到导入的声波中,并在导入完成后识别完整音频数据。可复制的节点