Whisper 部署 和 如何集成到 Jitsi Meet 作为实时转录服务

系统梳理一下 Whisper 部署 和 如何集成到 Jitsi Meet 作为实时转录服务。
一、Whisper 简介
Whisper 是 OpenAI 开源的语音识别(ASR, Automatic Speech Recognition)模型,支持多语言和自动翻译。它常用于会议转录、字幕生成、语音助手等场景。
在 Jitsi Meet 场景下,Whisper 可以作为 transcriber service,把会议中的语音流转成文本,并通过 Prosody → Jicofo → 前端展示为字幕。
二、Whisper 的部署方式
Whisper 模型较大,运行需要一定算力。主要有几种部署思路:
1. 直接运行官方模型
-
安装依赖:
git clone https://github.com/openai/whisper.git cd whisper pip install -r requirements.txt
-
使用:
whisper example.wav --model medium --language en
-
缺点:延迟较高,不适合实时转录(适合离线录音转录)。
2. Whisper.cpp(轻量化推理)
-
whisper.cpp 是一个 C++ 实现,支持 CPU/GPU,资源占用小。
-
构建:
git clone https://github.com/ggerganov/whisper.cpp cd whisper.cpp make
-
转录:
./main -m models/ggml-base.en.bin -f audio.wav
-
优点:可在服务器上实时运行,延迟低,适合嵌入 Jitsi。
3. 服务化部署(推荐)
-
使用 FastAPI/Flask 封装 Whisper,暴露 HTTP/gRPC 接口。
-
例如一个 HTTP 服务:
from fastapi import FastAPI, UploadFile import whisper app = FastAPI() model = whisper.load_model("small") @app.post("/transcribe") async def transcribe(file: UploadFile): audio = await file.read() with open("temp.wav", "wb") as f: f.write(audio) result = model.transcribe("temp.wav") return {"text": result["text"]}
-
启动:
uvicorn main:app --host 0.0.0.0 --port 8000
这样 Whisper 就能以 REST API 方式被调用。
三、Jitsi Meet 的 Transcriber 服务机制
Jitsi Meet 的实时转录是通过 Jigasi(Jitsi Gateway for SIP / transcription)来实现的。
流程是:
- Jigasi 作为会议的一个“隐形参与者”加入房间。
- 它会订阅所有人的音频流。
- Jigasi 把音频送到 Speech-to-Text (STT) 服务。
- 得到的文本通过 Prosody → Jicofo → 前端字幕 UI 显示。
下面的方案是ChatGPT给的,已经有点落后了,现在的Jitsi已经支持集成Whisper,不需要自己修改Jitsi。
四、Whisper 集成到 Jitsi 的方案
有几种方式:
方案 A:改造 Jigasi 插件(推荐)
-
Jigasi 有接口
TranscriptionService.java
,可以实现一个新的类调用你的 Whisper API。 -
参考现有的
GoogleCloudTranscriptionService.java
。 -
你只需要实现:
String transcribe(AudioBuffer audio);
→ 发送音频到 Whisper HTTP API,返回结果。
方案 B:通过 WebSocket 转录
- 启动一个 Whisper 实时服务,支持 WebSocket 输入音频流。
- Jigasi 的
TranscriptionGatewaySession
改造为发送 WebSocket 音频帧。 - Whisper 返回 JSON 文本 → Jigasi → Prosody → 前端字幕。
方案 C:旁路方式(独立Bot)
- 写一个“转录 Bot”,用 lib-jitsi-meet 作为隐形客户端加入会议,订阅音频 → 推给 Whisper → 再通过 chat message / subtitle API 回传字幕。
- 这种方式不用改 Jigasi,但字幕不是 Jitsi 原生字幕,而是以消息形式发给前端。
五、实际部署建议
-
如果测试用 / 小规模:
whisper.cpp → REST API → 改 Jigasi → 完成转录。 -
如果需要大规模并发:
- 部署 Whisper 服务(Docker + FastAPI/gRPC)。
- 加一个队列(Kafka/Redis Stream),解耦音频流和转录服务。
- Jigasi 只负责送音频,不直接调用 Whisper。
-
GPU 加速:
- Whisper 在 GPU 上快很多。
- 推荐用
openai/whisper
+ CUDA,或用 faster-whisper(CTranslate2 实现,优化更好)。
六、总结
- Whisper 部署可以用官方 Python 版、whisper.cpp,或服务化。
- Jitsi Meet 的字幕是通过 Jigasi → STT 服务 → Prosody → 前端完成的。
- 你需要在 Jigasi 中实现一个调用 Whisper API 的
TranscriptionService
。 - 小规模可直接 REST API,大规模建议做异步转录服务。
此外,你最好还知道Kaldi 和 Vosk 的关系:
1. Kaldi 是什么
-
Kaldi 是一个著名的 语音识别研究工具包(ASR toolkit),最早由 Daniel Povey 在 2011 年创建。
-
用 C++ 编写,核心做的是:
- 声学模型训练(GMM、DNN、TDNN、chain models...)
- 语言模型对接(KenLM、OpenFST)
- 解码器实现(WFST)
- 特征提取(MFCC、fbank、ivector...)
-
优点:灵活、功能强大,研究人员最爱。
-
缺点:复杂、难上手、部署难。如果只是要跑实时 ASR,Kaldi 太重了。
2. Vosk 是什么
-
Vosk 是一个基于 Kaldi 的语音识别工具库。
-
由 alphacephei 团队开发,目标是 易用、跨平台、实时部署。
-
特点:
- 提供 Python、Java、Node.js、C++、Rust、Go 等多语言 API。
- 支持 流式识别(边说边出结果)。
- 内置预训练模型(多语言)。
- 可以直接拿来做实时字幕、语音助手。
-
核心还是用 Kaldi 训练/推理的模型,但封装了一层简单 API。
3. 二者关系
可以这么理解:
- Kaldi = 引擎(底层算法库,研究人员用来训练、测试语音识别系统)
- Vosk = 产品化封装(在 Kaldi 基础上打包成 SDK / API,方便开发者直接用)
就好比:
- TensorFlow / PyTorch(研究框架)
- Transformers / HuggingFace API(封装好的库,能直接推理)
4. Whisper 和它们的对比
- Kaldi:偏研究,复杂,传统 ASR 流程(HMM/DNN + WFST 解码)。
- Vosk:Kaldi 的易用版,部署简单,适合中小型实时应用。
- Whisper:基于 Transformer 的端到端语音识别,不用 WFST,不需要手动训练声学/语言模型,准确率高,但推理比 Vosk 重一些。
👉 总结一句:
Kaldi 是底层 ASR 框架,Vosk 是在 Kaldi 上封装出来的“开发者友好版”。