whisper-diarization
基于OpenAI Whisper的多模型级联Pipeline,自动识别音频中的不同说话人并生成带时间
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于OpenAI Whisper的多模型级联Pipeline,自动识别音频中的不同说话人并生成带时间
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:产品团队开了一个小时的会议,你让某款会议记录工具自动生成了一份文字稿。结果发现,稿子里把产品经理说的话标成了技术负责人,把技术负责人说的又归到了产品经理头上——这份稿子比没有记录还让人头疼。
这就是说话人分离(Speaker Diarization)的价值所在:不仅要把语音转成文字,还要搞清楚「这句话是谁说的」。传统的ASR(自动语音识别)工具只能做前半件事,而今天要介绍的这个开源项目——whisper-diarization,正是为了让Whisper也能「认出说话人」而生的。
这个项目由埃及开发者Mahmoud Ashraf创建和维护,是其语音AI工具矩阵的重要组成部分。作者本人长期活跃于HuggingFace社区,提供了从Whisper阿拉伯语优化版本到说话人分离的一系列工具,形成了完整的端侧语音AI生态。
从技术上说,whisper-diarization并不是Whisper的替代品,而是一个编排层。它将多个专业模型串联成一条Pipeline,每一环各司其职:
这样一条Pipeline设计的好处是,每个环节都可以独立替换或升级。比如Whisper出了新版本,只需要更新其中的模型加载逻辑即可,其他部分完全不用动。
如果把whisper-diarization比作一个专业的会议记录员,它的工作流程是这样的:
这个「记录员」最强的地方在于,它可以本地运行,不需要任何云服务。你的会议录音永远不用离开你的电脑,隐私泄露的风险为零。
项目内置了两套说话人分离模型,可以根据需要选择:
NeMo MSDD(Multi-scale Diarization Decoder):这是NVIDIA NeMo工具包中的说话人分离模型,基于ECAPA-TDNN(Emphasized Channel Attention, Propagation and Aggregation - Time Delay Neural Network)架构。它通过分析音频的声学特征来识别不同说话人的声音模式,在会议室场景下表现稳定。项目还提供了预训练权重,开箱即用。
Sortformer:这是一个基于Transformer的说话人分离模型,用深度学习的方式来「排序」不同说话人的发言顺序。相比传统方法,它在长对话中的表现更好,不容易出现说话人身份跳变的问题。
项目从早期版本的OpenAI Whisper迁移到了faster-whisper,这是一个用CTranslate2重写的Whisper推理实现,相比原版有3-4倍的加速,同时内存占用更低。这对于需要处理长音频(比如一小时会议)的场景非常重要。
faster-whisper还支持批处理推理(batched inference),可以通过调整--batch-size参数来平衡速度和显存占用。
项目支持生成标准的SRT字幕格式(SubRip Text),这意味着输出可以直接被大多数视频编辑软件和播放器识别。对于做播客视频化、讲座视频剪辑的自媒体创作者来说,这个功能特别实用——不需要额外转换,直接就能用。
diarize_parallel.py提供了多进程并行处理能力,可以在多轨道音频(比如多人视频会议,每人一轨)场景下显著提升处理速度。
这个项目的依赖比较复杂,主要体现在以下几个方面:
Python环境:需要Python 3.9以上,建议用conda或venv创建独立环境。
NVIDIA NeMo:这是最难安装的依赖之一。NeMo是NVIDIA的深度学习工具包,包含了说话人分离、语音识别、TTS等多种模型。它的体积庞大,安装过程中可能遇到CUDA版本不匹配的问题。项目要求NeMo 2.5.0以上版本。
自定义Fork:requirements.txt中有两行是通过git+https直接从GitHub安装自定义fork的包:
demucs的一个fork(用于源分离)ctc-forced-aligner(用于时间对齐)这意味着安装过程必须能访问GitHub,且这些fork版本与上游可能存在接口差异。
GPU要求:Whisper推理和NeMo说话人分离都需要GPU加速。官方建议RTX 3060或更高配置,显存至少6GB。如果用large模型,8GB显存起步。
项目是纯CLI工具,没有Web界面。使用流程如下:
# 基本用法:指定音频文件和Whisper模型
python diarize.py -a your_meeting.mp3 --whisper-model medium
# 禁用源分离(音频本身没有背景音乐时)
python diarize.py -a your_meeting.mp3 --no-stem
# 指定语言(可以加速)
python diarize.py -a your_meeting.mp3 --language Arabic
# 指定输出格式(JSON或SRT)
python diarize.py -a your_meeting.mp3 --output-format srt
从使用体验上说,命令行参数设计得比较清晰,每个参数都有明确的help说明。但对于非技术用户,CLI的门槛仍然不低——需要了解Whisper模型尺寸的区别、源分离的作用等概念。
在实际测试中,这个项目在单人说话场景下表现非常稳定;在多人会议场景下,准确率取决于几个因素:
这是项目最大的槽点。NeMo的安装本身就是一个「坑」,再加上requirements.txt中的git+https依赖,整个安装过程可能耗费数小时。对于只想快速体验的用户来说,这是一个不低的门槛。
虽然这是一个Python CLI工具,天然适合Docker化——把NeMo、CUDA、所有依赖一股脑打包进镜像,用户一行命令就能跑起来——但项目并没有提供Dockerfile。这在今天看来是一个明显的缺失。
项目没有提供Gradio/Streamlit Web界面。对于不熟悉命令行的用户,使用门槛较高。社区中有人尝试做过Web界面项目(比如Whisper-WebUI),但并没有被合并到主仓库中。
OpenAI自家的Whisper API和Deepgram、AssemblyAI等商业服务都提供了云端说话人分离功能。在准确率上,这些商业方案(尤其是专门做说话人分离的如AssemblyAI)往往优于开源方案。但在成本上,whisper-diarization的本地运行方案适合有大量音频需要处理且对隐私有要求的场景(比如律所会议记录、医疗对话记录)。
whisper-diarization代表了开源语音AI领域的一个重要趋势:从单点工具到完整Pipeline。Whisper解决了「听写」问题,但把它放到真实的工作流中,还需要说话人分离、时间对齐、标点恢复等多个环节的配合。这个项目正是这个趋势的体现。
从GitHub数据看,项目获得了5500+ stars,在同类说话人分离工具中名列前茅。维护者持续更新,积极响应issue,展现了良好的开源维护态度。
展望未来,几个值得关注的改进方向:
总体来说,whisper-diarization是目前开源生态中Whisper + 说话人分离组合的最佳实践之一。如果你有本地处理语音会议的需求,且有一定的技术能力,这个项目值得一试。但如果追求零配置体验,商业云服务仍是更省心的选择。