WhisperLiveKit实时说话人区分实操:4个说话人、按秒块出标签
2026/9/15 18:27:50 网站建设 项目流程

WhisperLiveKit实时说话人区分实操:4个说话人、按秒块出标签

【免费下载链接】WhisperLiveKitReal-time, local speech-to-text with streaming ASR, speaker diarization, translation, and OpenAI/Deepgram-compatible APIs.项目地址: https://gitcode.com/GitHub_Trending/wh/WhisperLiveKit

部署 WhisperLiveKit 的实时说话人区分之后,你拿到的是一个实时转录页面:每一行文字前面都有说话人编号和起止时间。两个人围着一台电脑说话,输出大致长这样:

说话人 1 00:00.0–00:04.2:好,我们过一下这周的进度 说话人 2 00:04.2–00:09.8:前端这边做完了,等联调 说话人 1 00:09.8–00:13.5:行,下午我把测试环境拉起来

编号按出现先后排,不是人名。下面直接讲怎么跑起来、怎么判断它在工作、出了问题转哪个旋钮。

能做什么、不能做什么

  • 支持 1 到 4 个说话人。默认模型是 4 个说话人通道,--sortformer-max-speakers可以声明实际人数(1–4)。超过 4 人超出模型设计范围。
  • 实时流式,不做离线批处理。服务器按 1 秒一个块消费音频(10 帧 × 10 倍下采样 × 10ms 窗口步进),当前这行的标签天然滞后音频结尾约 1–2 秒,属正常现象。
  • 分人端与语言无关,转写端受 ASR 模型限制。说话人模型只看声音特征、不看内容;转写出什么语言由 Whisper 模型和--language参数决定。
  • 输出是"编号"不是"姓名"。没有声纹绑定人名,同一位说话人在新会话里可能拿到新编号。
  • 不做说话人数估计。--sortformer-max-speakers是声明而非检测;声明偏少时,多出来的人会被并入已有标签。
  • 首次运行会自动下载默认流式模型(nvidia/diar_streaming_sortformer_4spk-v2),之后走本地缓存。

三种启动方式:pip、Docker 还是本地模型

方式一句话说明命令
pip + NeMo 扩展在自己的 Python 环境里装,最可控,首跑会拉取默认模型pip install "whisperlivekit[diarization-sortformer]"
Docker 预构建免装环境,镜像自带 CUDA 与 NeMo,需要 NVIDIA GPUdocker compose up --build wlk-gpu-sortformer
本地模型已有自己准备好的.nemo文件,用参数指过去替换默认模型wlk --diarization --sortformer-model-path /path/to/model.nemo

仓库 compose 文件里的 Docker 配置默认用 medium 模型并开了--pcm-input(浏览器直接送 PCM,绕过 FFmpeg),监听 8000 端口。

最小启动命令与判断正常的三个信号

pip install "whisperlivekit[diarization-sortformer]" wlk --model base --diarization # 启动后浏览器打开 http://localhost:8000

判断它工作正常,看三个信号:

  1. 服务器日志打印Using CPU for Sortformer model(或Using CUDA ...),随后出现 "SortformerDiarization initialized successfully"。
  2. 对着麦克风说话,转录行前面开始带说话人编号;标签未定下来时是一个转圈,定下来变成固定数字。
  3. 找两个人轮流说 5 秒左右:两行编号不同且各对各人,说明生效;整段只有一个编号,先查麦克风是不是只收到一个人的声音。

只想验证分人、不想同时跑 ASR,加--no-transcription,页面就只出说话人时间块。

遇到问题调哪个旋钮

现象先试什么再升级什么
两个音色相近的人串号、标签互换--sortformer-max-speakers声明真实人数,只保留前 N 个按到达顺序的通道,减少空通道干扰检查两人声音是否被同一支麦克风拾取(串音);或换转写更稳的 ASR 模型(更大规格)稳住边界
长时间停顿后标签漂移、背景噪音被误判保持 VAD 开启(默认开启);调低--pause-segmentation-seconds(默认 5 秒),让稳定边界切得更早源码提供insert_silence,长静音时插入静音间隔,自己集成流程时可用
延迟太高跟不上语速换小一号的 ASR 模型(--model tiny/base);说话人标签本身按 1 秒块处理,滞后进阶空间有限上 GPU(Sortformer 自动选 CUDA);或调低--min-chunk-size(默认 0.1 秒)让 ASR 更新更勤
# 例:3 人会议,声明 3 个通道,停顿 3 秒就切稳定边界 wlk --model base --diarization --sortformer-max-speakers 3 --pause-segmentation-seconds 3

想再进一步:多语言、翻译、API

多语言会议。分人端跟语言无关,转写端用--language auto自动检测,或直接指定语言代码。中英混说也能跑,说话人编号不随语言切换变化。

实时翻译。启动命令加--target-language en,默认 NLLB 后端在进程内做翻译,CPU 也能跑;译文输出保留说话人编号。延迟敏感场景可以把--translation-backend切到 alignatt 或 mlx-llm-mt。

API 集成。实时链路走 WebSocket/asr;录音文件走 REST/v1/audio/transcriptions(OpenAI 风格接口)。公网暴露时用--api-token强制校验令牌。细节见仓库 docs/API.md。

硬件与参数速查

场景推荐配置备注
个人使用、小型会议4 核 CPU + 8GB 内存,--model base或更小瓶颈在 ASR,说话人标签开销相对小
2–4 人会议、低延迟NVIDIA GPU(6GB 显存起步,GTX 1060 级别即可)Sortformer 自动用 CUDA;仓库有预构建 GPU Docker 配置
长会议、多语言、高要求RTX 级 GPU + 16GB 以上内存--model medium及以上稳住转写稳定性

下图是各 ASR 模型在 LibriSpeech test-clean 上 WER 与实时因子(RTF)的对比,RTF=1.0 的红色虚线是"能否跟上音频播放速度"的分界,评估延迟时就看这条线:

参数速查:

  • 说话人通道数:--sortformer-max-speakers(1–4,默认 4 个通道全用)
  • 分句边界:--pause-segmentation-seconds(默认 5 秒,设 0 关闭停顿切分)
  • ASR 更新节奏:--min-chunk-size(默认 0.1 秒)
  • 模型内部:说话人特征靠"长期记忆 + 短期记忆"两段缓存维持,窗口长度目前写死在源码里,没有暴露成 CLI 参数

流程到此为止:选一种启动方式,用三个信号验证,出问题对着表格转对应旋钮。实现细节看 whisperlivekit/diarization/sortformer_backend.py,参数默认值与接口说明看 docs/API.md。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询