whisper_streaming
ufal/whisper_streaming加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:一场多语言国际会议正在进行,来自不同国家的与会者用英语、中文、阿拉伯语交替发言。传统的做法是等会议结束后,再花数小时整理录音。但现在,有人打开终端,输入一条命令,麦克风采集的语音被实时转写成文字,延迟仅有 3.3 秒——这就是 Whisper-Streaming 正在做的事情。
这个项目由布拉格查理大学(Charles University)UFAL 实验室的研究人员开发,发表在 IJCNLP-AACL 2023 会议上,并在真实的多语言会议中验证了实用性。
OpenAI 在 2022 年发布的 Whisper 模型,在语音识别领域横空出世——多语言、高准确率、支持翻译。但它有一个致命弱点:设计上只处理 30 秒以内的音频片段。对于长音频,必须人为切分,再用"init prompt"(初始上下文)拼接。
这在离线转写场景下勉强可用,但在实时场景中,固定窗口切分会直接把一个词切成两半。更要命的是,Whisper 无法判断一句话"说完了没有"——它需要等足够长的音频才能给出稳定输出,这就是延迟的根源。
Whisper-Streaming 的解决思路来自 Peter Polák 的工作,核心是 LocalAgreement-n 策略:
如果连续 n 次处理迭代都在前缀文本上达成一致,就"确认"(commit)这段内容,并将其从待处理缓冲区中移除。
默认 n=2,意味着只需 2 次迭代确认即可输出,比等 Whisper 完整处理一段音频快得多。确认后的内容被"锁定",后续处理只在未确认的新音频上运行,大幅降低计算量。
此外,项目还集成了:
最终效果:3.3 秒端到端延迟,在未切分的长音频测试集上达到了高质量转写水准。
Whisper-Streaming 采用多后端插件架构,支持 4 种 Whisper 推理引擎,开发者可以按需切换:
| 后端 | 特点 | 适用场景 |
|---|---|---|
| faster-whisper | Cython 实现,GPU 加速,精度与原版相当 | 推荐首选,生产环境 |
| whisper-timestamped | 纯 Python,输出带时间戳 | 调试/轻量部署 |
| OpenAI Whisper API | 云端推理,无需本地 GPU | 无 GPU 但有 OpenAI 预算 |
| mlx-whisper | Apple Silicon M 系列优化 | macOS 用户 |
Python 依赖通过 pip 手动安装,无容器化支持。项目本身只有 7 个 Python 文件,代码量小(约 5000 行含注释),结构清晰:whisper_online.py 是核心处理引擎,whisper_online_server.py 提供 TCP 服务端,silero_vad_iterator.py 和 line_packet.py 来自外部贡献。
pip install librosa soundfile faster-whisper torch torchaudio
python3 whisper_online.py en-demo16.wav --language en --min-chunk-size 1
whisper_online.py 会从本地音频文件模拟实时流式处理,输出带时间戳的转写结果。--min-chunk-size 控制每次处理的最短音频长度,--vac 启用语音活动检测跳过静音。
python3 whisper_online_server.py --model large-v2 --language en --port 43001
# 另一终端:
arecord -f S16_LE -c1 -r 16000 -t raw | nc localhost 43001
支持直接接入真实麦克风或通过 WebSocket + FastAPI 封装成 Web UI(见社区贡献 WhisperLiveKit)。
from whisper_online import *
asr = FasterWhisperASR("en", "large-v2")
online = OnlineASRProcessor(asr)
online.insert_audio_chunk(audio_chunk)
result = online.process_iter() # 返回当前确认的转写片段
适合嵌入到会议系统、电话录音分析等业务应用中。
Whisper-Streaming 对 GPU 有硬性需求。faster-whisper 后端推荐 CUDA 11.7 + CUDNN 8.5,大模型(large-v2)在无 GPU 环境下几乎不可用。CPU 模式下可运行,但速度远跟不上实时要求。
项目未提供 Dockerfile 或 docker-compose,依赖管理靠 pip 手动安装。对于不熟悉 Python 环境配置的开发者有一定门槛。
不过,作者在 README 中提供了详细的多后端安装指南,即使是 macOS 用户也可以通过 mlx-whisper 后端在 Apple Silicon 上获得不错的性能。
项目 README 明确指出:2025 年起,Whisper-Streaming 已被 SimulStreaming 取代。SimulStreaming 来自同一作者,在速度和质量上全面超越,并增加了 LLM 翻译模型级联。Whisper-Streaming 的接口已集成进 SimulStreaming,平滑过渡。
从代码质量看,项目有 Sphinx 文档(fork 版本有 pyproject.toml),README 长达 17000 字,包含详细论文引用、技术原理解析和多后端安装指南,文档质量优秀。测试覆盖方面未找到自动化测试套件,代码质量评分受此影响。
Whisper-Streaming 的核心价值在于架起了学术界流式推理研究与生产级实时语音应用之间的桥梁。LocalAgreement 策略虽然来自学术论文,但项目提供了完整的工程实现,包括 VAD 集成、句子切分、多后端适配,让任何人都能用上"论文里的算法"。
它的出现填补了 Whisper 缺乏实时推理能力的空白,被多个下游项目(如 Faster Whisper Server、WhisperLiveKit)引用为底层组件。在语音转写、会议字幕、直播实时翻译等场景中都有实际应用。
数据来源:GitHub (3676★, MIT License),论文发表于 IJCNLP-AACL 2023。