2026/9/15 13:27:42

WhisperLiveKit:4人会议实时说话人区分,标签时间戳一步到位

WhisperLiveKit:4人会议实时说话人区分,标签时间戳一步到位 WhisperLiveKit4人会议实时说话人区分标签时间戳一步到位【免费下载链接】WhisperLiveKitReal-time, local speech-to-text with streaming ASR, speaker diarization, translation, and OpenAI/Deepgram-compatible APIs.项目地址: https://gitcode.com/GitHub_Trending/wh/WhisperLiveKit一场四人周会转录稿上每句话前都带着说话人 1 00:00-00:04说话人 2 00:04-00:11这样的标记。WhisperLiveKit 的流式 ASR 负责把语音转成文字Sortformer 模型负责实时说话人区分——判断每句话是谁说的两者结合就是一份带说话人标签的实时会议纪要。它能替你做什么WhisperLiveKit 的 Sortformer 后端把一段连续的语音流切分成带 speaker 标签和时间戳的片段会议记录不再是一锅粥每句话都能归属到具体的人。远程访谈时主持人和问题嘉宾的回答各自成段统计谁说了多久不再需要人工回听。直播字幕场景下观众看到的不再是纯文字滚动而是谁在哪个时间点说了什么。这三个场景的输出物是同一件东西说话人编号加起止时间的片段序列后续统计、检索、对齐都建立在它之上。背后的记忆机制流式处理有个天然难题模型一次只能看到一小段音频靠它凭什么判断这个人前面也说过话Sortformer 的答案是双缓存。spkcache 是长期记忆从会话开始持续存入各说话人的特征向量容量有限满了就滚动替换FIFO 是短期记忆一个先进先出队列保留最近几个块的特征。每个新块进来时模型同时查这两份记忆再决定这一帧该标给哪个说话人。音频块 t ──▶ 特征提取 ├─▶ spkcache 长期会话开始以来的说话人特征 └─▶ FIFO 短期最近若干块的特征 └─▶ 本块预测 ──▶ 追加进总预测长期记忆负责这个人我见过短期记忆负责刚才发生了什么两者配合说话人编号才能跨块保持稳定这就是流式实时说话人区分能记住人的原因。从零跑通先装好带 Sortformer 扩展的依赖pip install -e .[diarization-sortformer]或者直接用 GPU 镜像一条命令拉起docker compose up --build wlk-gpu-sortformer然后启动带说话人区分的转写服务wlk --model medium --diarization --language auto打开浏览器访问http://localhost:8000对着麦克风说话每条语音片段会以说话人编号加起止时间标注输出。默认模型最多区分 4 个说话人覆盖常见会议规模如果你确定参会人数上限可以用--sortformer-max-speakers声明。一段能用的最小实现想在自己的脚本里拿到带 speaker 标签的片段流可以直接调用流式后端下面这段逻辑与whisperlivekit/diarization/sortformer_backend.py的__main__演示一致import asyncio from whisperlivekit.diarization.sortformer_backend import ( SortformerDiarization, SortformerDiarizationOnline, ) async def main(): shared SortformerDiarization() # 加载流式 Sortformer online SortformerDiarizationOnline(shared_modelshared) chunks load_audio_chunks() # 每块 0.5 秒的 16kHz 音频 for chunk in chunks: online.insert_audio_chunk(chunk) for seg in await online.diarize(): print(f说话人 {seg.speaker} {seg.start:.2f}-{seg.end:.2f}s) asyncio.run(main())调参与排障流式说话人区分不是装上就一劳永逸下面两个现象最常见。两位说话人总被归进同一个编号→ 把chunk_left_context从默认 10 调大到 20。它控制每个块推理时向左回溯的特征帧数调大后模型拿到更长的左侧上下文来比对相似音色。背景噪音被误判成某位说话人→ 调大spkcache_update_period降低长期记忆向量的刷新频率。它决定多久用新特征更新 spkcache 里的说话人画像更新太快时空调声和键盘声会渗进记忆之后模型更容易把噪音帧分给真实说话人。接入你自己的系统接入 WhisperLiveKit 的实时说话人区分有三种姿势WebSocket 适合推流式音频、逐片段收结果REST 适合批量处理已有录音直接 import Python 包则适合嵌进自有服务。回到开篇那场四人周会现在你可以先打开默认端口看四个说话人的标签如何在对话中被切分出来。标签切得不对时直接翻 whisperlivekit/diarization/sortformer_backend.py 对照参数默认值接口细节查 docs/API.md 里的speaker字段说明就够了。【免费下载链接】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),仅供参考