跳至内容

如何在 CPU 上本地运行语音转文字:VibeASR.cpp 实战

学习如何在 CPU 上本地运行快速、准确、支持多语言的语音转文字:使用 Microsoft VibeASR.cpp,在 Windows、Linux 和 macOS 上完成文件转写、实时流式以及 Gradio 网页界面操作。
更新 2026年8月10日  · 9分钟

用 AI 探索

在 ChatGPT 中打开在 Claude 中打开在 Perplexity 中打开

近年来,自动语音识别(ASR)取得了长足进步。过去需要强大 GPU 且结果不稳定的语音转文字模型,如今已能在日常电脑上提供精准转写效果。 

与此同时,模型体积不断缩小,CPU 推理速度更快,多语言支持也在扩展,为用户带来了更佳的转写质量、速度、易用性与隐私性的组合。

微软的 VibeVoice-ASR-BitNet 正是这一进展的好例子。 

其优化后的 VibeASR.cpp 运行时,让您无需依赖独立 GPU 或将录音上传到云端,就能在 Windows、Linux 或 macOS 电脑上本地运行多语言语音转文字。

本指南将带您完成 VibeASR.cpp 的安装与构建、量化模型下载、命令行转写音频文件、运行持久化流式服务器,以及通过 Gradio 网页界面进行上传或录音转写。 

什么是 Microsoft VibeASR.cpp? 

VibeASR.cpp 是微软为 VibeVoice-ASR-BitNet 提供的官方 C++ 推理运行时。该模型是面向 CPU 高效本地推理的压缩多语言自动语音识别模型。 

VibeASR.cpp 并非独立的语音模型,而是提供运行该模型所需的优化引擎,使其无需独立 GPU 或云端语音服务即可实现实时转写。 

这使其适用于笔记本、台式机、边缘设备等算力受限的系统。 

VibeVoice-ASR-BitNet 架构图

来源: microsoft/VibeVoice-ASR-BitNet

为使 CPU 部署更实际可行,微软将原始 VibeVoice-ASR 架构中使用的 Qwen2.5-7B 语言模型组件替换为更小的 Qwen2.5-1.5B 模型。 

此外,还对两个主要组件采用了不同的量化方法:

  • I8_S 用于 VAE 音频编码器
  • I2_S 用于语言模型,并对嵌入部分使用更高精度

这些优化将模型总大小从约 4.62 GB 降至 1.58 GB,让其在笔记本和台式机上运行更为实际。 

尽管体积大幅缩小,压缩后的模型与更大架构相比,词错误率(WER)仅有约 1–4 个百分点的小幅上升。

VibeASR.cpp 利用 ggml 框架、自定义 CPU 指令以及算子融合来提升推理速度。 

根据微软的基准测试,在相近模型规模下,它可比 Whisper.cpp 快 1.6–2.3 倍,在支持的 CPU 上配合足够线程可实现快于实时的转写。

在微软的 CPU 基准测试中,模型在 4 线程时 RTF 为 0.638 线程时为 0.42,分别约等于 1.59× 与 2.38× 实时速度。 

其报告的 WER 包括 MLC English 8.25%AMI 头戴式麦克风 21.36%AMI 远距麦克风 25.87%,以及 LibriSpeech clean 2.41%,在转写准确性、模型体积与 CPU 性能之间达成了很好的平衡。 

1. 安装必需的构建工具

VibeASR.cpp 完全在 CPU 上运行,因此无需独立 GPU。您只需一台受支持的 Windows、Linux 或 macOS 电脑,Python 3.9 或更高版本、Git、C++ 编译器,以及约 4 GB 可用磁盘空间,用于源码、构建文件与模型。

构建过程还需要 CMake 和 Ninja。 

在 Windows 上,最简单的方式是使用 w64devkit,它在预配置的终端中提供编译器与构建工具。 

在 Linux 上,可直接通过系统包管理器安装所需软件包。

Windows

从 w64devkit 的 发布页下载最新的 x64 .exe 文件。

最新的 w64devkit 发布页面

下载的文件是自解压归档。运行它并将文件夹解压到一个简便的位置,例如:

C:\w64devkit

然后打开:

C:\w64devkit\w64devkit.exe

这将启动一个即开即用的终端,内置 GCC、CMake、Make 与 Ninja。您可以直接在该终端中完成后续 Windows 步骤,无需手动配置环境变量。

Linux

在 Ubuntu、Debian 及其衍生发行版中,可用一条命令安装所需的编译器与构建工具:

sudo apt update
sudo apt install build-essential cmake ninja-build git python3 python3-venv

这会安装 GCC 编译器、CMake、Ninja、Git、Python,以及创建 Python 虚拟环境所需的软件包。

macOS

在 macOS 上,先安装 Apple 的命令行开发工具:

xcode-select --install

您还需要 Git、Python 3.9 或更新版本、CMake 与 Ninja。安装这些工具最简单的方法是通过 Homebrew:

brew install git python cmake ninja

2. 克隆 VibeASR.cpp 并设置 Python 环境

以下设置流程在 Windows、Linux 与 macOS 上相同。 

唯一与操作系统相关的差异在于激活 Python 虚拟环境的命令。

打开终端,进入用于存放项目的文件夹,克隆 VibeASR.cpp 仓库:

git clone --recursive https://github.com/microsoft/VibeASR.cpp.git
cd VibeASR.cpp

正在克隆 microsoft/VibeASR.cpp

--recursive 选项还会下载所需的 llama.cpp 子模块。若缺少该子模块,构建推理运行时所需的部分文件将不存在。

在项目文件夹中创建一个 Python 虚拟环境。 

python -m venv .venv

使用对应操作系统的命令激活它。

在 w64devkit 终端下的 Windows:

. .venv/Scripts/activate

Linux 与 macOS:

source .venv/bin/activate

激活后,终端提示符前应显示 (.venv)。确认 Python 可用: 

python --version

升级 pip 并安装项目依赖: 

python -m pip install --upgrade pip

pip install -r requirements.txt

这些依赖包括搭建脚本、模型下载流程与本地 Gradio 网页界面所需的 Python 包。 

3. 构建 VibeASR.cpp 并下载模型

VibeASR.cpp 提供了一个设置脚本,同时处理 C++ 构建流程与模型下载。

它会编译命令行与流式可执行文件、安装所需的 GGUF 包,并将预量化模型文件下载到项目目录中。

运行设置脚本前,请确保已激活 Python 虚拟环境。

Linux 与 macOS 上运行:

python setup_env.py

Windows 上,请在 w64devkit 终端中运行:

CMAKE_GENERATOR=Ninja python setup_env.py

设置 CMAKE_GENERATOR=Ninja 可确保 CMake 使用 Ninja 构建系统,而不是尝试使用 w64devkit 环境中不可用的 Microsoft Visual C++。

该设置脚本将:

  • 安装必需的 gguf Python 包。
  • 配置并编译 VibeASR.cpp。
  • 构建推理与流式可执行文件。
  • 下载预量化的 VibeASR 模型文件。
  • 将下载的模型保存到 models/vibeasr 中。

流程完成后,主推理可执行文件位于以下位置。

Windows

build/bin/asr_infer.exe

Linux 与 macOS

build/bin/asr_infer

通过查看可执行文件的命令行选项,验证其是否构建成功。

Windows

./build/bin/asr_infer.exe --help

Linux 与 macOS

./build/bin/asr_infer --help

VibeASR.cpp 帮助菜单

4. 测试文件与流式转写

至此运行时与模型已就绪,您可以测试两种转写方式。 

标准推理可执行文件会处理单个音频文件并返回完整转写;而流式服务器会常驻内存加载模型,并在生成令牌的过程中逐步显示转写。

首先,在 VibeASR.cpp 项目文件夹内下载一个简短示例录音:

curl -L "https://homepages.inf.ed.ac.uk/htang2/notes/speech-samples/103-1240-0000.wav" -o recording.wav

该音频文件会以 recording.wav 的名称保存在当前项目目录。

转写音频文件

标准推理命令会加载音频编码器与语言模型,处理录音并输出完整转写。

Windows 上运行:

./build/bin/asr_infer.exe \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  --audio recording.wav \
  -t 6 \
  --greedy

Linux 与 macOS 上,使用相同命令但去掉 .exe 后缀:

./build/bin/asr_infer \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  --audio recording.wav \
  -t 6 \
  --greedy

使用 VibeASR.cpp 转写音频文件

-t 6 选项将 6 个 CPU 线程分配给推理。您可根据处理器情况调整该数值。 

--greedy 选项会在每步解码时选择最可能的令牌,以获得一致的转写结果。

在我的电脑上,14.085 秒的录音约耗时 13.7 秒处理:

RTF: 0.9726
Speed: approximately 1.03× real time

实时因子(RTF)用于比较处理时间与音频时长。 

RTF 低于 1.0 表示转写速度快于音频实际播放长度。性能会因处理器、操作系统、线程数与录音长度而异。

测试逐令牌流式输出

VibeASR.cpp 还包含一个持久化的流式服务器。它会一次性加载两份模型文件并保持常驻,允许您多次提交录音而无需每次重启并重新加载模型。

其输出方式类似于大语言模型的流式输出。 

无需等待完整转写结束,解码器在生成每个令牌时就会开始显示文本。 

有的令牌可能代表完整词语,也可能是词语的一部分或标点,但会持续逐步显示直至转写完成。

Windows 上启动服务器:

./build/bin/asr_stream_server.exe \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  -t 6 \
  --greedy

Linux 与 macOS 上运行:

./build/bin/asr_stream_server \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  -t 6 \
  --greedy

逐令牌流式:模型已就绪

等待服务器完成模型加载并显示:

---READY---

输入音频文件路径并回车:

recording.wav

转写将以逐令牌形式开始输出。录音完全处理后,服务器会显示:

---END---

使用 VibeASR.cpp 逐令牌流式转写

随后您可以在不重新加载模型的情况下继续输入其他音频文件路径。要停止服务器,输入:

exit

在需要批量转写或将 VibeASR.cpp 接入其他需要渐进式转写输出的应用时,这种常驻式工作流尤为实用。

5. 启动并测试网页界面

VibeASR.cpp 附带本地 Gradio 网页界面,可用于上传音频文件或通过麦克风直接录音。该流程在 Windows、Linux 与 macOS 上相同,但 Windows 的可执行文件以 .exe 结尾。

包括 Gradio、SoundFile 与 NumPy 在内的界面依赖,已通过 requirements.txt 安装。

首先确保虚拟环境已激活。

在 w64devkit 终端下的 Windows:

. .venv/Scripts/activate

Linux 与 macOS:

source .venv/bin/activate

Windows 上,用以下命令启动界面:

python demo/gradio_asr_demo.py \
  --port 7860 \
  --bin build/bin/asr_infer.exe \
  --server-bin build/bin/asr_stream_server.exe

Linux 与 macOS 上,默认可执行文件路径会自动检测:

python demo/gradio_asr_demo.py --port 7860

模型路径已在各操作系统的 Gradio 脚本内配置,无需在命令中手动指定。 

脚本也支持为标准推理可执行文件与流式服务器分别设置路径。

在浏览器中打开以下地址:

http://127.0.0.1:7860

浏览界面

该界面可让您:

  • 选择 CPU 模型。
  • 设置 CPU 线程数。
  • 在在线与离线处理之间切换。
  • 启用贪婪解码,或调节温度与 Top-p。
  • 上传音频文件或直接用麦克风录音。
  • 添加可选热词,如人名或技术术语。
  • 查看转写结果、音频时长与实时因子。

这里的在线模式并不意味着音频会被发送到线上服务

它会按块渐进式处理更长的录音,并在可用时使用 asr_stream_server

离线模式会在处理完整个音频文件后再显示结果。

VibASR.cpp 网页界面

测试一段短录音

首次测试中,我直接通过麦克风录制了一句短语,并选择 离线 模式与 4 个 CPU 线程。

VibASR.cpp 网页界面:离线模式测试短录音

RTF 为 0.9584 表示模型处理每秒音频大约需要 0.96 秒。 

这约等于 1.04× 实时速度,因此转写略快于录音的实际时长。

测试一段更长的录音

我还用一段约 109.7 秒的录音测试了界面。模型成功生成完整转写并报告:

RTF: 0.5305
Audio: 109.7s

VibASR.cpp 网页界面:离线模式转写长音频

这意味着模型处理每秒音频约需 0.53 秒。整段录音大约用时 58 秒 转写,速度约为 1.88× 实时

结语

本地语音识别的实用性让我印象深刻。 

即便在较老的 CPU 上,VibeASR.cpp 也能在无需 GPU、大量内存或大量存储的情况下,实现接近或快于实时的音频转写。 

编译生成的可执行文件还能集成进 Python 应用、封装为 FastAPI 接口,或作为更大本地工具的转写引擎。

主要需要权衡的设置是分配给进程的 CPU 线程数。 

您还需要在在线模式(逐步流式输出转写)与离线模式(处理完成后一次性返回完整结果)之间进行选择。

安装流程仍有改进空间,尤其是在 Windows、Linux 与 macOS 上。 

鉴于项目仍在发展,我预计安装与预编译二进制的支持会持续改进。一旦有稳定的独立二进制可用,我能想象自己会在更多本地语音转文字项目中使用该模型。

也推荐阅读我们的 GPT 实时转写 API 教程

FAQs

VibeASR 模型实际支持哪些语言?

VibeVoice-ASR 模型原生支持 50 多种语言。 其中包括英语、中文、法语、意大利语、韩语、葡萄牙语与越南语。 它不需要显式设置语言,并可自动处理“语码转换”(即在一句话中自然混用多种语言)。

在转写之前需要先转换我的 MP3 或视频文件吗?

如果您直接使用命令行可执行文件 asr_infer,它需要 .wav 文件(通常为 16kHz、16 位单声道)。如果您的音频为 MP3、M4A 或 FLAC 等其他格式,需先用 FFmpeg 等工具转换为 WAV,再传给 CLI。

模型能区分不同说话人或输出词级时间戳吗?

基础的 VibeVoice-ASR 架构在设计时就面向一次性生成包含“谁”(说话人分离)、“何时”(时间戳)与“内容”(文本)的结构化输出。 不过,轻量级 C++ 推理可执行文件(VibeASR.cpp)当前专注于渐进式原始文本转写。若要获取包含说话人 ID 与时间戳的完整结构化 JSON 输出,通常需要通过 Python 的 transformers 库运行该模型。

主题

DataCamp 精品课程

Courses

Python 语音语言处理

4小时
9.1K
学习如何在 Python 中从原始音频文件加载、转换并转录语音。
查看详情Right Arrow
开始课程
查看更多Right Arrow