handy-computer/transcribe.cpp
GitHub: handy-computer/transcribe.cpp
基于 ggml 的 C/C++ 语音转文本推理库,支持 16+ 模型家族在 CPU 和 GPU 上的高效本地部署。
Stars: 1020 | Forks: 25
# transcribe.cpp
C/C++ 语音转文本推理库。通过 [GGUF](https://github.com/ggerganov/gguf) 模型在 [ggml](https://github.com/ggml-org/ggml) runtime 上运行多种 STT 模型家族,并提供 Metal、Vulkan 和 CUDA 后端以实现快速的 GPU 推理,同时包含一条由 tinyBLAS 加速的 CPU 路径。
支持 16 个模型家族和 60 多种变体,涵盖流式和批处理。我们在 [`handy-computer`](https://huggingface.co/handy-computer) 下发布的每一个模型都经过了数值验证,并针对其参考实现进行了 WER 测试。
**支持的模型:**
| 家族 | 变体 | 文档 |
| --- | --- | --- |
| Parakeet | 10 种变体:TDT、RNN-T、CTC、TDT+CTC (110M–1.1B) | [docs/models/parakeet.md](docs/models/parakeet.md) |
| Canary | `canary-1b`, `canary-1b-v2`, `canary-1b-flash`, `canary-180m-flash` | [docs/models/canary.md](docs/models/canary.md) |
| Canary-Qwen | `canary-qwen-2.5b` (FastConformer + Qwen3-1.7B SALM) | [docs/models/canary-qwen-2.5b.md](docs/models/canary-qwen-2.5b.md) |
| Whisper | 12 种变体(从 `tiny` 到 `large-v3-turbo`,以及 `.en` 兄弟版本) | [docs/models/whisper.md](docs/models/whisper.md) |
| GigaAM | `gigaam-v3-{e2e-rnnt,e2e-ctc,rnnt,ctc}` | [docs/models/gigaam.md](docs/models/gigaam.md) |
| Moonshine | `moonshine-tiny`, `moonshine-base` | [docs/models/moonshine.md](docs/models/moonshine.md) |
| Moonshine Streaming | `moonshine-streaming-{tiny,small,medium}` | [docs/models/moonshine-streaming.md](docs/models/moonshine-streaming.md) |
| Qwen3-ASR | `qwen3-asr-0.6b`, `qwen3-asr-1.7b` | [docs/models/qwen3-asr.md](docs/models/qwen3-asr.md) |
| Cohere Transcribe | `cohere-transcribe-03-2026` | [docs/models/cohere-transcribe-03-2026.md](docs/models/cohere-transcribe-03-2026.md) |
| SenseVoice | `sensevoice-small` | [docs/models/sensevoice-small.md](docs/models/sensevoice-small.md) |
| FunASR Nano | `fun-asr-nano-2512`, `fun-asr-mlt-nano-2512` | [docs/models/fun-asr-nano.md](docs/models/fun-asr-nano.md) |
| Nemotron Speech Streaming | `nemotron-speech-streaming-en-0.6b` | [docs/models/nemotron-speech-streaming-en-0.6b.md](docs/models/nemotron-speech-streaming-en-0.6b.md) |
| Nemotron 3.5 ASR Streaming | `nemotron-3.5-asr-streaming-0.6b`(多语言,40 种语言环境) | [docs/models/nemotron-3.5-asr-streaming-0.6b.md](docs/models/nemotron-3.5-asr-streaming-0.6b.md) |
| Multitalker Parakeet Streaming | `multitalker-parakeet-streaming-0.6b-v1`(仅支持单说话人 ASR 路径) | [docs/models/multitalker-parakeet-streaming-0.6b-v1.md](docs/models/multitalker-parakeet-streaming-0.6b-v1.md) |
| Granite Speech 4 / 4.1 | `granite-4.0-1b-speech`, `granite-speech-4.1-2b{,-plus,-nar}` | [docs/models/granite-speech.md](docs/models/granite-speech.md) |
| Voxtral | `voxtral-mini-3b-2507`, `voxtral-small-24b-2507`(audio-LLM;转写 + 翻译) | [docs/models/voxtral.md](docs/models/voxtral.md) |
| Voxtral Realtime | `voxtral-mini-4b-realtime-2602`(流式 audio-LLM) | [docs/models/voxtral-realtime.md](docs/models/voxtral-realtime.md) |
| MedASR | `medasr`(Conformer + CTC,英文医疗听写,受限访问) | [docs/models/medasr.md](docs/models/medasr.md) |
| MOSS Transcribe-Diarize | `moss-transcribe-diarize`(audio-LLM;支持带有内联说话人分离的英文与中文 ASR) | [docs/models/moss-transcribe-diarize.md](docs/models/moss-transcribe-diarize.md) |
各变体的模型卡片位于 [`docs/models/`](docs/models/) 下。
## 构建
```
cmake -B build
cmake --build build
```
在 Apple Silicon 上会自动启用 Metal。对于 Vulkan(Linux/Windows):
```
# Ubuntu/Debian
sudo apt install build-essential cmake libvulkan-dev glslc libopenblas-dev
cmake -B build -DTRANSCRIBE_VULKAN=ON
cmake --build build
```
在 Windows 上,请参阅 [完整构建指南](docs/build-windows.md) 以了解 Vulkan
SDK 设置、Visual Studio 命令,以及针对异常深层检出目录的 short-build-root 回退机制。
对于 CUDA(Linux + NVIDIA GPU):
```
# 要求 PATH 中包含 CUDA toolkit (nvcc)
cmake -B build -DTRANSCRIBE_CUDA=ON
cmake --build build
```
`libopenblas-dev` 是可选的,但推荐使用。它可将主机端解码器加速约 10-15 倍。如果没有它,构建过程会自动回退到标量路径。
tinyBLAS(Justine Tunney 的 `llamafile_sgemm` kernel)默认开启。
要构建量化工具:
```
cmake -B build -DTRANSCRIBE_BUILD_TOOLS=ON
cmake --build build
```
## 模型
所有支持模型的预构建 GGUF 文件都托管在 Hugging Face 的
[`handy-computer`](https://huggingface.co/handy-computer) 下。每个模型的独立文档
(见上文表格中的链接)都包含了每种量化版本的直接下载链接。
仅当您需要不同的 dtype 或尚未预构建的 checkpoint 时,才需从源码进行转换。
### 转换为 GGUF
转换器通过 `ASRModel.from_pretrained` 直接从 NVIDIA 的 NeMo checkpoint 加载。
需要 [uv](https://docs.astral.sh/uv/);parakeet 环境自带 NeMo 及其依赖项。
```
uv run --project scripts/envs/parakeet \
scripts/convert-parakeet.py nvidia/parakeet-tdt-0.6b-v2
```
这将遵循 llama.cpp 风格的 `-.gguf` 命名规范,写入 `models/parakeet-tdt-0.6b-v2/parakeet-tdt-0.6b-v2-F32.gguf`。
传入本地的 `.nemo` 路径或解压后的目录即可进行离线转换。
### 量化
`transcribe-quantize` 工具可从参考 GGUF 生成更小的模型。可用的预设包括:`F16`、`Q8_0`、`Q6_K`、`Q5_K_M`、
`Q4_K_M`。
```
build/bin/transcribe-quantize \
models/parakeet-tdt-0.6b-v2/parakeet-tdt-0.6b-v2-F32.gguf \
models/parakeet-tdt-0.6b-v2/parakeet-tdt-0.6b-v2-Q4_K_M.gguf \
--quant Q4_K_M
```
## 用法
```
build/bin/transcribe-cli -m models/parakeet-tdt-0.6b-v2/parakeet-tdt-0.6b-v2-F32.gguf samples/jfk.wav
```
输入必须是 16 kHz 单声道 WAV。使用 `ffmpeg` 或 `sox` 转换其他格式:
```
ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav
```
## Bindings
官方 bindings 封装了 C API 以供其他语言使用:
| 语言 | 路径 |
| --- | --- |
| Python | [bindings/python](bindings/python) |
| TypeScript / JavaScript | [bindings/typescript](bindings/typescript) |
| Rust | [bindings/rust/transcribe-cpp](bindings/rust/transcribe-cpp) |
| Swift / ObjC | [bindings/swift](bindings/swift) |
请参阅 [`docs/bindings.md`](docs/bindings.md) 了解 bindings 的生成方式
以及如何与头文件保持同步。
## 测试
```
cd build && ctest
```
部分测试需要真实的模型文件。使用以下命令启用它们:
```
cmake -B build -DTRANSCRIBE_BUILD_REAL_MODEL_TESTS=ON
cmake --build build
TRANSCRIBE_PARAKEET_GGUF=path/to/model.gguf ctest --test-dir build
```
关于新移植版本所需的模型家族冒烟测试、数值验证和基准测试
模式,请参阅
[`docs/model-family-testing.md`](docs/model-family-testing.md)。
## 项目布局
```
include/transcribe.h Public C API (single header)
src/ Library internals (C++17)
src/arch/parakeet/ Parakeet family implementation
src/arch/cohere/ Cohere Transcribe family implementation
examples/cli/ CLI binary source
tools/transcribe-quantize/ Quantization tool source
bindings/ Python, TypeScript, Rust, and Swift bindings
docs/ Porting and validation guidance
scripts/ Python converter + test tooling
ggml/ Vendored ggml (see ggml/UPSTREAM for pinned SHA)
src/third_party/miniz/ Vendored miniz deflate codec (see its UPSTREAM file)
samples/ Test audio files
tests/ Unit and smoke tests
```
## 许可证
transcribe.cpp 基于 MIT 许可证。详情请参阅 [LICENSE](LICENSE)。内置的
第三方组件(ggml、miniz — 均为 MIT 许可证)已在
[THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md) 中注明。
标签:Bash脚本, C/C++, ggml, Vectored Exception Handling, 事务性I/O, 人工智能, 可视化界面, 实时告警, 机器学习推理, 用户模式Hook绕过, 语音识别, 语音转文本, 边缘计算, 逆向工具