Простая в использовании библиотека преобразования речи в текст с малой задержкой для приложений реального времени.
RealtimeSTT слушает микрофон и преобразует голос в текст.
Подсказка: ознакомьтесь с Linguflex , оригинальным проектом, из которого выделился RealtimeSTT. Он позволяет вам управлять своим окружением с помощью речи и является одним из самых функциональных и сложных помощников с открытым исходным кодом, доступных в настоящее время.
Идеально подходит для:
Последняя версия: v0.3.7
Смотрите историю выпусков.
Подсказка: поскольку сейчас мы используем модуль
multiprocessing
, обязательно включите защитуif __name__ == '__main__':
в свой код, чтобы предотвратить непредвиденное поведение, особенно на таких платформах, как Windows. Подробное объяснение того, почему это важно, можно найти в официальной документации Python поmultiprocessing
.
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 , поддерживающую только ЦП .
Несмотря на то, что RealtimeSTT можно запускать только с установленным процессором (в данном случае используйте небольшую модель, например «tiny» или «base»), вы получите гораздо лучший опыт, используя:
Чтобы обновить установку PyTorch, чтобы включить поддержку графического процессора с CUDA, следуйте этим инструкциям в зависимости от вашей конкретной версии CUDA. Это полезно, если вы хотите повысить производительность RealtimeSTT с помощью возможностей CUDA.
Чтобы обновить 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 CUDA, посетите официальный список графических процессоров CUDA.
Если вы раньше не использовали модели CUDA, перед установкой могут потребоваться некоторые дополнительные действия. Эти шаги подготавливают систему к поддержке CUDA и установке установки, оптимизированной для графического процессора . Это рекомендуется тем, кому требуется более высокая производительность и имеется совместимый графический процессор NVIDIA. Чтобы использовать RealtimeSTT с поддержкой графического процессора через CUDA, также выполните следующие действия:
Установите набор инструментов NVIDIA CUDA :
Установите NVIDIA cuDNN :
Установите ffmpeg :
Примечание . Установка ffmpeg на самом деле может не потребоваться для работы RealtimeSTT * спасибо jgilbert2017 за указание на это.
Вы можете загрузить установщик для вашей ОС с веб-сайта ffmpeg.
Или используйте менеджер пакетов:
В Ubuntu или Debian :
sudo apt update && sudo apt install ffmpeg
В Арч Линукс :
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. Вы можете выбрать слова для пробуждения из этого списка: Алекса, американо, черника, шмель, компьютер, грейпфруты, кузнечик, эй, Google, эй, Сири, Джарвис, ок, гугл, picovoice, дикобраз, терминатор.
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 :
[...]
Или вы можете вызвать метод завершения работы вручную (если использование «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, ключи API должны быть указаны в переменных среды OPENAI_API_KEY, AZURE_SPEECH_KEY и ELEVENLABS_API_KEY (см. RealtimeTTS).
simple_test.py
realtimestt_test.py
Wakeword_test.py
переводчик.py
pip install openai realtimetts
.openai_voice_interface.py
pip install openai realtimetts
.Advanced_talk.py
pip install openai keyboard realtimetts
.минималистичный_talkbot.py
pip install openai realtimetts
.Подкаталог example_app содержит усовершенствованное приложение пользовательского интерфейса для API OpenAI на основе PyQt5.
AudioToTextRecorder
Когда вы инициализируете класс AudioToTextRecorder
, у вас есть различные варианты настройки его поведения.
model (str, default="tiny"): размер модели или путь для транскрипции.
язык (str, default=""): код языка для транскрипции. Если оставить пустым, модель попытается автоматически определить язык. Поддерживаемые коды языков перечислены в библиотеке Whisper Tokenizer.
Compute_type (str, default="default"): указывает тип вычислений, которые будут использоваться для транскрипции. См. Шепотное квантование.
input_device_index (int, по умолчанию = 0): индекс устройства аудиовхода, который будет использоваться.
gpu_device_index (int, по умолчанию = 0): используемый индекс устройства графического процессора. Модель также можно загрузить на несколько графических процессоров, передав список идентификаторов (например, [0, 1, 2, 3]).
устройство (str, default="cuda"): устройство, которое будет использоваться моделью. Может быть либо «cuda», либо «cpu».
on_recording_start : вызываемая функция, запускаемая при начале записи.
on_recording_stop : вызываемая функция, запускаемая при окончании записи.
on_transcription_start : вызываемая функция, запускаемая при запуске транскрипции.
обеспечения_sentence_starting_uppercase (bool, по умолчанию=True): гарантирует, что каждое предложение, обнаруженное алгоритмом, начинается с заглавной буквы.
обеспечения_sentence_ends_with_ period (bool, default=True): гарантирует, что каждое предложение, которое не заканчивается знаками препинания, такими как «?», «!» заканчивается точкой
use_microphone (bool, по умолчанию=True): использование локального микрофона для транскрипции. Установите значение False, если вы хотите предоставлять фрагменты с помощью методаfeed_audio.
spinner (bool, default=True): предоставляет текст анимации счетчика с информацией о текущем состоянии рекордера.
level (int, default=logging.WARNING): Уровень ведения журнала.
handle_buffer_overflow (bool, по умолчанию = True): если установлено, система зарегистрирует предупреждение, когда во время записи произойдет переполнение ввода, и удалит данные из буфера.
Beam_size (int, по умолчанию = 5): размер луча, используемый для декодирования поиска луча.
Initial_prompt (str или итерируемое значение int, по умолчанию = Нет): Начальное приглашение, которое будет передано в модели транскрипции.
suppress_tokens (список целых чисел, по умолчанию=[-1]): токены, которые будут исключены из вывода транскрипции.
on_recorded_chunk : функция обратного вызова, которая срабатывает при записи фрагмента звука. Отправляет данные фрагмента в качестве параметра.
debug_mode (bool, default=False): если установлено, система выводит на консоль дополнительную отладочную информацию.
print_transcription_time (bool, default=False): регистрирует время обработки транскрипции основной модели. Это может быть полезно для мониторинга производительности и отладки.
Early_transcription_on_silence (int, по умолчанию = 0): если установлено, система будет расшифровывать звук быстрее при обнаружении тишины. Транскрипция начнется через указанные миллисекунды. Держите это значение ниже, чем post_speech_silence_duration
, в идеале около post_speech_silence_duration
минус предполагаемое время транскрипции с основной моделью. Если молчание длится дольше, чем post_speech_silence_duration
, запись останавливается и передается транскрипция. Если голосовая активность возобновляется в течение этого периода, транскрипция сбрасывается. Это приводит к более быстрой финальной транскрипции за счет дополнительной загрузки графического процессора из-за некоторых ненужных финальных транскрипций.
Allowed_latency_limit (int, по умолчанию = 100): определяет максимальное количество необработанных фрагментов в очереди перед их удалением. Это помогает предотвратить перегрузку системы и потерю отзывчивости в приложениях реального времени.
no_log_file (bool, по умолчанию = False): если установлено, система пропустит запись файла журнала отладки, сокращая объем операций ввода-вывода на диск. Полезно, если запись в файл не требуется, а производительность является приоритетом.
Примечание . При включении описания в реальном времени настоятельно рекомендуется установить графический процессор. Использование транскрипции в реальном времени может привести к высокой нагрузке на графический процессор.
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 (с плавающей запятой, по умолчанию = 0,2): определяет временной интервал в секундах после расшифровки фрагмента аудио. Более низкие значения приведут к более частому (частому) обновлению транскрипции в реальном времени, но могут увеличить вычислительную нагрузку.
on_realtime_transcription_update : функция обратного вызова, которая срабатывает всякий раз, когда происходит обновление транскрипции в реальном времени. Функция вызывается с вновь записанным текстом в качестве аргумента.
on_realtime_transcription_stabilized : функция обратного вызова, которая запускается всякий раз, когда происходит обновление транскрипции в реальном времени, и возвращает стабилизированный текст более высокого качества в качестве аргумента.
Beam_size_realtime (int, по умолчанию = 3): размер луча, который будет использоваться для декодирования поиска луча транскрипции в реальном времени.
silero_sensitivity (float, по умолчанию = 0,6): чувствительность обнаружения голосовой активности Silero в диапазоне от 0 (наименее чувствительная) до 1 (наиболее чувствительная). По умолчанию — 0,6.
silero_use_onnx (bool, default=False): позволяет использовать предварительно обученную модель из Silero в формате ONNX (Open Neural Network Exchange) вместо формата PyTorch. По умолчанию — ложь. Рекомендуется для более быстрой работы.
silero_deactivity_detection (bool, по умолчанию = False): включает модель Silero для обнаружения конца речи. Более устойчив к фоновому шуму. Использует дополнительные ресурсы графического процессора, но повышает точность в шумной среде. Если установлено значение False, используется VAD WebRTC по умолчанию, который более чувствителен, но может продолжать запись дольше из-за фоновых звуков.
webrtc_sensitivity (int, по умолчанию = 3): чувствительность механизма обнаружения голосовой активности WebRTC в диапазоне от 0 (наименее агрессивный/наиболее чувствительный) до 3 (наиболее агрессивный, наименее чувствительный). По умолчанию — 3.
post_speech_silence_duration (float, по умолчанию = 0,2): продолжительность тишины в секундах, которая должна следовать за речью, прежде чем запись будет считаться завершенной. Это гарантирует, что любые короткие паузы во время речи не прекратят запись преждевременно.
min_gap_between_recordings (с плавающей запятой, по умолчанию = 1,0): определяет минимальный интервал времени в секундах, который должен существовать между окончанием одного сеанса записи и началом другого, чтобы предотвратить быструю последовательную запись.
min_length_of_recording (с плавающей запятой, по умолчанию = 1,0): определяет минимальную продолжительность в секундах, которую должен длиться сеанс записи, чтобы обеспечить содержательный захват звука и предотвратить чрезмерно короткие или фрагментированные записи.
pre_recording_buffer_duration (с плавающей запятой, по умолчанию = 0,2): интервал времени в секундах, в течение которого аудио буферизуется перед формальной записью. Это помогает уравновесить задержку, присущую обнаружению речевой активности, гарантируя, что ни один начальный звук не будет пропущен.
on_vad_detect_start : вызываемая функция, запускаемая, когда система начинает прослушивать голосовую активность.
on_vad_detect_stop : вызываемая функция, активируемая, когда система перестает прослушивать голосовую активность.
Wakeword_backend (str, default="pvporcupine"): указывает внутреннюю библиотеку, которая будет использоваться для обнаружения слов пробуждения. Поддерживаемые параметры включают «pvporcupine» для использования механизма пробуждения слов Porcupine или «oww» для использования механизма OpenWakeWord.
openwakeword_model_paths (str, по умолчанию = нет): разделенные запятыми пути к файлам моделей для библиотеки openwakeword. Эти пути указывают на пользовательские модели, которые можно использовать для обнаружения слов пробуждения, когда библиотека openwakeword выбрана в качестве Wakeword_backend.
openwakeword_inference_framework (str, default="onnx"): указывает структуру вывода, которая будет использоваться с библиотекой openwakeword. Может быть либо «onnx» для формата Open Neural Network Exchange, либо «tflite» для TensorFlow Lite.
Wake_words (str, default=""): инициировать запись при использовании механизма пробуждения pvporcupine. Несколько слов пробуждения можно указать в виде строки, разделенной запятыми. Поддерживаемые слова пробуждения: alexa, americano, blueberry, bumblebee, компьютер, грейпфруты, кузнечик, эй, Google, эй, Siri, jarvis, ok google, picovoice, дикобраз, терминатор. Для бэкэнда openwakeword слова пробуждения автоматически извлекаются из предоставленных файлов модели, поэтому указывать их здесь нет необходимости.
Wake_words_sensitivity (с плавающей запятой, по умолчанию = 0,6): уровень чувствительности для обнаружения слов пробуждения (0 для наименее чувствительного, 1 для наиболее чувствительного).
Wake_word_activation_delay (с плавающей запятой, по умолчанию = 0): Продолжительность в секундах после начала мониторинга, прежде чем система переключится на активацию слова пробуждения, если изначально голос не обнаружен. Если установлено значение 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 для преобразования моделей 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
Вклады всегда приветствуются!
Выражаем благодарность Стивену Линну за поддержку докера.
Массачусетский технологический институт
Коля Бейгель
Электронная почта: [email protected]
GitHub