WhisperLiveKit:实时语音转文本
markdown
WhisperLiveKit:实时语音转文本
一键部署,让语音实时转文字的同时保护隐私安全
概述
WhisperLiveKit 是一个基于 OpenAI Whisper 模型的开源实时语音识别工具,能够将语音实时转录为文字,并支持说话人识别功能。该项目采用 客户端-服务端分离架构,通过本地网络回环(127.0.0.1)实现进程间通信,既保持了模块化优势,又可通过单机部署形成完整闭环,确保所有数据处理都在本地完成,无需联网上传语音数据。1
核心功能特性
WhisperLiveKit 提供了一系列强大功能,使其在众多语音识别工具中脱颖而出:
1. 实时语音转文字
- 边说边出字:采用流式处理架构,语音输入后延迟可低至几百毫秒即可看到文字输出
- 多语言支持:支持多达99种语言转录,使用
--language auto
参数可自动检测语言 - 智能语音检测:集成语音活动检测(VAD)技术,没有声音时不浪费计算资源 3
2. 说话人识别(Diarization)
- 自动区分发言者:能够实时识别不同说话人,并区分不同参与者的发言
- 彩色标签显示:在前端界面中,不同说话人的内容会以不同颜色高亮显示
3. 完全本地化处理
- 数据隐私保护:所有语音数据处理都在本地完成,不会上传到任何外部服务器
- 离线工作能力:一旦模型下载完成,后续使用无需任何网络连接
4. 高性能后端支持
- 多推理后端:支持PyTorch、FasterWhisper、TensorRT和OpenVINO多种推理后端
- 硬件加速优化:针对Apple Silicon芯片、NVIDIA GPU和Intel CPU进行了专门优化
技术架构与原理
系统组成
WhisperLiveKit 主要由两个核心组件构成:
- 后端(服务器):基于FastAPI的WebSocket服务器,负责处理音频并提供实时转录服务
- 前端示例:简单的HTML和JavaScript实现,用于演示如何捕获和流式传输音频
工作原理
- 音频捕获:使用浏览器的MediaRecorder API捕获webm/opus格式的音频
- 流式传输:音频块通过WebSocket传输到服务器
- 处理:服务器使用FFmpeg解码音频,然后将其流式传输到Whisper进行转录
- 实时输出:部分转录内容立即显示,最终转录内容以正常颜色显示
核心技术
- SimulStreaming:基于AlignAtt策略的超低延迟转录算法,能在语音输入的同时实时生成文字 1
- WhisperStreaming:基于LocalAgreement策略的低延迟转录算法,适用于需要快速响应的场景
- 语音活动检测:使用Silero VAD等企业级语音活动检测技术,准确检测语音信号中的有效语音段
安装与快速开始
系统要求
- Python 3.8+
- FFmpeg(必须)
- 建议使用支持CUDA的NVIDIA GPU或Intel CPU以获得更好性能
安装步骤
-
安装系统依赖(FFmpeg)
Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg
macOS
brew install ffmpeg
Windows:从官网下载exe,并把路径加入环境变量
-
安装WhisperLiveKit包
pip install whisperlivekit
如需说话人分离功能,安装扩展支持:
pip install whisperlivekit[diarization]
-
启动服务器
whisperlivekit-server --model tiny.en
-
打开浏览器
访问http://localhost:8000
,允许麦克风权限,开始体验实时转录
进阶使用指南
模型选择
WhisperLiveKit 提供多种规模的模型,满足不同场景需求:
模型大小 | 精度 | 速度 | 适用场景 |
---|---|---|---|
tiny | 较低 | 最快 | 实时性要求极高的场景 |
base | 一般 | 很快 | 平衡精度与速度 |
small | 较好 | 中等 | 一般会话转录 |
medium | 高 | 较慢 | 专业内容转录 |
large | 最高 | 最慢 | 高精度转录需求 |
配置参数优化
启动服务器时可使用多种参数优化性能:
whisperlivekit-server \--model medium \ # 使用中等精度模型--language auto \ # 自动检测语言--diarization \ # 启用说话人识别--backend faster-whisper \ # 使用FasterWhisper后端--host 0.0.0.0 \ # 允许局域网访问--port 8000 # 指定端口
说话人分离配置
要启用说话人识别功能,需要以下额外步骤:
-
访问Hugging Face并接受模型协议:
- pyannote/segmentation
- pyannote/segmentation-3.0
- pyannote/embedding
-
在终端登录Hugging Face:
huggingface-cli login
-
启动服务时启用说话人识别:
whisperlivekit-server --model medium --diarization
低延迟模式
对于需要极低延迟的场景,可使用SimulStreaming后端:
whisperlivekit-server \--backend simulstreaming \--model large-v3 \--frame-threshold 20
注意:*.en单语言模型不支持SimulStreaming。
Python API集成
WhisperLiveKit 提供了灵活的Python API,可以轻松集成到现有项目中:
基本集成示例
from whisperlivekit import TranscriptionEngine, AudioProcessor
from fastapi import FastAPI, WebSocket
import asyncio# 创建FastAPI应用
app = FastAPI()# 全局转录引擎实例(重要:只创建一次)
engine = TranscriptionEngine(model="medium", diarization=True)@app.websocket("/asr")
async def asr(websocket: WebSocket):await websocket.accept()audio_proc = AudioProcessor(transcription_engine=engine)try:async for msg in audio_proc.start():# 发送转录结果到前端await websocket.send_json(msg)except Exception as e:print(f"WebSocket错误: {e}")
前端界面获取
WhisperLiveKit 还提供了直接获取前端HTML的方法:
from whisperlivekit import get_web_interface_html# 获取内置前端HTML
html_content = get_web_interface_html()
# 可保存到文件或直接提供服务
生产环境部署
使用Gunicorn多进程部署
对于生产环境,建议使用Gunicorn启动多个工作进程:
pip install uvicorn gunicorn
gunicorn -k uvicorn.workers.UvicornWorker -w 4 main:app
其中 -w 4
表示4个worker,适合4核CPU。
Nginx反向代理配置
建议使用Nginx作为反向代理服务器:
server {listen 80;server_name your-domain.com;location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;}
}
Docker部署
WhisperLiveKit 支持Docker容器化部署:
# 构建镜像
docker build -t whisperlivekit .# 运行(带GPU支持)
docker run --gpus all -p 8000:8000 whisperlivekit --model base# 纯CPU环境运行
docker run -p 8000:8000 whisperlivekit --model base
性能优化建议
硬件选择
- Intel CPU:优先使用OpenVINO后端 3
- NVIDIA GPU:选择TensorRT后端
模型选择
- 低配设备推荐使用tiny.en单语言模型
- 高精度需求选择large-v3模型
参数调优
- 调整ASR线程数(–threads)平衡CPU利用率
- 启用FP16运算(–fp16)可提升GPU推理速度约40%
- 调整–min-chunk-size参数优化延迟
音频配置
- 合理设置采样率和比特率
- 根据网络条件调整音频块大小
应用场景
WhisperLiveKit 适用于多种实时语音识别场景:
-
会议转录
实时记录会议内容,区分不同发言者,方便后续回顾和分析。 -
辅助工具
为听障用户提供实时对话的转录,帮助他们更好地参与交流。 -
内容创作
自动转录播客或视频中的内容,极大提升内容创作效率。 -
在线教育
为在线课程和远程教学实时生成字幕,帮助学生更好地理解课程内容。 -
客服中心
在客服通话中实时转录对话内容,便于质量监控和数据分析。
常见问题解答(FAQ)
Q1:必须联网吗?
A:不需要。模型和代码全部在本地运行,除非你要下载模型权重或Hugging Face授权。
Q2:支持哪些语言?
A:Whisper官方支持99种语言,只要模型名称里没有.en,都可以用–language auto自动识别。
Q3:延迟到底有多少?
A:
- faster-whisper + tiny:台式机约300-500 ms
- simulstreaming + large-v3:可压到200 ms以下
Q4:为什么没有检测到人声?
A:检查麦克风权限,或加上–no-vad关闭VAD做对比测试。也可能是–min-chunk-size设得太大,尝试调到0.5秒。
Q5:能否离线安装?
A:可以。在一台联网机器先运行一次,把/.cache/huggingface和/.cache/whisper目录拷贝到离线环境即可。
故障排除
常见问题及解决方案
端口占用错误
# 查找占用端口的进程
lsof -i :8000
# 终止进程
kill -9 <PID>
# 或更换端口
whisperlivekit-server --port 8001
模型下载失败
# 手动下载模型
wget https://huggingface.co/guillaumekln/faster-whisper-{model}/resolve/main/model.bin
# 放置到缓存目录
mv model.bin ~/.cache/huggingface/hub/models--guillaumekln--faster-whisper-{model}/
GPU内存不足
# 使用更小的模型
whisperlivekit-server --model tiny
# 或限制GPU内存使用
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
开发指南
项目结构
whisperlivekit/
├── src/
│ └── whisperlivekit/
│ ├── __init__.py
│ ├── server.py # 服务器主程序
│ ├── audio_processor.py # 音频处理模块
│ ├── transcription.py # 转录引擎
│ └── diarization.py # 说话人识别模块
├── static/ # 前端静态文件
│ ├── index.html
│ ├── style.css
│ └── script.js
├── tests/ # 测试文件
├── pyproject.toml # 项目配置
└── README.md
添加自定义功能
要扩展WhisperLiveKit功能,可以继承基类并重写相关方法:
from whisperlivekit import TranscriptionEngineclass CustomTranscriptionEngine(TranscriptionEngine):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 自定义初始化代码async def transcribe_audio(self, audio_data):# 自定义转录逻辑result = await super().transcribe_audio(audio_data)# 后处理return self._post_process(result)def _post_process(self, text):# 自定义后处理逻辑return text.upper() # 示例:全部转为大写
社区与支持
获取帮助
- GitHub Issues - 报告bug和功能请求
- Discussions - 提问和分享想法
- Wiki - 详细文档和教程
贡献代码
欢迎提交Pull Request来改进WhisperLiveKit:
- Fork项目仓库
- 创建特性分支 (git checkout -b feature/AmazingFeature)
- 提交更改 (git commit -m ‘Add some AmazingFeature’)
- 推送到分支 (git push origin feature/AmazingFeature)
- 打开Pull Request
许可证
WhisperLiveKit 使用 MIT 许可证,允许自由使用和修改代码。
更新日志
v0.2.0 (2023-11-20)
- 增加说话人识别功能
- 添加SimulStreaming后端支持
- 优化内存使用和性能
- 新增命令行参数解析模块 4
- 新增Web界面服务模块
v0.1.0 (2023-10-15)
- 初始版本发布
- 支持基本实时转录功能
- 集成FasterWhisper后端
总结
WhisperLiveKit 是一个功能强大且完全本地化的实时语音识别解决方案,它结合了OpenAI Whisper模型的准确性和实时处理能力,同时确保了数据隐私和安全。凭借其易于部署、灵活配置和多样化的应用场景,WhisperLiveKit 无论是对于个人用户还是企业应用,都是一个值得考虑的语音识别解决方案。
随着AI语音技术的快速发展,WhisperLiveKit的持续演进值得期待。未来版本可能引入量化模型支持,进一步降低内存占用;本地化词典定制功能也将增强专业术语识别率。
资源链接
- 官方GitHub仓库
- 在线演示(本地部署后)
- 问题反馈
- 文档 Wiki
版权声明
本文部分内容参考了WhisperLiveKit官方文档和技术博客,遵循CC 4.0 BY-SA版权协议。如需转载,请注明出处。