跳到主要内容

如何使用该插件

Runtime Speech Recognizer 插件旨在从输入的音频数据中识别词语。它使用了稍作修改的 whisper.cpp 版本以适配引擎。使用该插件请遵循以下步骤:

编辑器端

  1. 根据此处的说明为项目选择合适的语言模型。

运行时端

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

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

识别参数

插件支持流式和非流式音频数据识别。要针对特定用例调整识别参数,可调用 SetStreamingDefaultsSetNonStreamingDefaults。此外,您还可以手动设置单个参数,如线程数、步长、是否将输入语言翻译为英语以及是否使用历史转录。完整参数列表请参阅识别参数列表

性能优化

关于如何优化插件性能的技巧,请参考如何提升性能章节。

语音活动检测 (VAD)

处理音频输入时(特别是在流式场景中),建议使用语音活动检测(VAD)在音频段到达识别器之前过滤掉空白或纯噪声片段。可通过 Runtime Audio Importer 插件在可捕获声波端启用此过滤功能,防止语言模型产生幻觉(试图在噪声中寻找模式并生成错误转录)。VAD配置的详细说明请参阅语音活动检测文档

插件附带的演示项目默认启用了VAD。您可以在演示项目中找到更多实现细节。

示例

插件自带的Content -> Demo文件夹中包含一个完整的项目演示,可作为实现参考

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

流式音频输入示例

注意: 在UE 5.3及其他版本中,复制蓝图后可能会遇到节点丢失问题。这是由于不同引擎版本间节点序列化差异导致的。请始终在实现中验证所有节点连接是否正确。

1. 基础流式识别

此示例演示了使用可捕获声波从麦克风捕获音频流并传递给语音识别器的基本设置。它会录制约5秒语音后进行识别处理,适合快速测试和简单实现。可复制节点

该设置的关键特性:

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

2. 可控流式识别

此示例在基础流式设置上增加了对手动控制识别过程的支持。允许随时开始/停止识别,适合需要精确控制识别时机的场景。可复制节点

该设置的关键特性:

  • 手动开始/停止控制
  • 支持持续识别
  • 灵活的录制时长
  • 适合交互式应用

3. 语音激活指令识别

此示例专为指令识别场景优化。它将流式识别与语音活动检测(VAD)结合,在检测到用户停止说话时自动处理累积语音。仅当检测到静音时才启动识别,非常适合基于指令的交互界面。可复制节点

该设置的关键特性:

  • 手动开始/停止控制
  • 启用语音活动检测(VAD)识别语音片段
  • 静音时自动触发识别
  • 优化短指令识别
  • 仅处理有效语音降低开销

4. 自动初始化语音识别(含最终缓冲区处理)

此示例是语音激活识别的另一种实现方式,采用不同的生命周期管理。它在初始化时自动启动识别器,在反初始化时停止。关键特性是在停止识别器前会处理最后累积的音频缓冲区,确保用户结束识别过程时不会丢失任何语音数据。这种设置特别适用于需要捕获完整用户语句(即使在中途停止时)的应用场景。可复制节点

该设置的关键特性:

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

非流式音频输入

此示例将音频数据导入到Imported sound wave中,并在完整导入后一次性识别全部音频数据。可复制节点