news 2026/9/15 13:27:37

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WhisperLiveKit:4人会议实时说话人区分,标签时间戳一步到位

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

一场四人周会,转录稿上每句话前都带着"说话人 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_model=shared) 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 13:27:05

零成本搭建技术文档站:VitePress + GitHub Pages 实战指南

1. 为什么“零成本”不是营销话术,而是技术选型的必然结果很多人看到“零成本搭文档站”第一反应是怀疑——服务器要钱、域名要钱、CDN要钱,哪来的零成本?其实这句话背后藏着一个被低估的事实:现代前端工具链已经把静态站点的部署…

作者头像 李华
网站建设 2026/9/15 13:24:55

如何用camofox-browser批量提取页面所有链接和图片:完整教程

如何用camofox-browser批量提取页面所有链接和图片:完整教程 【免费下载链接】camofox-browser Stealth headless browser for AI agents — bypass Cloudflare, bot detection, and anti-scraping. Drop-in Puppeteer/Playwright replacement. 项目地址: https:/…

作者头像 李华
网站建设 2026/9/15 13:24:21

RISC-V SoC系统集成规范:构建开放IP的语义对齐框架

1. 项目概述:当RISC-V遇上SoC开放标准,我们到底在填补什么空白?“使用 RISC-V 缩小 SoC 开放标准中的差距”——这个标题乍看像一句技术宣言,但背后藏着芯片设计领域近十年最真实的集体焦虑。我从2015年参与第一代国产FPGA SoC原型…

作者头像 李华
网站建设 2026/9/15 13:23:04

2026年AI领域入行指南:核心路径与实战技能

1. 为什么2026年可能是普通人进入AI领域的最后窗口期最近两年AI技术发展呈现指数级增长态势,从2023年ChatGPT的爆发到2024年Sora等视频生成模型的突破,再到2025年多模态大模型的成熟应用,AI正在深刻改变各个行业的就业格局。作为从业十余年的…

作者头像 李华
网站建设 2026/9/15 13:22:57

从单体智能到系统智能:AI架构设计的演进与实践

1. 从单体智能到系统智能的演进脉络2012年AlexNet在ImageNet竞赛中一战成名时,我们还在为单个模型能达到人类水平的图像识别能力而惊叹。十年后的今天,当GPT-4能处理多模态输入、完成复杂推理时,AI系统已经进化成由数十个模块协同工作的智能体…

作者头像 李华