资讯动态

WhisperLiveKit 实时说话人区分:1 条命令给会议转录标上“谁在说“

发布时间:2026/9/15 10:57:42 来源:尧图企业网站定制
WhisperLiveKit 实时说话人区分1 条命令给会议转录标上谁在说【免费下载链接】WhisperLiveKitReal-time, local speech-to-text with streaming ASR, speaker diarization, translation, and OpenAI/Deepgram-compatible APIs.项目地址: https://gitcode.com/GitHub_Trending/wh/WhisperLiveKit周五复盘会录了 40 分钟导出纪要却分不清每句是谁说的。WhisperLiveKit 的 Sortformer 说话人区分功能边录音边给每行文字贴上说话人编号不用等录完。它解决什么先说它对付的几类真实麻烦发言归属不清多人讨论被转成一大段文字没法知道哪句谁说的归档只能重听。说话人混淆两个音色接近的人事后补标注要反复回放音频越补越乱。实时字幕残缺直播和访谈字幕缺谁在说观众只能猜发言者。行为分析缺位想统计每人发言时长和次数连最基础的说话人数据都没有。WhisperLiveKit 架构说话人区分与流式 ASR、翻译并列是实时管线的一环技术底座一句话NVIDIA NeMo 的流式 Sortformer默认模型diar_streaming_sortformer_4spk-v2按 1 秒音频块推理最多 4 个说话人通道。与常规路线的差异维度Sortformer 流式分人离线批处理分人出结果时机每 1 秒音频块更新边说边出整段音频录完才能跑内存占用固定双缓存各 188 帧不随会议变长存整段音频和全部中间结果说话人身份按到达顺序编号长会里身份保持事后聚类中途换人易断号适用场景实时会议、直播字幕、访谈录音归档、事后整理流式路线把谁说的变成和文字一样即时产出的数据身份从第一句话开始就稳定。跑通最短路径启动说话人区分服务装 Sortformer 依赖# 克隆源码 git clone https://gitcode.com/GitHub_Trending/wh/WhisperLiveKit cd WhisperLiveKit # 安装分人扩展自动带上 nemo-toolkit[asr] pip install -e .[diarization-sortformer] # 或一行 DockerGPU 预配置镜像 docker compose up --build wlk-gpu-sortformer启动带分人的转录服务# 最简启动base 模型 实时分人默认 8000 端口 wlk --model base --diarization # 变体 1中文会议换更大模型 wlk --model medium --diarization --language zh # 变体 2用本地 .nemo 模型覆盖默认模型 wlk --model base --diarization --sortformer-model-path /path/model.nemo看到效果浏览器里确认说话人标签打开http://localhost:8000每句话单独成行行首带说话人编号和小人图标当前句的分人还在确认时会显示加载状态。WebSocket/asr推给前端的行数据长这样[00:00 - 00:04] Speaker 1: 大家好今天过一下项目进展 [00:04 - 00:11] Speaker 2: 第一阶段开发已经完成 [00:11 - 00:16] Speaker 1: 好测试那边什么情况 [00:16 - 00:23] Speaker 3: 覆盖率到 85% 了说话人区分运行效果实时转录界面中每行文字带独立说话人编号它内部怎么跑的双缓存记忆spkcache fifo→ 一份存从开会到现在的说话人嵌入一份存最近几个块新说话人插话或换人时模型同时对照两块缓存做归属判断。spkcache_len 188 # 长记忆帧数 fifo_len 188 # 短期帧数1 秒块流式推理→ 每满 1 秒音频先转成 128 维梅尔频谱图再拼上上一块尾部 99 帧当左上下文走一次forward_streaming_step模型状态随块滚动。chunk_len10 × subsampling_factor10 × 10ms 帧步长 1s/块到达顺序编号 逐帧 argmax 出段→ 模型的 4 个通道按说话人到达先后编号身份锁在缓存里每帧取 argmax 通道相邻同说话人帧合并成(speaker, start, end)片段长静音由insert_silence(sec)写进全局时间轴防止时间漂移。active argmax(preds[:, :max_speakers], axis1)调参数说话人区分常用旋钮--sortformer-max-speakers默认 None即模型全部 4 通道→ 往小调到 1–3 → 会议已知不超过 N 人时避免空通道抢归属。它是断言不是估计人多了不会更准。--sortformer-model-path默认 None加载nvidia/diar_streaming_sortformer_4spk-v2→ 换成自调.nemo→ 强领域噪声场景如呼叫中心、课堂录音。spkcache_len源码内默认 188→ 调大 → 超长会议需要更多长期说话人上下文。--min-chunk-size默认 0.1s→ 调大 → CPU 跟不上实时时用更新频率换吞吐。不同 ASR 模型的速度-精度对比给分人服务选--model时同样适用# 固定 3 人会议用本地微调模型 wlk --model base --diarization --sortformer-max-speakers 3 \ --sortformer-model-path ./my_4spk.nemo踩坑速查说话人标签错乱与依赖报错现象启动直接退出提示 Sortformer diarization requires NeMo。原因只装了基础包diarization-sortformer扩展没装。解法pip install -e .[diarization-sortformer]uv 用户执行uv sync --extra diarization-sortformer。现象Python 3.13 环境里 Diart 扩展安装失败报 NumPy 版本冲突。原因Diart 0.9.2 要求 NumPy 低于 2与 3.13 不兼容。解法不用装 diart 扩展直接用默认后端--diarization-backend sortformer。现象长停顿后说话人编号跳变时间戳跟着漂移。原因静音区间没写进全局时间轴缓存里的身份估计开始晃动。解法保持 VAD 开启别传--no-vad自己集成代码时检测到长静音后调用diarize.insert_silence(1.5)。往更大系统里塞翻译同屏加--target-language en定稿句子走 NLLB 翻译译文跟随说话人编号怕译文闪烁就加--translate-on-complete。中英混说--language auto自动检测语言Sortformer 的归属输出与语言无关一个服务吃下混合会议。API 接入WebSocket/asr每行带speaker字段OpenAI 兼容的 REST/v1/audio/transcriptions可处理带说话人标签的录音文件直接接进现有录音流水线。看源码sortformer_backend.py缓存大小、流式状态和分段逻辑改行为看这里。diarization/Sortformer 与 Diart 两个后端。parse_args.py--diarization系列参数的入口。启动你的第一个实时说话人区分服务把下一场会议直接按人归档。【免费下载链接】WhisperLiveKitReal-time, local speech-to-text with streaming ASR, speaker diarization, translation, and OpenAI/Deepgram-compatible APIs.项目地址: https://gitcode.com/GitHub_Trending/wh/WhisperLiveKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价