1. Windows 10 下 Whisper-CPP 编译安装全记录
最近在 Windows 10 系统上折腾 Whisper-CPP 的安装过程,遇到了不少坑,特别是 CPU 指令集兼容性问题。这里把完整的安装过程和解决方案整理出来,希望能帮到有同样需求的朋友。
Whisper-CPP 是 OpenAI Whisper 语音识别模型的 C++ 实现版本,相比原版 Python 实现,它更轻量、运行效率更高,特别适合本地部署和开发集成。下面是我在 Intel Xeon E5-2643 v2 处理器(Ivy Bridge 架构)的 Windows 10 机器上的完整安装过程。
1.1 环境准备与工具安装
首先需要准备必要的开发工具链。由于我的系统是新装的,几乎什么开发环境都没有,所以从头开始:
- 安装 CMake:从官网下载最新版 CMake(我用的 3.31.5),选择添加到系统 PATH
- 安装 Visual Studio 2022:社区版即可,安装时务必勾选"使用 C++ 的桌面开发"工作负载
- Git:用于克隆仓库,可以从 Git 官网安装
注意:如果你的机器性能一般,Visual Studio 安装会比较耗时,建议在空闲时进行。我安装时选择了最小化安装,只勾选了必要的 MSVC 编译器和 CMake 支持。
验证工具是否安装成功:
bash复制cmake --version # 应显示 CMake 版本
cl # 应显示 MSVC 编译器信息
git --version # 应显示 Git 版本
1.2 源代码获取与初步尝试
直接从 GitHub 克隆 whisper.cpp 仓库:
bash复制git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
第一次尝试编译(失败):
bash复制cmake -B build
cmake --build build -j --config Release
这里遇到了第一个坑——我的 CPU(Xeon E5-2643 v2)不支持 AVX2 指令集,而默认编译选项会启用 AVX2,导致运行时出现"Illegal instruction"错误。
1.3 解决 CPU 指令集兼容性问题
为了解决这个问题,需要明确几点:
- Ivy Bridge 架构支持 AVX 但不支持 AVX2
- 现代编译器默认会使用 AVX2 优化
- 需要明确禁用 AVX2 并仅启用 AVX
正确的编译命令:
bash复制cmake -B build -G "Visual Studio 17 2022" -A x64 -DGGML_AVX2=OFF -DGGML_AVX=ON
cmake --build build --config Release --target whisper-cli
专业提示:可以通过
wmic cpu get caption, name命令查看 CPU 支持的指令集。对于老款 CPU,编译时务必检查这些参数。
1.4 模型文件下载与验证
编译完成后,还需要下载模型文件。Whisper 提供了多种规模的模型,我选择了 base.en(142MB)作为测试:
bash复制mkdir -p models
curl -L -o models/ggml-base.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin
如果直接从 Hugging Face 下载速度慢,可以尝试使用镜像站点,或者从 GitHub Releases 页面下载。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 使用测试与性能优化
2.1 基本使用方法
编译生成的 whisper-cli.exe 位于 build/bin/Release/ 目录下。基本使用语法:
bash复制whisper-cli.exe -m models/ggml-base.en.bin -f audio.wav [其他参数]
测试仓库自带的 JFK 演讲样本:
bash复制whisper-cli.exe -m models/ggml-base.en.bin -f samples/jfk.wav
成功输出:
code复制And so my fellow Americans, ask not what your country can do for you, ask what you can do for your country.
2.2 性能优化建议
- 线程数调整:通过
-t参数指定线程数,一般设置为 CPU 物理核心数 - 实时模式:添加
--prompt "..."可以提供上下文提示,提高识别准确率 - 量化模型:可以使用量化后的模型减小内存占用
例如,使用 4 个线程运行:
bash复制whisper-cli.exe -m models/ggml-base.en.bin -f audio.wav -t 4
2.3 不同模型对比
| 模型类型 | 大小 | 内存占用 | 相对速度 | 适合场景 |
|---|---|---|---|---|
| tiny.en | 75MB | ~400MB | 32x | 实时转录,性能优先 |
| base.en | 142MB | ~500MB | 16x | 平衡选择(推荐) |
| small.en | 466MB | ~1GB | 6x | 更高准确率 |
| medium | 1.5GB | ~2.5GB | 2x | 多语言支持 |
| large | 2.9GB | ~4.5GB | 1x | 最高准确率 |
实测数据:在我的 Xeon E5-2643 v2 上,base.en 模型转录 30 秒音频约需 5-8 秒(单线程)
3. 常见问题与解决方案
3.1 编译相关问题
问题1:编译时报错"illegal instruction"
原因:CPU 不支持 AVX2 指令集
解决:重新编译并禁用 AVX2:-DGGML_AVX2=OFF -DGGML_AVX=ON
问题2:CMake 找不到编译器
原因:VS 开发环境未正确配置
解决:在"开始"菜单中打开"x64 Native Tools Command Prompt"再执行编译
3.2 运行时问题
问题1:无法打开音频文件
原因:Whisper-CPP 只支持 16-bit WAV 格式
解决:使用 ffmpeg 转换:
bash复制ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
问题2:转录结果不准确
解决:
- 尝试更大的模型
- 添加
--prompt "专业术语,人名"提供上下文 - 检查音频质量(背景噪声会影响识别)
3.3 模型相关
问题:如何下载其他语言模型?
解决:修改 URL 中的模型名称,例如中文模型:
bash复制curl -L -o models/ggml-medium.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium.bin
4. 高级应用与集成建议
4.1 Python 集成方案
虽然 Whisper-CPP 是 C++ 实现,但可以通过 Python 绑定使用:
- 安装 Python 绑定:
bash复制pip install whisper-cpp-py
- Python 中使用:
python复制from whisper_cpp import Whisper
model = Whisper("models/ggml-base.en.bin")
result = model.transcribe("audio.wav")
print(result["text"])
4.2 实时语音转录实现
结合麦克风输入可以实现实时转录,基本思路:
- 使用 PyAudio 捕获音频
- 分段保存为 WAV 文件
- 调用 Whisper-CPP 转录
- 实时显示结果
核心代码片段:
python复制import pyaudio
import wave
import subprocess
# 音频捕获参数
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=CHANNELS,
rate=RATE, input=True,
frames_per_buffer=CHUNK)
# 每5秒转录一次
while True:
frames = []
for _ in range(0, int(RATE / CHUNK * 5)):
data = stream.read(CHUNK)
frames.append(data)
# 保存临时文件
wf = wave.open("temp.wav", 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
# 调用 whisper-cli
result = subprocess.run(["whisper-cli.exe", "-m", "models/ggml-base.en.bin",
"-f", "temp.wav", "-t", "4"],
capture_output=True, text=True)
print(result.stdout)
4.3 性能优化技巧
- 模型量化:使用量化模型可以显著减少内存占用
bash复制./quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0
- GPU 加速:如果有 NVIDIA GPU,可以编译支持 CUDA 的版本
bash复制cmake -B build -DWHISPER_CUBLAS=ON
- 批处理模式:一次处理多个文件减少启动开销
bash复制whisper-cli.exe -m model.bin -f file1.wav file2.wav ...
经过这一番折腾,总算在 Windows 10 老机器上成功部署了 Whisper-CPP。最大的教训就是一定要先确认 CPU 支持的指令集,避免盲目使用预编译版本。对于开发者来说,从源码编译虽然麻烦,但能获得更好的兼容性和性能调优空间。
