适用于实时应用程序的易于使用、低延迟的语音转文本库
RealtimeSTT 监听麦克风并将语音转录为文本。
提示:查看 Linguflex ,它是 RealtimeSTT 的衍生项目。它可以让你通过说话来控制你的环境,是目前最强大、最先进的开源助手之一。
它非常适合:
最新版本:v0.3.7
查看发布历史记录。
提示:由于我们现在使用
multiprocessing
模块,请确保在代码中包含if __name__ == '__main__':
保护以防止意外行为,尤其是在 Windows 等平台上。有关其重要性的详细说明,请访问有关multiprocessing
的官方 Python 文档。
from RealtimeSTT import AudioToTextRecorder
import pyautogui
def process_text ( text ):
print ( text )
if __name__ == '__main__' :
print ( "Wait until it says 'speak now'" )
recorder = AudioToTextRecorder ()
while True :
recorder . text ( process_text )
from RealtimeSTT import AudioToTextRecorder
import pyautogui
def process_text ( text ):
pyautogui . typewrite ( text + " " )
if __name__ == '__main__' :
print ( "Wait until it says 'speak now'" )
recorder = AudioToTextRecorder ()
while True :
recorder . text ( process_text )
将在您选择的文本框中输入所说的所有内容
提示:查看 RealtimeTTS(该库的输出对应项),了解文本转语音功能。它们共同形成了围绕大型语言模型的强大实时音频包装器。
该库使用:
这些组件代表了尖端应用的“行业标准”,为构建高端解决方案提供了最现代、最有效的基础。
pip install RealtimeSTT
这将安装所有必要的依赖项,包括仅支持 CPU的 PyTorch 版本。
尽管可以仅通过 CPU 安装来运行 RealtimeSTT(在本例中使用“tiny”或“base”等小型模型),但您将获得更好的体验:
要升级 PyTorch 安装以启用 CUDA 的 GPU 支持,请根据您的特定 CUDA 版本按照以下说明进行操作。如果您希望通过 CUDA 功能增强 RealtimeSTT 的性能,这非常有用。
要更新 PyTorch 和 Torchaudio 以支持 CUDA 11.8,请使用以下命令:
pip install torch==2.3.1+cu118 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118
要更新 PyTorch 和 Torchaudio 以支持 CUDA 12.X,请执行以下命令:
pip install torch==2.3.1+cu121 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121
将2.3.1
替换为与您的系统和要求匹配的 PyTorch 版本。
注意:要检查您的 NVIDIA GPU 是否支持 CUDA,请访问官方 CUDA GPU 列表。
如果您之前没有使用过 CUDA 模型,则在安装之前可能需要执行一些额外的步骤。这些步骤为系统做好 CUDA 支持和GPU 优化安装的准备。建议那些需要更好性能并拥有兼容 NVIDIA GPU 的用户使用。要通过 CUDA 使用具有 GPU 支持的 RealtimeSTT,另请按照以下步骤操作:
安装 NVIDIA CUDA 工具包:
安装 NVIDIA cuDNN :
安装 ffmpeg :
注意:实际上可能不需要安装 ffmpeg 来操作 RealtimeSTT *感谢 jgilbert2017 指出了这一点
您可以从 ffmpeg 网站下载适用于您的操作系统的安装程序。
或者使用包管理器:
在 Ubuntu 或 Debian 上:
sudo apt update && sudo apt install ffmpeg
在 Arch Linux 上:
sudo pacman -S ffmpeg
在 MacOS 上使用 Homebrew (https://brew.sh/):
brew install ffmpeg
在 Windows 上使用 Winget官方文档:
winget install Gyan.FFmpeg
在 Windows 上使用 Chocolatey (https://chocolatey.org/):
choco install ffmpeg
在 Windows 上使用 Scoop (https://scoop.sh/):
scoop install ffmpeg
基本用法:
手动触发录制的开始和停止。
recorder . start ()
recorder . stop ()
print ( recorder . text ())
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
recorder = AudioToTextRecorder ()
recorder . start ()
input ( "Press Enter to stop recording..." )
recorder . stop ()
print ( "Transcription: " , recorder . text ())
基于语音活动检测的录音。
with AudioToTextRecorder () as recorder :
print ( recorder . text ())
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
with AudioToTextRecorder () as recorder :
print ( "Transcription: " , recorder . text ())
在循环中运行 recorder.text 时,建议使用回调,允许异步运行转录:
def process_text ( text ):
print ( text )
while True :
recorder . text ( process_text )
from RealtimeSTT import AudioToTextRecorder
def process_text ( text ):
print ( text )
if __name__ == '__main__' :
recorder = AudioToTextRecorder ()
while True :
recorder . text ( process_text )
在检测语音之前激活关键字。将所需激活关键字的逗号分隔列表写入到wake_words参数中。您可以从以下列表中选择唤醒词:alexa、americano、blueberry、bumblebee、computer、grapefruits、grasshopper、hey google、hey siri、jarvis、ok google、picovoice、porcupine、terminator。
recorder = AudioToTextRecorder ( wake_words = "jarvis" )
print ( 'Say "Jarvis" then speak.' )
print ( recorder . text ())
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
recorder = AudioToTextRecorder ( wake_words = "jarvis" )
print ( 'Say "Jarvis" to start recording.' )
print ( recorder . text ())
您可以设置要在不同事件上执行的回调函数(请参阅配置):
def my_start_callback ():
print ( "Recording started!" )
def my_stop_callback ():
print ( "Recording stopped!" )
recorder = AudioToTextRecorder ( on_recording_start = my_start_callback ,
on_recording_stop = my_stop_callback )
from RealtimeSTT import AudioToTextRecorder
def start_callback ():
print ( "Recording started!" )
def stop_callback ():
print ( "Recording stopped!" )
if __name__ == '__main__' :
recorder = AudioToTextRecorder ( on_recording_start = start_callback ,
on_recording_stop = stop_callback )
如果您不想使用本地麦克风,请将 use_microphone 参数设置为 false 并使用以下方法提供 16 位单声道(采样率 16000)的原始 PCM 音频块:
recorder . feed_audio ( audio_chunk )
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
recorder = AudioToTextRecorder ( use_microphone = False )
with open ( "audio_chunk.pcm" , "rb" ) as f :
audio_chunk = f . read ()
recorder . feed_audio ( audio_chunk )
print ( "Transcription: " , recorder . text ())
您可以使用上下文管理器协议安全地关闭记录器:
with AudioToTextRecorder () as recorder :
[...]
或者您可以手动调用 shutdown 方法(如果使用“with”不可行):
recorder . shutdown ()
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
with AudioToTextRecorder () as recorder :
[...]
# or manually shutdown if "with" is not used
recorder . shutdown ()
test 子目录包含一组脚本,可帮助您评估和了解 RealtimeTTS 库的功能。
取决于 RealtimeTTS 库的测试脚本可能要求您在脚本中输入 Azure 服务区域。使用 OpenAI、Azure 或 Elevenlabs 相关演示脚本时,应在环境变量 OPENAI_API_KEY、AZURE_SPEECH_KEY 和 ELEVENLABS_API_KEY 中提供 API 密钥(请参阅 RealtimeTTS)
simple_test.py
realtimestt_test.py
唤醒词测试.py
翻译器.py
pip install openai realtimetts
。openai_voice_interface.py
pip install openai realtimetts
。高级谈话.py
pip install openai keyboard realtimetts
。简约_talkbot.py
pip install openai realtimetts
。example_app 子目录包含基于 PyQt5 的 OpenAI API 的精美用户界面应用程序。
AudioToTextRecorder
的初始化参数初始化AudioToTextRecorder
类时,您可以使用各种选项来自定义其行为。
model (str, default="tiny"):模型大小或转录路径。
language (str, default=""):转录的语言代码。如果留空,模型将尝试自动检测语言。 Whisper Tokenizer 库中列出了支持的语言代码。
compute_type (str, default="default"):指定用于转录的计算类型。请参阅耳语量化
input_device_index (int,默认=0):要使用的音频输入设备索引。
gpu_device_index (int, default=0):要使用的 GPU 设备索引。还可以通过传递 ID 列表(例如 [0, 1, 2, 3])将模型加载到多个 GPU 上。
device (str, default="cuda"):模型使用的设备。可以是“cuda”或“cpu”。
on_recording_start :录音开始时触发的可调用函数。
on_recording_stop :录音结束时触发的可调用函数。
on_transcription_start :转录开始时触发的可调用函数。
Ensure_sentence_starting_uppercase (bool, default=True):确保算法检测到的每个句子都以大写字母开头。
Ensure_sentence_ends_with_period (bool, default=True): 确保每个不以“?”、“!”等标点符号结尾的句子以句点结尾
use_microphone (bool, default=True): 使用本地麦克风进行转录。如果您想使用 feed_audio 方法提供块,请设置为 False。
spinner (bool, default=True): 提供带有当前记录器状态信息的微调器动画文本。
level (int, default=logging.WARNING):日志记录级别。
handle_buffer_overflow (bool, default=True): 如果设置,系统将在录制过程中发生输入溢出时发出警告,并从缓冲区中删除数据。
beam_size (int,默认=5):用于波束搜索解码的波束大小。
初始提示(str 或 int 的可迭代,默认=无):要馈送到转录模型的初始提示。
suppress_tokens (int 列表,默认=[-1]):要从转录输出中抑制的标记。
on_recorded_chunk :录制一段音频时触发的回调函数。将块数据作为参数提交。
debug_mode (bool, default=False):如果设置,系统会将附加调试信息打印到控制台。
print_transcription_time (bool, default=False):记录主模型转录的处理时间。这对于性能监控和调试非常有用。
Early_transcription_on_silence (int, default=0):如果设置,系统将在检测到静音时更快地转录音频。转录将在指定的毫秒后开始。保持该值低于post_speech_silence_duration
,理想情况下约为post_speech_silence_duration
减去主模型的估计转录时间。如果静音持续时间超过post_speech_silence_duration
,则停止录音并提交转录。如果语音活动在此期间恢复,则转录将被丢弃。这会导致最终转录速度更快,但由于一些不必要的最终转录而导致额外的 GPU 负载。
allowed_latency_limit (int, default=100):指定丢弃块之前队列中未处理块的最大数量。这有助于防止系统在实时应用程序中不堪重负并失去响应能力。
no_log_file (bool, default=False): 如果设置,系统将跳过写入调试日志文件,减少磁盘 I/O。如果不需要记录到文件并且性能是优先考虑的,则非常有用。
注意:启用实时描述时,强烈建议安装 GPU。使用实时转录可能会产生高 GPU 负载。
enable_realtime_transcription (bool, default=False): 启用或禁用音频实时转录。当设置为 True 时,音频将在录制时连续转录。
use_main_model_for_realtime (bool, default=False):如果设置为 True,则主转录模型将用于常规转录和实时转录。如果为 False,则将使用realtime_model_type
指定的单独模型进行实时转录。使用单一模型可以节省内存并有可能提高性能,但可能无法针对实时处理进行优化。使用单独的模型可以为实时转录提供更小、更快的模型,同时为最终转录保留更准确的模型。
realtime_model_type (str, default="tiny"):指定用于实时转录的机器学习模型的大小或路径。
realtime_processing_pause (float, default=0.2):指定转录一段音频后的时间间隔(以秒为单位)。较低的值将导致更多的“实时”(频繁)转录更新,但可能会增加计算负载。
on_realtime_transcription_update :每当实时转录中有更新时就会触发回调函数。使用新转录的文本作为参数来调用该函数。
on_realtime_transcription_stabilized :每当实时转录中有更新时就会触发回调函数,并返回更高质量、稳定的文本作为其参数。
beam_size_realtime (int,默认=3):用于实时转录波束搜索解码的波束大小。
silero_sensitivity (浮点型,默认=0.6):Silero 语音活动检测的灵敏度,范围从 0(最不敏感)到 1(最敏感)。默认值为 0.6。
silero_use_onnx (bool,默认=False):允许以 ONNX(开放神经网络交换)格式而不是 PyTorch 格式使用 Silero 的预训练模型。默认值为 False。推荐用于更快的性能。
silero_deactivity_detection (bool, default=False):启用 Silero 模型进行语音结束检测。对背景噪声的抵抗力更强。利用额外的 GPU 资源,但提高嘈杂环境中的准确性。当为 False 时,使用默认的 WebRTC VAD,它更敏感,但由于背景声音可能会继续录制更长时间。
webrtc_sensitivity (int, default=3):WebRTC 语音活动检测引擎的灵敏度,范围从 0(最不积极/最敏感)到 3(最积极、最不敏感)。默认值为 3。
post_speech_silence_duration (浮点数,默认值=0.2):在录音被视为完成之前,必须在语音之后的静音持续时间(以秒为单位)。这可确保演讲过程中的任何短暂停顿都不会过早结束录音。
min_gap_ Between_recordings (浮点数,默认= 1.0):指定一个记录会话结束与另一个记录会话开始之间应存在的最小时间间隔(以秒为单位),以防止快速连续记录。
min_length_of_recording (浮点型,默认=1.0):指定录音会话应持续的最短持续时间(以秒为单位),以确保有意义的音频捕获,防止录音过短或碎片化。
pre_recording_buffer_duration (float, default=0.2):在正式录制之前缓冲音频的时间跨度(以秒为单位)。这有助于平衡语音活动检测中固有的延迟,确保不会错过任何初始音频。
on_vad_detect_start :系统开始侦听语音活动时触发的可调用函数。
on_vad_detect_stop :系统停止监听语音活动时触发的可调用函数。
wakeword_backend (str, default="pvporcupine"):指定用于唤醒词检测的后端库。支持的选项包括“pvporcupine”(用于使用 Porcupine 唤醒词引擎)或“oww”(用于使用 OpenWakeWord 引擎)。
openwakeword_model_paths (str, default=None):openwakeword 库的模型文件的逗号分隔路径。当选择 openwakeword 库作为wakeword_backend 时,这些路径指向可用于唤醒词检测的自定义模型。
openwakeword_inference_framework (str, default="onnx"):指定与 openwakeword 库一起使用的推理框架。可以是“onnx”(表示开放神经网络交换格式)或“tflite”(表示 TensorFlow Lite)。
wake_words (str, default=""):使用“pvporcupine”唤醒词后端时启动记录。多个唤醒词可以作为逗号分隔的字符串提供。支持的唤醒词有:alexa、americano、blueberry、bumblebee、computer、grapefruits、grasshopper、hey google、hey siri、jarvis、ok google、picovoice、porcupine、terminator。对于“openwakeword”后端,唤醒词会自动从提供的模型文件中提取,因此无需在此处指定它们。
wake_words_sensitivity (float, default=0.6): 唤醒词检测的敏感度级别(0 表示最不敏感,1 表示最敏感)。
wake_word_activation_delay (浮点数,默认=0):如果最初未检测到语音,则监控开始后系统切换到唤醒词激活之前的持续时间(以秒为单位)。如果设置为零,系统会立即使用唤醒词激活。
wake_word_timeout (浮点数,默认=5):识别唤醒词后的持续时间(以秒为单位)。如果在此窗口内没有检测到后续语音活动,系统将转换回非活动状态,等待下一个唤醒词或语音激活。
wake_word_buffer_duration (浮点数,默认=0.1):唤醒词检测期间缓冲音频数据的持续时间(以秒为单位)。这有助于从录音缓冲区中删除唤醒词,这样它就不会与后续的语音文本一起被错误地检测到,从而确保更清晰、更准确的转录开始触发器。如果唤醒词的部分内容被检测为文本,请增加此值。
on_wakeword_detected :检测到唤醒词时触发的可调用函数。
on_wakeword_timeout :唤醒词激活后未检测到语音且系统返回非活动状态时触发的可调用函数。
on_wakeword_detection_start :系统开始监听唤醒词时触发的可调用函数
on_wakeword_detection_end :停止侦听唤醒词时触发的可调用函数(例如,由于超时或检测到唤醒词)
请在此处查看有关如何训练您自己的 OpenWakeWord 模型的信息。您可以使用简单的 Google Colab 笔记本作为开始,也可以使用更详细的笔记本来实现更多自定义(可以生成高质量模型,但需要更多开发经验)。
您可能需要使用 tf2onnx 将tensorflow tflite 模型转换为onnx 格式:
pip install -U tf2onnx
python -m tf2onnx.convert --tflite my_model_filename.tflite --output my_model_filename.onnx
OpenWakeWord 使用的建议启动参数:
with AudioToTextRecorder (
wakeword_backend = "oww" ,
wake_words_sensitivity = 0.35 ,
openwakeword_model_paths = "word1.onnx,word2.onnx" ,
wake_word_buffer_duration = 1 ,
) as recorder :
答:此问题是由于ctranslate2
和cuDNN版本不匹配造成的。 ctranslate2
库已更新至版本 4.5.0,使用 cuDNN 9.2。有两种方法可以解决此问题:
ctranslate2
降级到版本 4.4.0 : pip install ctranslate2==4.4.0
随时欢迎您的贡献!
感谢 Steven Linn 提供的 docker 支持。
麻省理工学院
科尔贾·贝格尔
电子邮件:[email protected]
GitHub