適用於即時應用程式的易於使用、低延遲的語音轉文字庫
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