文章摘要
parakeet.cpp是一个基于C++的快速语音识别项目,使用NVIDIA的Parakeet模型,支持多种模型类型和语言。它采用轻量级axiom张量库,无需Python或ONNX运行时,在Apple Silicon GPU上实现96倍于CPU的速度提升,支持离线/流式处理和多语言识别。
文章总结
以下是该项目的核心内容整理:
项目概述
parakeet.cpp 是一个基于C++的高性能语音识别工具,支持NVIDIA Parakeet系列模型,具备以下特点: - 极速推理:在Apple Silicon GPU上实现27ms的10秒音频编码(110M模型),比CPU快96倍 - 轻量依赖:仅需C++20和自研张量库axiom(支持Metal GPU加速),无需Python或ONNX运行时 - 多场景支持:涵盖离线转录、流式识别和说话人分离三大功能
核心功能
1. 模型支持
| 类型 | 模型名称 | 参数量 | 特点 | |------------|-----------------------|--------|-------------------------------| | 离线转录 | tdt-ctc-110m | 110M | 英语,双解码头(CTC/TDT) | | | tdt-600m | 600M | 多语言,TDT解码器 | | 流式识别 | eou-120m | 120M | 带语句结束检测的RNNT | | | nemotron-600m | 600M | 可调延迟(80-1120ms) | | 说话人分离 | sortformer | 117M | 支持4人实时跟踪 |
2. 关键技术
- 音频处理流水线:16kHz单声道WAV → 80维梅尔谱图 → FastConformer编码器
- GPU加速:通过Metal实现编码器全图优化,M3芯片上110M模型吞吐达370倍实时
- 灵活解码:支持CTC(快速贪婪解码)和TDT(高精度时长预测)两种模式
使用示例
基础转录(C++ API)
cpp
parakeet::Transcriber t("model.safetensors", "vocab.txt");
t.to_gpu(); // 启用GPU加速
auto result = t.transcribe("audio.wav");
std::cout << result.text << std::endl;
流式识别(会议场景)
```cpp auto cfg = parakeet::makenemotron600m_config(/延迟帧数=1/); parakeet::NemotronTranscriber t("model.safetensors", "vocab.txt", cfg);
while (auto chunk = getaudiochunk()) { std::cout << t.transcribe_chunk(chunk) << std::flush; } ```
说话人分离
cpp
parakeet::Sortformer model(parakeet::make_sortformer_117m_config());
auto segments = model.diarize("meeting.wav");
// 输出示例: Speaker 0 [0.56s-2.96s], Speaker 1 [4.80s-6.24s]
性能表现(Apple M3)
| 模型 | CPU耗时 | GPU耗时 | 加速比 | |------------|---------|---------|--------| | 110M | 2581ms | 27ms | 96x | | tdt-600m | 10779ms | 520ms | 21x | | sortformer | 3195ms | 479ms | 7x |
部署要求
- 编译:需C++20环境,通过
make build一键编译 - 模型转换:提供Python脚本将NeMo模型转为safetensors格式
- 运行限制:
- 音频输入:16kHz单声道WAV
- 离线模型单次处理上限4-5分钟
- GPU加速需Apple Silicon设备
许可协议
MIT开源协议
(注:省略了CLI命令、底层API调用等技术细节,保留核心功能框架和关键数据)
评论总结
以下是评论内容的总结:
C++推理引擎介绍
- noahkay13介绍了基于Axiom张量库开发的C++推理引擎,支持多种语音识别模型和功能。
- 关键引用:
"Runs 7 model families: offline transcription (CTC, RNNT, TDT, TDT-CTC), streaming (EOU, Nemotron), and speaker diarization (Sortformer)"
"Streaming transcription from microphone input"
相关工具推荐
- ghostpepper推荐了本地转录引擎的Web-GUI前端Scriberr。
- antirez分享了Qwen-asr和voxtral.c项目,提到本地推理的潜力。
- 关键引用:
"if anyone is looking for a nice web-GUI frontend for a locally-hosted transcription engine, Scriberr is nice"
"Qwen-asr can easily transcribe live radio... in any random laptop"
性能比较与疑问
- nullandvoid询问与Handy的比较,d4rkp4ttern认为Hex(基于Parakeet V3)在MacOS上更快且无卡顿。
- rowanG077关注低延迟(<100ms)的语音识别方案。
- 关键引用:
"Hex is even faster. Last I checked, Handy has stuttering issues but Hex doesn’t"
"Is there anything truly low latency(sub 100ms)?"
硬件优化建议
- pzo建议在Apple设备上使用CoreML(而非Metal)通过ANE加速推理,推荐FluidAudio库。
- 关键引用:
"speed will be either similar or even faster on non-pro macbooks... and power consumption significantly better"
"the only way to access ANE is via CoreML"
总结:评论围绕语音识别工具的功能、性能优化(如延迟、硬件加速)和替代方案展开,既有具体项目分享,也有实际使用体验的比较。