リアルタイム アプリケーション向けの使いやすく、低遅延の音声テキスト変換ライブラリ
RealtimeSTT はマイクを聞いて音声をテキストに変換します。
ヒント: RealtimeSTT がスピンオフされた元のプロジェクトであるLinguflex をチェックしてください。話すことで環境を制御できるようにするもので、現在利用可能なオープンソース アシスタントの中で最も高機能で洗練されたものの 1 つです。
以下のような方に最適です。
最新バージョン: v0.3.7
リリース履歴を参照してください。
ヒント:現在は
multiprocessing
モジュールを使用しているため、特に Windows などのプラットフォームで予期しない動作を防ぐために、必ずコードにif __name__ == '__main__':
保護を含めてください。これが重要な理由の詳細については、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
これにより、PyTorch のCPU サポートのみのバージョンを含む、必要な依存関係がすべてインストールされます。
CPU のみをインストールして RealtimeSTT を実行することもできますが (この場合は「tiny」または「base」などの小さなモデルを使用します)、以下を使用するとより良いエクスペリエンスが得られます。
PyTorch インストールをアップグレードして CUDA による GPU サポートを有効にするには、特定の CUDA バージョンに基づいて次の手順に従ってください。これは、CUDA 機能を使用して RealtimeSTT のパフォーマンスを向上させたい場合に役立ちます。
CUDA 11.8 をサポートするように PyTorch と Torchaudio を更新するには、次のコマンドを使用します。
pip install torch==2.3.1+cu118 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118
CUDA 12.X をサポートするように PyTorch と Torchaudio を更新するには、次のコマンドを実行します。
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 をインストールします。
注: RealtimeSTT を動作させるのに ffmpeg のインストールは実際には必要ないかもしれません*これを指摘してくれた jgilbert2017 に感謝します
ffmpeg Web サイトから OS のインストーラーをダウンロードできます。
または、パッケージ マネージャーを使用します。
Ubuntu または Debian の場合:
sudo apt update && sudo apt install ffmpeg
Arch Linux の場合:
sudo pacman -S ffmpeg
Homebrew (https://brew.sh/) を使用する MacOS の場合:
brew install ffmpeg
Winget の公式ドキュメントを使用する Windows の場合:
winget install Gyan.FFmpeg
Chocolatey (https://chocolatey.org/) を使用する Windows の場合:
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 パラメータに書き込みます。ウェイクワードは、アレクサ、アメリカーノ、ブルーベリー、バンブルビー、コンピューター、グレープフルーツ、バッタ、ヘイ グーグル、ヘイ シリ、ジャービス、OK グーグル、ピコボイス、ヤマアラシ、ターミネーターのリストから選択できます。
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 に設定し、次のメソッドで生の PCM オーディオチャンクを 16 ビット モノラル (サンプルレート 16000) で提供します。
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、または イレブンラボ関連のデモ スクリプトを使用する場合は、API キーを環境変数 OPENAI_API_KEY、AZURE_SPEECH_KEY、および ELEVENLABS_API_KEY に指定する必要があります (RealtimeTTS を参照)。
simple_test.py
realtimestt_test.py
ウェイクワード_テスト.py
翻訳者.py
pip install openai realtimetts
を実行します。openai_voice_interface.py
pip install openai realtimetts
を実行します。Advanced_talk.py
pip install openai keyboard realtimetts
を実行します。minimumistic_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、デフォルト = 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 (ブール値、デフォルト = True): 文字起こし用のローカル マイクの使用法。 feed_audio メソッドでチャンクを提供する場合は、False に設定します。
スピナー(ブール値、デフォルト=True): 現在のレコーダーの状態に関する情報を含むスピナー アニメーション テキストを提供します。
level (int、default=logging.WARNING): ログレベル。
handle_buffer_overflow (bool、default=True): 設定すると、記録中に入力オーバーフローが発生したときにシステムは警告をログに記録し、バッファからデータを削除します。
beam_size (int、デフォルト = 5): ビーム検索デコードに使用するビーム サイズ。
Initial_prompt (str または int の反復可能、デフォルト=None): 転写モデルに供給される初期プロンプト。
assign_tokens (int のリスト、デフォルト=[-1]): トランスクリプション出力から抑制されるトークン。
on_recorded_chunk : オーディオのチャンクが録音されるときにトリガーされるコールバック関数。チャンクデータをパラメータとして送信します。
debug_mode (bool、デフォルト=False): 設定すると、システムは追加のデバッグ情報をコンソールに出力します。
print_transcription_time (bool、デフォルト = 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、デフォルト = 100): チャンクを破棄する前にキュー内の未処理のチャンクの最大数を指定します。これは、システムが過負荷になってリアルタイム アプリケーションの応答性が失われるのを防ぐのに役立ちます。
no_log_file (ブール値、デフォルト=False): 設定すると、システムはデバッグ ログ ファイルの書き込みをスキップし、ディスク I/O を削減します。ファイルへのログ記録が必要なく、パフォーマンスが優先される場合に便利です。
注:リアルタイム記述を有効にする場合は、GPU をインストールすることを強くお勧めします。リアルタイム文字起こしを使用すると、GPU 負荷が高くなる可能性があります。
Enable_realtime_transcription (ブール値、デフォルト=False): オーディオのリアルタイム文字起こしを有効または無効にします。 True に設定すると、音声は録音中に継続的に文字起こしされます。
use_main_model_for_realtime (ブール値、デフォルト=False): True に設定すると、メインの転写モデルが通常の転写とリアルタイムの転写の両方に使用されます。 False の場合、 realtime_model_type
で指定された別のモデルがリアルタイム文字起こしに使用されます。単一モデルを使用するとメモリが節約され、パフォーマンスが向上する可能性がありますが、リアルタイム処理用に最適化されない可能性があります。個別のモデルを使用すると、最終的な転写ではより正確なモデルを維持しながら、リアルタイムの転写ではより小型で高速なモデルが可能になります。
realtime_model_type (str、default="tiny"): リアルタイム文字起こしに使用する機械学習モデルのサイズまたはパスを指定します。
realtime_processing_pause (float、デフォルト = 0.2): オーディオのチャンクが文字起こしされた後の時間間隔を秒単位で指定します。値を低くすると、より「リアルタイム」(頻繁な) 転写更新が行われますが、計算負荷が増加する可能性があります。
on_realtime_transcription_update : リアルタイム文字起こしに更新があるたびにトリガーされるコールバック関数。この関数は、新しく転写されたテキストを引数として呼び出します。
on_realtime_transcription_stabilized : リアルタイム文字起こしで更新があるたびにトリガーされ、高品質で安定したテキストを引数として返すコールバック関数。
beam_size_realtime (int、default=3): リアルタイム転写ビーム検索デコードに使用するビーム サイズ。
silero_sensitivity (float、デフォルト = 0.6): Silero の音声アクティビティ検出の感度。0 (最も感度が低い) から 1 (最も感度が高い) までの範囲です。デフォルトは 0.6 です。
silero_use_onnx (ブール値、デフォルト=False): Silero の事前トレーニング済みモデルを、PyTorch 形式ではなく ONNX (Open Neural Network Exchange) 形式で使用できるようにします。デフォルトは False です。より高速なパフォーマンスを実現するために推奨されます。
silero_deactivity_detection (ブール値、デフォルト=False): 音声終了検出用の Silero モデルを有効にします。バックグラウンドノイズに対してより堅牢です。追加の GPU リソースを使用しますが、騒がしい環境での精度が向上します。 False の場合、デフォルトの WebRTC VAD が使用されます。これは感度が高くなりますが、背景音が原因で長時間録音が継続される可能性があります。
webrtc_sensitivity (int、デフォルト = 3): WebRTC 音声アクティビティ検出エンジンの感度。0 (最も攻撃的でない / 最も感度が高い) から 3 (最も攻撃的で最も感度が低い) までの範囲です。デフォルトは 3 です。
post_speech_silence_duration (浮動小数点、デフォルト = 0.2): 録音が完了したとみなされる前に、音声の後に続く無音の期間 (秒単位)。これにより、スピーチ中に短い一時停止が発生しても、録音が途中で終了することがなくなります。
min_gap_between_recordings (float、デフォルト = 1.0): 急速な連続録画を防ぐために、ある録画セッションの終了と別の録画セッションの開始の間に存在する必要がある最小時間間隔を秒単位で指定します。
min_length_of_recording (float、デフォルト = 1.0): 意味のあるオーディオ キャプチャを保証し、過度に短い録音や断片化した録音を防ぐために、録音セッションが継続する必要がある最小期間を秒単位で指定します。
pre_recording_buffer_duration (float、デフォルト = 0.2): 正式な録音の前にオーディオがバッファリングされる期間 (秒単位)。これは、音声アクティビティの検出に固有の遅延のバランスをとり、最初の音声が見逃されることがないようにするのに役立ちます。
on_vad_detect_start : システムが音声アクティビティのリッスンを開始するときにトリガーされる呼び出し可能関数。
on_vad_detect_stop : システムが音声アクティビティをリッスンするために停止したときにトリガーされる呼び出し可能関数。
wakeword_backend (str、default="pvporcupine"): ウェイク ワード検出に使用するバックエンド ライブラリを指定します。サポートされているオプションには、Porcupine ウェイク ワード エンジンを使用するための「pvporcupine」、または OpenWakeWord エンジンを使用するための「oww」が含まれます。
openwakeword_model_paths (str、デフォルト = なし): openwakeword ライブラリのモデル ファイルへのカンマ区切りのパス。これらのパスは、openwakeword ライブラリが wakeword_backend として選択されている場合にウェイク ワード検出に使用できるカスタム モデルを指します。
openwakeword_inference_framework (str、default="onnx"): openwakeword ライブラリで使用する推論フレームワークを指定します。 Open Neural Network Exchange 形式の場合は「onnx」、TensorFlow Lite の場合は「tflite」のいずれかになります。
wake_words (str,default=""): 「pvporcupine」ウェイクワード バックエンドを使用するときに記録を開始します。複数のウェイク ワードをカンマ区切りの文字列として指定できます。サポートされているウェイク ワードは、アレクサ、アメリカーノ、ブルーベリー、バンブルビー、コンピューター、グレープフルーツ、バッタ、Hey google、Hey siri、ジャービス、ok google、ピコボイス、ポーキュパイン、ターミネーターです。 「openwakeword」バックエンドの場合、ウェイク ワードは提供されたモデル ファイルから自動的に抽出されるため、ここで指定する必要はありません。
wake_words_sensitivity (float、デフォルト = 0.6): ウェイク ワード検出の感度レベル (0 は最も感度が低く、1 は最も感度が高い)。
wake_word_activation_delay (float、デフォルト = 0): 最初に音声が検出されなかった場合に、監視の開始後、システムがウェイク ワードのアクティブ化に切り替わるまでの秒単位の期間。ゼロに設定すると、システムはウェイク ワード アクティブ化をすぐに使用します。
wake_word_timeout (float、デフォルト = 5): ウェイク ワードが認識されてからの期間 (秒単位)。このウィンドウ内で後続の音声アクティビティが検出されない場合、システムは非アクティブ状態に戻り、次のウェイク ワードまたは音声アクティブ化を待ちます。
wake_word_buffer_duration (float、デフォルト = 0.1): ウェイク ワード検出中に音声データをバッファリングする期間 (秒単位)。これは、録音バッファからウェイク ワードを切り出すのに役立ち、後続の音声テキストと一緒にウェイク ワードが誤って検出されることがなくなり、よりクリーンで正確な文字起こし開始トリガーが保証されます。ウェイク ワードの一部がテキストとして検出される場合は、この値を増やします。
on_wakeword_detected : ウェイク ワードが検出されたときにトリガーされる呼び出し可能関数。
on_wakeword_timeout : ウェイクワードのアクティブ化後に音声が検出されなかった後にシステムが非アクティブ状態に戻ったときにトリガーされる呼び出し可能関数。
on_wakeword_detection_start : システムがウェイク ワードのリッスンを開始したときにトリガーされる呼び出し可能な関数
on_wakeword_detection_end : ウェイク ワードのリッスンを停止するときにトリガーされる呼び出し可能な関数 (タイムアウトまたはウェイク ワードが検出されたためなど)
独自の OpenWakeWord モデルをトレーニングする方法については、ここを参照してください。最初はシンプルな Google Colab ノートブックを使用することも、よりカスタマイズできる詳細なノートブックを使用することもできます (高品質のモデルを作成できますが、より多くの開発経験が必要です)。
tensorflow tflite モデルを onnx 形式に変換するには、tf2onnx を使用する必要がある場合があります。
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 :
A:この問題は、 ctranslate2
と cuDNN のバージョンの不一致によって発生します。 ctranslate2
ライブラリは、cuDNN 9.2 を使用するバージョン 4.5.0 に更新されました。この問題を解決するには 2 つの方法があります。
ctranslate2
バージョン 4.4.0 にダウングレードします。 pip install ctranslate2==4.4.0
貢献はいつでも大歓迎です!
Docker サポートを提供してくれた Steven Linn に感謝します。
マサチューセッツ工科大学
コルヤ・ベーゲル
電子メール: [email protected]
GitHub