跳到主要内容

如何使用插件

Runtime Speech Recognizer 插件旨在识别来自输入音频数据的单词。它使用了 whisper.cpp 的一个稍作修改的版本来与引擎配合工作。要使用该插件,请按照以下步骤操作:

编辑器端

  1. 根据这里的描述,为你的项目选择合适的语言模型。

运行时端

  1. 创建一个 Speech Recognizer 并设置必要的参数(CreateSpeechRecognizer,参数请参考这里)。
  2. 绑定所需的委托(OnRecognitionFinishedOnRecognizedTextSegmentOnRecognitionError)。
  3. 启动语音识别(StartSpeechRecognition)。
  4. 处理音频数据并等待来自委托的结果(ProcessAudioData)。
  5. 需要时停止 Speech Recognizer(例如,在 OnRecognitionFinished 广播后)。

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

识别参数

该插件支持流式(streaming)和非流式(non-streaming)音频数据识别。要调整识别参数以满足你的特定用例,可以调用 SetStreamingDefaultsSetNonStreamingDefaults,此外,你还可以手动设置单个参数,如线程数、步长、是否将输入语言翻译为英语,以及是否使用先前的转录内容。完整参数列表请参考识别参数列表

提高性能

请参考如何提升性能部分,以获取优化插件性能的技巧。

语音活动检测(VAD)

在处理音频输入时,尤其是在流式识别场景中,建议使用 语音活动检测(VAD)来过滤掉无声或仅包含噪音的音频片段,以免它们传入识别器。该过滤可以在 Capturable sound wave 端启用,使用 Runtime Audio Importer 插件可帮助防止语言模型出现幻觉——即错误地在噪音中寻找模式并生成错误的转写内容。关于 VAD 配置的详细说明,请参考语音活动检测文档

在随机附带的演示项目中,VAD 默认为启用状态。你可以在演示项目中找到有关演示实现的更多信息。

示例

插件的 Content -> Demo 文件夹中包含一个良好的项目演示示例,你可以参考它的实现

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

流式音频输入示例

注意: 在 UE 5.3 及其他版本中,复制 Blueprint 后可能会遇到缺失的节点。这可能是由于不同引擎版本之间的节点序列化方式不同所致。在你的实现中,务必确保所有节点均正确连接。

1. 基本流式识别

此示例演示了一个基本设置,即使用 Capturable sound wave 从麦克风捕获音频数据流,并将其传递给语音识别器。它会录制约 5 秒钟的语音,然后进行识别,非常适合快速测试和简单实现。可复制的节点

此设置的关键特性:

  • 固定 5 秒录音时长
  • 简单的单次识别
  • 最小化的设置要求
  • 适用于测试和原型开发

2. 可控流式识别

此示例扩展了基本流式识别功能,增加了对识别过程的手动控制。你可以随时开始或停止识别,使其适用于需要精确控制识别时机的场景。可复制的节点

此设置的关键特性:

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

3. 语音激活的命令识别

此示例针对命令识别场景进行了优化。它结合了流式识别和语音活动检测(VAD),使得系统在检测到用户停止说话后才开始处理识别。只有在检测到静默后,识别器才会处理累积的语音,使其非常适用于基于命令的界面。可复制的节点

此设置的关键特性:

  • 手动开始/停止控制
  • 启用了 VAD 以检测语音片段
  • 仅在检测到静默时自动触发识别
  • 适用于短命令识别
  • 通过仅识别有效语音来减少处理开销

非流式音频输入

此示例将音频数据导入 Imported sound wave,然后在导入完成后识别完整的音频数据。可复制的节点