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

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)来实现的。
流程是:

  1. Jigasi 作为会议的一个“隐形参与者”加入房间。
  2. 它会订阅所有人的音频流。
  3. Jigasi 把音频送到 Speech-to-Text (STT) 服务
  4. 得到的文本通过 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 原生字幕,而是以消息形式发给前端。

五、实际部署建议

  1. 如果测试用 / 小规模
    whisper.cpp → REST API → 改 Jigasi → 完成转录。

  2. 如果需要大规模并发

    • 部署 Whisper 服务(Docker + FastAPI/gRPC)。
    • 加一个队列(Kafka/Redis Stream),解耦音频流和转录服务。
    • Jigasi 只负责送音频,不直接调用 Whisper。
  3. GPU 加速

    • Whisper 在 GPU 上快很多。
    • 推荐用 openai/whisper + CUDA,或用 faster-whisper(CTranslate2 实现,优化更好)。

六、总结

  • Whisper 部署可以用官方 Python 版、whisper.cpp,或服务化。
  • Jitsi Meet 的字幕是通过 Jigasi → STT 服务 → Prosody → 前端完成的。
  • 你需要在 Jigasi 中实现一个调用 Whisper API 的 TranscriptionService
  • 小规模可直接 REST API,大规模建议做异步转录服务。

此外,你最好还知道KaldiVosk 的关系:

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 上封装出来的“开发者友好版”。