RealtimeSTT
综合介绍
RealtimeSTT 是一个功能强大的 Python 库,用于实现低延迟、高效率的实时语音到文本转换。它的核心功能是监听麦克风输入,并即时将语音内容转写成文字。该库集成了先进的语音活动检测(VAD)技术,能够自动识别语音的开始和结束,从而实现精确的录音控制。此外,它还支持唤醒词(Wake Word)功能,允许程序在听到特定关键词(如 "Jarvis" 或 "Hey Google")后才开始处理语音指令。RealtimeSTT 的底层技术栈选用了业界领先的开源组件,包括用于语音活动检测的 WebRTCVAD 和 SileroVAD,以及用于快速转写的 faster_whisper,确保了其在性能和准确性上的出色表现。这个项目非常适合用于开发语音助手、实时字幕生成或任何需要快速响应语音指令的应用场景。
功能列表
- 语音活动检测 (VAD): 采用 WebRTCVAD 和 SileroVAD 技术,能自动检测用户何时开始和结束说话,有效过滤背景噪音和静默片段。
- 实时转写: 在用户说话的同时,近乎同步地将语音内容转换成文字流。
- 唤醒词激活: 支持使用 Porcupine 或 OpenWakeWord 引擎进行唤醒词检测,只有在听到指定关键词后才激活语音识别功能。
- 高兼容性: 支持多种操作系统,包括 Linux、macOS 和 Windows。
- GPU 加速: 推荐使用支持 CUDA 的 NVIDIA 显卡进行运算,以获得最佳的实时转写性能,同时兼容仅使用 CPU 的环境。
- 高度可配置: 提供了丰富的初始化参数,允许开发者对模型的选择、语言、设备、VAD 灵敏度、静默时长等进行详细配置。
- 支持多种模型: 用户可以根据需求选择不同大小的 Whisper 模型,如
tiny
,base
,small
,medium
,large-v2
等。 - 异步回调: 支持通过回调函数处理录音开始/停止、转写更新等事件,便于集成到复杂的应用中。
- 音频流输入: 除了直接使用麦克风,还支持将外部的原始 PCM 音频流喂给识别器进行处理。
使用帮助
RealtimeSTT 的设计目标是易于使用。下面将详细介绍其安装和基本使用流程,帮助你快速上手。
安装
1. 基本安装
对于大多数用户,可以通过 pip 直接安装。这个命令会自动安装所有必要的依赖项,包括一个仅支持 CPU 的 PyTorch 版本。
pip install RealtimeSTT
2. 针对不同操作系统的额外步骤
- Linux (Debian/Ubuntu):在安装 RealtimeSTT 之前,需要先安装
portaudio
和python3-dev
。sudo apt-get update sudo apt-get install python3-dev portaudio19-dev
- macOS:使用 Homebrew 安装
portaudio
。brew install portaudio
3. GPU 加速安装 (推荐)
为了获得最佳性能,强烈建议在配备 NVIDIA GPU 的环境中使用 CUDA 加速。如果你的设备支持,请遵循以下步骤升级 PyTorch。
首先,你需要安装 NVIDIA CUDA Toolkit 和 NVIDIA cuDNN。请根据你的显卡和操作系统从 NVIDIA 官网下载并安装对应的版本。
安装完 CUDA 环境后,使用以下命令安装支持 CUDA 的 PyTorch 版本。
- 对于 CUDA 11.8:
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118
- 对于 CUDA 12.1 或更高版本:
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu121
请注意检查 PyTorch 官网以获取与你的 CUDA 版本最匹配的安装命令。
如何使用
重要提示: 由于 RealtimeSTT 内部使用了多进程模块,为了避免在 Windows 等平台上出现问题,请务IS将你的代码逻辑放在 if __name__ == '__main__':
代码块内。
1. 基本用法:自动检测语音并转写
这是最简单直接的使用方式。程序会自动监听麦克风,检测到语音活动后开始录制,当语音结束后,将录音内容转写为文字并打印出来。
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__':
# 创建一个录音器实例
with AudioToTextRecorder() as recorder:
print("请说话,我会将它转换成文字...")
# recorder.text() 会阻塞程序,直到检测到一次完整的语音输入并完成转写
text = recorder.text()
print("转写结果: ", text)
2. 循环处理:持续监听并转写
如果你需要应用持续运行,不断地处理语音输入,可以使用一个 while
循环。结合回调函数可以实现异步处理,避免阻塞主线程。
from RealtimeSTT import AudioToTextRecorder
# 定义一个回调函数,用于处理转写完成的文本
def process_text(text):
print(f"识别到文本: {text}")
if __name__ == '__main__':
print("程序已启动,请说话...")
# 初始化录音器
recorder = AudioToTextRecorder()
# 无限循环,持续监听
while True:
# recorder.text() 传入一个回调函数,转写完成后会调用它
recorder.text(process_text)
3. 使用唤醒词
你可以指定一个或多个唤醒词,只有在检测到这些词语后,程序才开始正式录音和转写。
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__':
# 在初始化时通过 wake_words 参数设置唤醒词
recorder = AudioToTextRecorder(wake_words="jarvis,computer")
print('请先说出 "Jarvis" 或 "computer" 来唤醒我。')
# 第一次语音输入必须是唤醒词
text = recorder.text()
print("唤醒成功!转写内容:", text)
支持的内置唤醒词包括: alexa
, americano
, blueberry
, bumblebee
, computer
, grapefruits
, grasshopper
, hey google
, hey siri
, jarvis
, ok google
, picovoice
, porcupine
, terminator
。
4. 高级配置
AudioToTextRecorder
类接受大量参数,用于精细化控制其行为。
例如,你可以选择一个更大、更精确的模型,并指定语言为中文。
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__':
recorder = AudioToTextRecorder(
model="small", # 使用 'small' 模型
language="zh", # 设置语言为中文
spinner=False, # 不显示状态提示符
post_speech_silence_duration=0.5, # 语音结束后0.5秒即判定为结束
webrtc_sensitivity=3 # VAD 灵敏度设为最高
)
with recorder:
print("请说中文...")
text = recorder.text()
print("转写结果: ", text)
通过组合这些功能和配置,你可以将 RealtimeSTT 集成到各种复杂的应用中,实现强大的语音交互功能。
应用场景
- 智能语音助手可以作为语音助手的核心听写模块。通过设置特定的唤醒词(例如 “小爱同学” 或 “Jarvis”),使其在待机状态下低功耗运行。一旦检测到唤醒词,它会立即激活并开始实时转写用户的指令,然后将文本传递给后端的大语言模型或任务执行模块进行处理,从而实现通过语音控制智能家居、查询信息或执行电脑操作。
- 实时会议字幕和记录在视频会议或现场演讲中,RealtimeSTT 可以实时捕捉发言者的语音,并将其转换为文字字幕,显示在屏幕上,为听障人士或在嘈杂环境中的参会者提供便利。同时,转写的文本可以被完整记录下来,自动生成会议纪要,省去了人工整理的麻烦。
- 语音输入法和指令控制可用于开发桌面或特定应用内的语音输入功能。用户可以通过说话代替打字,提高输入效率。在一些专业软件(如编程、设计、游戏)中,可以设定特定的语音指令来触发复杂的操作,例如 “执行代码”、“保存文件” 或 “切换到攻击模式”,从而实现免手动操作。
- 语言学习和发音练习学习外语的用户可以使用它来练习发音。通过朗读一段文本,RealtimeSTT 可以将其语音实时转写成文字。用户可以将转写结果与原文进行对比,检查自己的发音是否准确,从而获得即时反馈,有效提升口语水平。
QA
- 这个库可以在没有网络连接的情况下使用吗?可以。RealtimeSTT 使用的
faster_whisper
模型是在本地设备上运行的,一旦模型文件下载完成,整个语音识别过程完全离线进行,不需要网络连接,这保证了数据隐私和低延迟。 - 为什么推荐使用 GPU?只用 CPU 可以吗?可以使用 CPU,但体验会差很多。语音转写是一个计算密集型任务,尤其是在追求“实时”的场景下。使用支持 CUDA 的 NVIDIA GPU 可以极大地加速计算过程,使得转写延迟变得非常低。如果只用 CPU,特别是在使用
base
或更大的模型时,转写速度会明显慢于说话速度,导致较高的延迟,失去实时性。如果你的设备只有 CPU,建议使用tiny
或tiny.en
模型。 - 如何自定义唤醒词?RealtimeSTT 支持
OpenWakeWord
作为唤醒词后端,它允许用户训练和使用自己的唤醒词模型。你需要遵循 OpenWakeWord 官方文档的指引来训练你的模型文件(通常是.tflite
或.onnx
格式),然后在初始化AudioToTextRecorder
时,将wakeword_backend
设置为'oww'
,并通过openwakeword_model_paths
参数指定你的模型文件路径。 - 我可以将这个库用于商业项目吗?可以。该项目使用 MIT 许可证,这是一个非常宽松的开源许可证。它允许你自由地在个人或商业项目中使用、修改和分发代码,只需在你的项目中保留原始的版权和许可声明即可。