跳到主要内容

Vosk 扩展

默认情况下,Runtime Speech Recognizer 插件使用 whisper.cpp 进行识别。在 whisper.cpp 不支持 GPU 加速的平台上,最典型的是 Android 以及基于 Android 的平台(如 Meta Quest),识别会回退到 CPU + 内部指令集,速度较慢且更耗电。Vosk 扩展插件提供了一种基于 Vosk 的替代提供程序,Vosk 是一个轻量级语音识别工具包,在硬件受限的设备上表现出色,在 Meta Quest 上表现尤为出色。

在 whisper.cpp 和 Vosk 之间切换只需要几个 Blueprint 节点,切换回来也同样简单,因此你可以同时保留这两个选项,并在需要时按平台选择提供商。

安装

要使用Vosk扩展:

  1. 确保主要的 Runtime Speech Recognizer 插件已安装在您的项目中。

  2. 这里下载 Vosk 扩展插件

  3. 将下载的压缩包中的文件夹解压到您项目的 Plugins 文件夹中(如果该文件夹不存在,请创建它)。

  4. 重新生成你的项目(此扩展需要 C++ 项目)

important
  • Vosk 扩展支持 Unreal Engine 5.0 至 5.8。

  • 此扩展以源代码形式提供,需要使用 C++ 项目。

  • 如需了解如何手动构建插件的更多信息,请参阅构建插件教程

切换到 Vosk 提供商

安装插件后,将语音识别器切换为 Vosk 只需三个节点,就在 CreateSpeechRecognizer 之后:

Set Speech Recognizer Provider Cast To Vosk

  1. 调用 Set Speech Recognizer Provider,传入 Vosk 提供程序类。
  2. 对结果执行 Cast To Runtime Vosk Speech Recognizer Provider
  3. 对转换结果调用 Set Vosk Model Path (By Name),从下拉菜单中选择一个已下载的模型。

您现有设置中的其他所有内容(Start Speech RecognitionProcess Audio Data、委托、VAD 等)均保持原样工作,无需修改。要切换回 whisper.cpp,请移除这三个节点,或者完全不调用 Set Speech Recognizer Provider,因为 whisper.cpp 是默认选项。

正在下载 Vosk 模型

Vosk 模型从项目设置 -> 插件 -> Runtime Speech Recognizer Vosk中下载和管理。该面板按语言分组列出预定义的模型目录,每个条目都有一个下载按钮,在下载和解压过程中会显示进度条,当模型已保存在磁盘上后,会出现一个删除按钮。

Vosk model settings panel

下载的模型会解压到 Content/RuntimeSpeechRecognizerVosk/Models 下,插件会自动处理将该文件夹暂存以用于打包。你也不仅限于使用单个打包模型:任何下载的模型都会保持可用,并且可以在运行时通过 Set Vosk Model Path (By Name) 进行选择。在 Android 上,模型文件随打包应用一同发布,首次使用时会被复制到持久存储中;这一过程在模型被选中时由插件内部自动处理。

支持的语言(点击展开)

预定义目录包含以下语言的模型:英语、印度英语、中文、俄语、法语、德语、西班牙语、葡萄牙语/巴西葡萄牙语、希腊语、土耳其语、越南语、意大利语、荷兰语、加泰罗尼亚语、阿拉伯语、突尼斯阿拉伯语、波斯语、菲律宾语、乌克兰语、哈萨克语、瑞典语、日语、世界语、印地语、捷克语、波兰语、乌兹别克语、韩语、布列塔尼语、古吉拉特语、塔吉克语、泰卢固语、吉尔吉斯语和格鲁吉亚语,以及一个专用的说话人识别模型。

有些语言在面板中有多种变体(例如,一个适合移动设备硬件的小型模型,外加一个更大、更精确的模型),因此值得直接在项目设置面板中查看目标语言可用的选项,而不是假设只有一种。请参阅完整的 Vosk 模型列表,了解各变体在准确性、大小和许可方面的详细信息。

参数和行为

Vosk 是一个与 whisper.cpp 根本不同的识别器,因此 识别参数列表 中的大多数条目都不适用于它。在 Vosk 提供程序上调用不支持的 setter 不会产生任何效果,因此为 whisper.cpp 编写的 Blueprint 逻辑在切换提供程序后无需修改即可继续正常工作。确实对 Vosk 产生作用的函数有:

  • 设置语言:选择使用哪种语言的模型。Vosk 不支持自动语言检测,因此如果您将语言设置为“自动”,该设置会被忽略。
  • 设置步长:在发送识别之前累积多少音频,机制与 whisper.cpp 相同。由于 Vosk 是流式识别器,较小的值(Vosk 提供程序默认为 200 毫秒)可保持部分结果的响应速度。
  • 设置最大 Token 数:在 Vosk 中被重新定义用途,详见下文。

设置 Max Tokens 和流式输出

Set Max Tokens 参数控制 Vosk 提供程序如何通过 On Recognized Text Segment 传递识别文本:

  • 0(默认):文本在内部累积,并在识别完成后作为一个完整的片段交付,要么通过 VAD 触发的停止(如 语音激活命令识别自动初始化语音识别 示例),要么通过你项目中调用 Stop Speech Recognition 或强制传递最后一个音频块的任何逻辑。这与 whisper.cpp 使用的基于片段的行为一致。
  • 大于 0:提供程序切换到流式模式。它不再等待完整片段,而是在识别过程中广播部分结果,每次都用同一短语的更长版本替换上一次的结果,直到该片段完成,文本重置以用于下一个片段。一个简短的语音在 On Recognized Text Segment 的多次广播中可能如下所示:
"The"
"The cat"
"The cat is"
"The cat is sleeping"

确切的数值对 Vosk 本身来说并不重要,因为它没有内置的 token 限制。任何大于 0 的值都会启用流式传输。

由于部分结果仅按音频入队的频率到达(由 Set Step Size 控制),请将较低的 Max Tokens 与较小的 Step Size 搭配使用,以获得响应灵敏的实时输出。

平台支持

Vosk 扩展可在 Windows、Android 以及 Meta Quest 等基于 Android 的平台上运行。它在 Android 和 Meta Quest 上最为实用,因为 whisper.cpp 在这些平台上没有 GPU 加速路径,而且它在 Meta Quest 上表现尤其出色。如果你已经在使用 Windows 或其他支持 Vulkan 或 Metal 加速的桌面平台,whisper.cpp 可能是更好的默认选择。Vosk 旨在作为 whisper.cpp 表现最弱的平台上的替代方案。

高级:直接使用模型

项目设置面板涵盖了大多数项目的模型下载和删除。如果你的项目需要直接处理模型,而不是依赖编辑器面板,例如在运行时检查可用性或管理文件,插件会公开底层库函数:

  • Get Available Vosk Model Names:返回当前即可使用的模型名称,无论这些模型是已经解压到磁盘,还是仅打包完成并等待首次使用。这就是 Set Vosk Model Path (By Name) 下拉列表中选项的来源。
  • Is Vosk Model Available:与上述检查相同,按 ID 对单个模型进行检查。
  • Get Vosk Models Directory:返回运行时读取模型所在目录的绝对路径。
  • Get Vosk Model Folder Path:返回磁盘上特定模型文件夹的绝对路径。
  • Delete Vosk Model Files:从磁盘删除模型的已解压文件。