Pustaka ucapan-ke-teks yang mudah digunakan dan berlatensi rendah untuk aplikasi waktu nyata
RealtimeSTT mendengarkan mikrofon dan mentranskripsikan suara menjadi teks.
Petunjuk: Lihat Linguflex , proyek asli tempat RealtimeSTT dipisahkan. Ini memungkinkan Anda mengontrol lingkungan Anda dengan berbicara dan merupakan salah satu asisten sumber terbuka paling mumpuni dan canggih yang tersedia saat ini.
Ini ideal untuk:
Versi Terbaru: v0.3.7
Lihat riwayat rilis.
Petunjuk: Karena kita sekarang menggunakan modul
multiprocessing
, pastikan untuk menyertakan perlindunganif __name__ == '__main__':
dalam kode Anda untuk mencegah perilaku yang tidak diharapkan, terutama pada platform seperti Windows. Untuk penjelasan mendetail tentang mengapa hal ini penting, kunjungi dokumentasi resmi Python tentangmultiprocessing
.
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 )
Akan mengetikkan semua yang dikatakan ke dalam kotak teks pilihan Anda
Petunjuk : Lihat RealtimeTTS, versi keluaran perpustakaan ini, untuk kemampuan teks-ke-suara. Bersama-sama, keduanya membentuk pembungkus audio real-time yang kuat di sekitar model bahasa besar.
Perpustakaan ini menggunakan:
Komponen-komponen ini mewakili "standar industri" untuk aplikasi mutakhir, memberikan landasan paling modern dan efektif untuk membangun solusi kelas atas.
pip install RealtimeSTT
Ini akan menginstal semua dependensi yang diperlukan, termasuk versi PyTorch yang hanya mendukung CPU .
Meskipun dimungkinkan untuk menjalankan RealtimeSTT hanya dengan instalasi CPU (gunakan model kecil seperti "tiny" atau "base" dalam kasus ini), Anda akan mendapatkan pengalaman yang jauh lebih baik menggunakan:
Untuk meningkatkan instalasi PyTorch Anda guna mengaktifkan dukungan GPU dengan CUDA, ikuti petunjuk ini berdasarkan versi CUDA spesifik Anda. Hal ini berguna jika Anda ingin meningkatkan kinerja RealtimeSTT dengan kemampuan CUDA.
Untuk memperbarui PyTorch dan Torchaudio agar mendukung CUDA 11.8, gunakan perintah berikut:
pip install torch==2.3.1+cu118 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118
Untuk memperbarui PyTorch dan Torchaudio agar mendukung CUDA 12.X, jalankan perintah berikut:
pip install torch==2.3.1+cu121 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121
Ganti 2.3.1
dengan versi PyTorch yang sesuai dengan sistem dan persyaratan Anda.
Catatan : Untuk memeriksa apakah GPU NVIDIA Anda mendukung CUDA, kunjungi daftar resmi GPU CUDA.
Jika Anda belum pernah menggunakan model CUDA sebelumnya, beberapa langkah tambahan mungkin diperlukan satu kali sebelum instalasi. Langkah-langkah ini mempersiapkan sistem untuk dukungan CUDA dan pemasangan instalasi yang dioptimalkan GPU . Ini direkomendasikan bagi mereka yang membutuhkan kinerja lebih baik dan memiliki GPU NVIDIA yang kompatibel. Untuk menggunakan RealtimeSTT dengan dukungan GPU melalui CUDA ikuti juga langkah-langkah berikut:
Instal Perangkat NVIDIA CUDA :
Instal NVIDIA cuDNN :
Instal ffmpeg :
Catatan : Instalasi ffmpeg mungkin sebenarnya tidak diperlukan untuk mengoperasikan RealtimeSTT *terima kasih kepada jgilbert2017 yang telah menunjukkan hal ini
Anda dapat mengunduh penginstal untuk OS Anda dari Situs Web ffmpeg.
Atau gunakan manajer paket:
Di Ubuntu atau Debian :
sudo apt update && sudo apt install ffmpeg
Di Arch Linux :
sudo pacman -S ffmpeg
Di MacOS menggunakan Homebrew (https://brew.sh/):
brew install ffmpeg
Di Windows menggunakan dokumentasi resmi Winget :
winget install Gyan.FFmpeg
Di Windows menggunakan Chocolatey (https://chocolatey.org/):
choco install ffmpeg
Di Windows menggunakan Scoop (https://scoop.sh/):
scoop install ffmpeg
Penggunaan dasar:
Mulai dan berhentinya perekaman dipicu secara manual.
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 ())
Merekam berdasarkan deteksi aktivitas suara.
with AudioToTextRecorder () as recorder :
print ( recorder . text ())
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
with AudioToTextRecorder () as recorder :
print ( "Transcription: " , recorder . text ())
Saat menjalankan recorder.text dalam satu lingkaran, disarankan untuk menggunakan panggilan balik, yang memungkinkan transkripsi dijalankan secara asinkron:
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 )
Aktivasi kata kunci sebelum mendeteksi suara. Tulis daftar kata kunci aktivasi yang Anda inginkan yang dipisahkan koma ke dalam parameter wake_words. Anda dapat memilih kata-kata bangun dari daftar ini: 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 ())
Anda dapat mengatur fungsi panggilan balik untuk dijalankan pada peristiwa yang berbeda (lihat Konfigurasi):
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 )
Jika Anda tidak ingin menggunakan mikrofon lokal, setel parameter use_microphone ke false dan berikan potongan audio PCM mentah dalam mono 16-bit (sampel 16000) dengan metode ini:
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 ())
Anda dapat mematikan perekam dengan aman menggunakan protokol manajer konteks:
with AudioToTextRecorder () as recorder :
[...]
Atau Anda dapat memanggil metode mematikan secara manual (jika menggunakan "dengan" tidak memungkinkan):
recorder . shutdown ()
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
with AudioToTextRecorder () as recorder :
[...]
# or manually shutdown if "with" is not used
recorder . shutdown ()
Subdirektori pengujian berisi sekumpulan skrip untuk membantu Anda mengevaluasi dan memahami kemampuan perpustakaan RealtimeTTS.
Skrip pengujian yang bergantung pada pustaka RealtimeTTS mungkin mengharuskan Anda memasukkan wilayah layanan Azure Anda dalam skrip. Saat menggunakan skrip demo terkait OpenAI, Azure, atau Elevenlabs, Kunci API harus disediakan dalam variabel lingkungan OPENAI_API_KEY, AZURE_SPEECH_KEY, dan ELEVENLABS_API_KEY (lihat RealtimeTTS)
simple_test.py
realtimestt_test.py
bangunword_test.py
penerjemah.py
pip install openai realtimetts
.openai_voice_interface.py
pip install openai realtimetts
.lanjutan_talk.py
pip install openai keyboard realtimetts
.minimalis_talkbot.py
pip install openai realtimetts
.Subdirektori example_app berisi aplikasi antarmuka pengguna yang disempurnakan untuk OpenAI API berdasarkan PyQt5.
AudioToTextRecorder
Saat Anda menginisialisasi kelas AudioToTextRecorder
, Anda memiliki berbagai opsi untuk menyesuaikan perilakunya.
model (str, default="tiny"): Ukuran model atau jalur untuk transkripsi.
bahasa (str, default=""): Kode bahasa untuk transkripsi. Jika dibiarkan kosong, model akan mencoba mendeteksi bahasa secara otomatis. Kode bahasa yang didukung tercantum di perpustakaan Whisper Tokenizer.
compute_type (str, default="default"): Menentukan jenis komputasi yang akan digunakan untuk transkripsi. Lihat Kuantisasi Bisikan
input_device_index (int, default=0): Indeks Perangkat Input Audio yang akan digunakan.
gpu_device_index (int, default=0): Indeks Perangkat GPU yang akan digunakan. Model juga dapat dimuat pada beberapa GPU dengan meneruskan daftar ID (misalnya [0, 1, 2, 3]).
perangkat (str, default="cuda"): Perangkat untuk digunakan model. Bisa berupa "cuda" atau "cpu".
on_recording_start : Fungsi yang dapat dipanggil dipicu saat perekaman dimulai.
on_recording_stop : Fungsi yang dapat dipanggil dipicu saat perekaman berakhir.
on_transcription_start : Fungsi yang dapat dipanggil dipicu saat transkripsi dimulai.
sure_sentence_starting_uppercase (bool, default=True): Memastikan bahwa setiap kalimat yang terdeteksi oleh algoritme dimulai dengan huruf besar.
sure_sentence_ends_with_period (bool, default=True): Memastikan setiap kalimat yang tidak diakhiri dengan tanda baca seperti "?", "!" diakhiri dengan suatu titik
use_microphone (bool, default=True): Penggunaan mikrofon lokal untuk transkripsi. Setel ke False jika Anda ingin memberikan potongan dengan metode feed_audio.
spinner (bool, default=True): Menyediakan teks animasi spinner dengan informasi tentang status perekam saat ini.
level (int, default=logging.PERINGATAN): Tingkat pencatatan.
handle_buffer_overflow (bool, default=True): Jika disetel, sistem akan mencatat peringatan ketika terjadi kelebihan input selama perekaman dan menghapus data dari buffer.
beam_size (int, default=5): Ukuran berkas yang digunakan untuk decoding pencarian berkas.
initial_prompt (str atau iterable of int, default=None): Perintah awal untuk dimasukkan ke model transkripsi.
supres_tokens (daftar int, default=[-1]): Token yang akan disembunyikan dari keluaran transkripsi.
on_recorded_chunk : Fungsi panggilan balik yang dipicu ketika sebagian audio direkam. Mengirimkan data potongan sebagai parameter.
debug_mode (bool, default=False): Jika disetel, sistem akan mencetak informasi debug tambahan ke konsol.
print_transcription_time (bool, default=False): Mencatat waktu pemrosesan transkripsi model utama. Ini dapat berguna untuk pemantauan kinerja dan debugging.
early_transcription_on_silence (int, default=0): Jika disetel, sistem akan menyalin audio lebih cepat ketika keheningan terdeteksi. Transkripsi akan dimulai setelah milidetik yang ditentukan. Pertahankan nilai ini lebih rendah dari post_speech_silence_duration
, idealnya sekitar post_speech_silence_duration
dikurangi perkiraan waktu transkripsi dengan model utama. Jika keheningan berlangsung lebih lama dari post_speech_silence_duration
, rekaman dihentikan, dan transkripsi dikirimkan. Jika aktivitas suara dilanjutkan dalam periode ini, transkripsi akan dibuang. Hal ini menghasilkan transkripsi akhir yang lebih cepat dengan mengorbankan beban GPU tambahan karena beberapa transkripsi akhir yang tidak perlu.
diperbolehkan_latency_limit (int, default=100): Menentukan jumlah maksimum potongan yang belum diproses dalam antrian sebelum membuang potongan. Hal ini membantu mencegah sistem kewalahan dan kehilangan respons dalam aplikasi real-time.
no_log_file (bool, default=False): Jika disetel, sistem akan melewatkan penulisan file log debug, sehingga mengurangi I/O disk. Berguna jika login ke suatu file tidak diperlukan dan kinerja adalah prioritas.
Catatan : Saat mengaktifkan deskripsi realtime, instalasi GPU sangat disarankan. Menggunakan transkripsi waktu nyata dapat menyebabkan beban GPU yang tinggi.
aktifkan_realtime_transcription (bool, default=False): Mengaktifkan atau menonaktifkan transkripsi audio real-time. Bila diatur ke True, audio akan terus ditranskripsi saat sedang direkam.
use_main_model_for_realtime (bool, default=False): Jika diatur ke True, model transkripsi utama akan digunakan untuk transkripsi reguler dan real-time. Jika False, model terpisah yang ditentukan oleh realtime_model_type
akan digunakan untuk transkripsi real-time. Menggunakan satu model dapat menghemat memori dan berpotensi meningkatkan kinerja, namun mungkin tidak dioptimalkan untuk pemrosesan waktu nyata. Penggunaan model terpisah memungkinkan model yang lebih kecil dan lebih cepat untuk transkripsi real-time sekaligus mempertahankan model yang lebih akurat untuk transkripsi akhir.
realtime_model_type (str, default="tiny"): Menentukan ukuran atau jalur model pembelajaran mesin yang akan digunakan untuk transkripsi waktu nyata.
realtime_processing_pause (float, default=0.2): Menentukan interval waktu dalam hitungan detik setelah sebagian audio ditranskripsi. Nilai yang lebih rendah akan menghasilkan lebih banyak pembaruan transkripsi "real-time" (sering) namun dapat meningkatkan beban komputasi.
on_realtime_transcription_update : Fungsi panggilan balik yang dipicu setiap kali ada pembaruan dalam transkripsi waktu nyata. Fungsi ini dipanggil dengan teks yang baru ditranskripsi sebagai argumennya.
on_realtime_transcription_stabilized : Fungsi panggilan balik yang dipicu setiap kali ada pembaruan dalam transkripsi real-time dan mengembalikan teks stabil dengan kualitas lebih tinggi sebagai argumennya.
beam_size_realtime (int, default=3): Ukuran berkas yang digunakan untuk decoding penelusuran berkas transkripsi waktu nyata.
silero_sensitivity (float, default=0.6): Sensitivitas untuk deteksi aktivitas suara Silero berkisar dari 0 (paling tidak sensitif) hingga 1 (paling sensitif). Standarnya adalah 0,6.
silero_use_onnx (bool, default=False): Mengaktifkan penggunaan model terlatih dari Silero dalam format ONNX (Open Neural Network Exchange) alih-alih format PyTorch. Defaultnya adalah Salah. Direkomendasikan untuk kinerja yang lebih cepat.
silero_deactivity_detection (bool, default=False): Mengaktifkan model Silero untuk deteksi akhir ucapan. Lebih kuat terhadap kebisingan latar belakang. Memanfaatkan sumber daya GPU tambahan namun meningkatkan akurasi di lingkungan yang bising. Jika Salah, menggunakan VAD WebRTC default, yang lebih sensitif namun mungkin terus merekam lebih lama karena suara latar belakang.
webrtc_sensitivity (int, default=3): Sensitivitas untuk mesin Deteksi Aktivitas Suara WebRTC mulai dari 0 (paling tidak agresif/paling sensitif) hingga 3 (paling agresif, paling tidak sensitif). Standarnya adalah 3.
post_speech_silence_duration (float, default=0.2): Durasi dalam detik hening yang harus mengikuti ucapan sebelum rekaman dianggap selesai. Hal ini memastikan bahwa jeda singkat selama pidato tidak mengakhiri rekaman sebelum waktunya.
min_gap_between_recordings (float, default=1.0): Menentukan interval waktu minimum dalam detik yang harus ada antara akhir satu sesi perekaman dan awal sesi lainnya untuk mencegah perekaman cepat berturut-turut.
min_length_of_recording (float, default=1.0): Menentukan durasi minimum dalam detik sesi rekaman harus berlangsung untuk memastikan pengambilan audio bermakna, mencegah rekaman terlalu pendek atau terfragmentasi.
pre_recording_buffer_duration (float, default=0.2): Rentang waktu, dalam detik, selama audio di-buffer sebelum perekaman formal. Hal ini membantu menyeimbangkan latensi yang melekat pada deteksi aktivitas ucapan, memastikan tidak ada audio awal yang terlewat.
on_vad_detect_start : Fungsi yang dapat dipanggil dipicu ketika sistem mulai mendengarkan aktivitas suara.
on_vad_detect_stop : Fungsi yang dapat dipanggil dipicu ketika sistem berhenti untuk mendengarkan aktivitas suara.
wakeword_backend (str, default="pvporcupine"): Menentukan pustaka backend yang akan digunakan untuk deteksi kata bangun. Opsi yang didukung mencakup 'pvporcupine' untuk menggunakan mesin kata bangun Porcupine atau 'oww' untuk menggunakan mesin OpenWakeWord.
openwakeword_model_paths (str, default=None): Jalur yang dipisahkan koma untuk memodelkan file untuk perpustakaan openwakeword. Jalur ini menunjuk ke model kustom yang dapat digunakan untuk deteksi kata bangun ketika pustaka kata bangun terbuka dipilih sebagai kata bangun_backend.
openwakeword_inference_framework (str, default="onnx"): Menentukan kerangka inferensi yang akan digunakan dengan pustaka openwakeword. Dapat berupa 'onnx' untuk format Open Neural Network Exchange atau 'tflite' untuk TensorFlow Lite.
wake_words (str, default=""): Memulai perekaman saat menggunakan backend wakeword 'pvporcupine'. Beberapa kata bangun dapat diberikan sebagai string yang dipisahkan koma. Kata-kata bangun yang didukung adalah: alexa, americano, blueberry, bumblebee, computer, grapefruits, grasshopper, hey google, hey siri, jarvis, ok google, picovoice, porcupine, terminator. Untuk backend 'openwakeword', kata bangun secara otomatis diekstraksi dari file model yang disediakan, jadi tidak perlu menentukannya di sini.
wake_words_sensitivity (float, default=0.6): Tingkat sensitivitas untuk deteksi kata bangun (0 untuk paling tidak sensitif, 1 untuk paling sensitif).
wake_word_activation_delay (float, default=0): Durasi dalam hitungan detik setelah dimulainya pemantauan sebelum sistem beralih ke aktivasi kata bangun jika tidak ada suara yang terdeteksi pada awalnya. Jika disetel ke nol, sistem akan segera menggunakan aktivasi kata bangun.
wake_word_timeout (float, default=5): Durasi dalam hitungan detik setelah kata bangun dikenali. Jika tidak ada aktivitas suara berikutnya yang terdeteksi dalam jendela ini, sistem akan bertransisi kembali ke keadaan tidak aktif, menunggu kata pengaktifan atau aktivasi suara berikutnya.
wake_word_buffer_duration (float, default=0.1): Durasi dalam hitungan detik untuk buffering data audio selama deteksi kata bangun. Hal ini membantu menghilangkan kata bangun dari buffer rekaman sehingga tidak salah terdeteksi bersama dengan teks lisan berikut, memastikan pemicu awal transkripsi yang lebih bersih dan akurat. Tingkatkan ini jika bagian dari kata bangun terdeteksi sebagai teks.
on_wakeword_detected : Fungsi yang dapat dipanggil dipicu ketika kata bangun terdeteksi.
on_wakeword_timeout : Fungsi yang dapat dipanggil dipicu ketika sistem kembali ke keadaan tidak aktif setelah tidak ada ucapan yang terdeteksi setelah aktivasi kata bangun.
on_wakeword_detection_start : Fungsi yang dapat dipanggil dipicu ketika sistem mulai mendengarkan kata-kata bangun
on_wakeword_detection_end : Fungsi yang dapat dipanggil terpicu ketika berhenti untuk mendengarkan kata-kata bangun (misalnya karena batas waktu atau kata bangun terdeteksi)
Lihat di sini untuk informasi tentang cara melatih model OpenWakeWord Anda sendiri. Anda dapat menggunakan notebook Google Colab sederhana sebagai permulaan atau menggunakan notebook yang lebih detail yang memungkinkan lebih banyak penyesuaian (dapat menghasilkan model berkualitas tinggi, namun memerlukan lebih banyak pengalaman pengembangan).
Anda mungkin perlu menggunakan tf2onnx untuk mengonversi model tensorflow tflite ke format onnx:
pip install -U tf2onnx
python -m tf2onnx.convert --tflite my_model_filename.tflite --output my_model_filename.onnx
Parameter awal yang disarankan untuk penggunaan 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: Masalah ini muncul karena ketidakcocokan antara versi ctranslate2
dan cuDNN. Pustaka ctranslate2
telah diperbarui ke versi 4.5.0, yang menggunakan cuDNN 9.2. Ada dua cara untuk mengatasi masalah ini:
ctranslate2
ke versi 4.4.0 : pip install ctranslate2==4.4.0
Kontribusi selalu diterima!
Berteriak kepada Steven Linn karena telah memberikan dukungan buruh pelabuhan.
MIT
Kolja Beigel
Email: [email protected]
GitHub