WhisperLive
OpenAI Whisper 的几乎实时实现
该项目是一个实时转录应用,使用OpenAI的Whisper模型将语音输入转换为文本输出。它可以用于转录来自麦克风的实时音频输入和预录音频文件。
安装
- 安装 PyAudio 和 ffmpeg
bash scripts/setup.sh
- 从 pip 安装 whisper-live
pip install whisper-live
设置 NVIDIA/TensorRT-LLM 以便 TensorRT 后端使用
- 请查看 TensorRT_whisper 自述文件 以进行 NVIDIA/TensorRT-LLM 的设置,并构建 Whisper-TensorRT 引擎。
快速开始
服务器支持两个后端 faster_whisper
和 tensorrt
。如果运行 tensorrt
后端,请遵循 TensorRT_whisper 自述文件。
运行服务器
python3 run_server.py --port 9090 \
--backend faster_whisper
# 使用自定义模型运行
python3 run_server.py --port 9090 \
--backend faster_whisper \
-fw "/path/to/custom/faster/whisper/model"
- TensorRT 后端。目前,我们建议仅使用docker设置运行 TensorRT。请遵循 TensorRT_whisper 自述文件,它能够正常工作。请确保在使用 TensorRT 后端运行服务器之前构建您的 TensorRT 引擎。
# 运行仅支持英语的模型
python3 run_server.py -p 9090 \
-b tensorrt \
-trt /home/TensorRT-LLM/examples/whisper/whisper_small_en
# 运行多语言模型
python3 run_server.py -p 9090 \
-b tensorrt \
-trt /home/TensorRT-LLM/examples/whisper/whisper_small \
-m
控制 OpenMP 线程
要控制 OpenMP 使用的线程数,可以设置 OMP_NUM_THREADS
环境变量。这对于管理 CPU 资源和确保一致性能很有用。如果未指定,OMP_NUM_THREADS
默认设置为 1
。您可以使用 --omp_num_threads
参数更改此设置:
python3 run_server.py --port 9090 \
--backend faster_whisper \
--omp_num_threads 4
单一模型模式
默认情况下,当运行服务器而不指定模型时,服务器会为每个客户端连接实例化一个新的whisper模型。这有一个好处是服务器可以根据客户端请求的模型大小使用不同的模型大小。另一方面,这也意味着你必须等待在客户端连接上加载模型,并且增加了(V)RAM使用。
当使用 -trt
或 -fw
选项提供自定义 TensorRT 模型或自定义 faster_whisper 模型时,服务器将仅实例化自定义模型一次,并在所有客户端连接中重用它。
如果您不希望这样,请设置 --no_single_model
。
运行客户端
- 用以下参数初始化客户端:
lang
:输入音频的语言,仅适用于多语言模型。translate
:如果设置为True
则从任何语言翻译为en
。model
:Whisper 模型大小。use_vad
:是否在服务器上使用语音活动检测
。save_output_recording
:设置为 True 在实时转录期间将麦克风输入保存为.wav
文件。此选项对以后回放或分析录音会话很有帮助。默认值为False
。output_recording_filename
:指定在save_output_recording
设置为True
时保存麦克风输入的.wav
文件路径。
from whisper_live.client import TranscriptionClient
client = TranscriptionClient(
"localhost",
9090,
lang="en",
translate=False,
model="small",
use_vad=False,
save_output_recording=True, # 仅用于麦克风输入,默认为 False
output_recording_filename="./output_recording.wav" # 仅用于麦克风输入
)
它连接到运行在本地主机9090端口的服务器上。使用多语言模型时,转录的语言将自动检测。您也可以使用语言选项指定转录的目标语言,在本例中为英语 ("en")。如果我们想从源语言翻译成英语,translate选项应设置为 True
,如果我们想以源语言转录,则设置为 False
。
- 转录音频文件:
client("tests/jfk.wav")
- 从麦克风进行转录:
client()
- 从 RTSP 流进行转录:
client(rtsp_url="rtsp://admin:admin@192.168.0.1/rtsp")
- 从 HLS 流进行转录:
client(hls_url="http://as-hls-ww-live.akamaized.net/pool_904/live/ww/bbc_1xtra/bbc_1xtra.isml/bbc_1xtra-audio%3d96000.norewind.m3u8")
浏览器扩展
- 使用您期望的后端运行服务器,如 这里 所示。
- 使用我们的 Chrome 或 Firefox 扩展直接从浏览器转录音频。请参考 Audio-Transcription-Chrome 和 Audio-Transcription-Firefox 进行设置。
Docker 中的 Whisper Live 服务器
-
GPU
- Faster-Whisper
docker run -it --gpus all -p 9090:9090 ghcr.io/collabora/whisperlive-gpu:latest
- TensorRT.
docker run -p 9090:9090 --runtime=nvidia --gpus all --entrypoint /bin/bash -it ghcr.io/collabora/whisperlive-tensorrt # 构建 tiny.en 引擎 bash build_whisper_tensorrt.sh /app/TensorRT-LLM-examples small.en # 使用 tiny.en 运行服务器 python3 run_server.py --port 9090 \ --backend tensorrt \ --trt_model_path "/app/TensorRT-LLM-examples/whisper/whisper_small_en"
-
CPU
docker run -it -p 9090:9090 ghcr.io/collabora/whisperlive-cpu:latest
注意:默认情况下我们使用 "small" 模型大小。要为不同的模型大小构建docker镜像,请在 server.py 中更改大小,然后构建docker镜像。
未来工作
- 在转录的基础上添加其他语言翻译。
- Whisper 的 TensorRT 后端。
联系方式
我们可以帮助您处理开源和专有AI项目。您可以通过Collabora网站或 vineet.suryan@collabora.com 和 marcus.edel@collabora.com 与我们联系。
引用
@article{Whisper
title = {Robust Speech Recognition via Large-Scale Weak Supervision},
url = {https://arxiv.org/abs/2212.04356},
author = {Radford, Alec and Kim, Jong Wook and Xu, Tao and Brockman, Greg and McLeavey, Christine and Sutskever, Ilya},
publisher = {arXiv},
year = {2022},
}
@misc{Silero VAD,
author = {Silero Team},
title = {Silero VAD: pre-trained enterprise-grade Voice Activity Detector (VAD), Number Detector and Language Classifier},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/snakers4/silero-vad}},
email = {hello@silero.ai}
}