如何使用插件
Runtime Speech Recognizer 插件旨在识别来自输入音频数据的单词。它使用了 whisper.cpp 的一个稍作修改的版本来与引擎配合工作。要使用该插件,请按照以下步骤操作:
编辑器端
- 根据这里的描述,为你的项目选择合适的语言模型。
运行时端
- 创建一个 Speech Recognizer 并设置必要的参数(CreateSpeechRecognizer,参数请参考这里)。
- 绑定所需的委托(OnRecognitionFinished、OnRecognizedTextSegment 和 OnRecognitionError)。
- 启动语音识别(StartSpeechRecognition)。
- 处理音频 数据并等待来自委托的结果(ProcessAudioData)。
- 需要时停止 Speech Recognizer(例如,在 OnRecognitionFinished 广播后)。
该插件支持输入音频格式为 浮点 32 位交错 PCM。虽然它与 Runtime Audio Importer 配合使用效果很好,但并不直接依赖它。
识别参数
该插件支持流式(streaming)和非流式(non-streaming)音频数据识别。要调整识别参数以满足你的特定用例,可以调用 SetStreamingDefaults
或 SetNonStreamingDefaults
,此外,你还可以手动设置单个参数,如线程数、步长、是否将输入语言翻译为英语,以及是否使用先前的转录内容。完整参数列表请参考识别参数列表。
提高性能
请参考如何提升性能部分,以获取优化插件性能的技巧。
语音活动检测(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,然后在导入完成后识别完整的音频数据。可复制的节点。