실시간 애플리케이션을 위한 사용하기 쉽고 대기 시간이 짧은 음성-텍스트 라이브러리
RealtimeSTT는 마이크를 듣고 음성을 텍스트로 변환합니다.
힌트: RealtimeSTT가 분리된 원래 프로젝트인 Linguflex를 확인하세요 . 말로 환경을 제어할 수 있으며 현재 사용할 수 있는 가장 유능하고 정교한 오픈 소스 도우미 중 하나입니다.
다음과 같은 경우에 이상적입니다.
최신 버전: 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"와 같은 작은 모델 사용) 다음을 사용하면 훨씬 더 나은 경험을 얻을 수 있습니다.
CUDA에서 GPU 지원을 활성화하도록 PyTorch 설치를 업그레이드하려면 특정 CUDA 버전에 따라 다음 지침을 따르십시오. 이는 CUDA 기능으로 RealtimeSTT의 성능을 향상시키려는 경우에 유용합니다.
CUDA 11.8을 지원하도록 PyTorch 및 Torchaaudio를 업데이트하려면 다음 명령을 사용하십시오.
pip install torch==2.3.1+cu118 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118
CUDA 12.X를 지원하도록 PyTorch 및 Torchaaudio를 업데이트하려면 다음을 실행하십시오.
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 웹사이트에서 OS용 설치 프로그램을 다운로드할 수 있습니다.
또는 패키지 관리자를 사용하십시오.
Ubuntu 또는 Debian의 경우 :
sudo apt update && sudo apt install ffmpeg
아치 리눅스에서 :
sudo pacman -S ffmpeg
Homebrew를 사용하는 MacOS (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, 아메리카노, 블루베리, 범블비, 컴퓨터, 자몽, 메뚜기, Hey Google, Hey Siri, Jarvis, Ok Google, picovoice, porcupine, 터미네이터 목록에서 깨우기 단어를 선택할 수 있습니다.
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 :
[...]
또는 수동으로 종료 메소드를 호출할 수 있습니다("with"를 사용할 수 없는 경우).
recorder . shutdown ()
from RealtimeSTT import AudioToTextRecorder
if __name__ == '__main__' :
with AudioToTextRecorder () as recorder :
[...]
# or manually shutdown if "with" is not used
recorder . shutdown ()
테스트 하위 디렉터리에는 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 하위 디렉터리에는 PyQt5를 기반으로 하는 OpenAI API를 위한 세련된 사용자 인터페이스 애플리케이션이 포함되어 있습니다.
AudioToTextRecorder
의 초기화 매개변수 AudioToTextRecorder
클래스를 초기화하면 해당 동작을 사용자 정의할 수 있는 다양한 옵션이 제공됩니다.
model (str, default="tiny"): 변환을 위한 모델 크기 또는 경로입니다.
언어 (str, default=""): 전사를 위한 언어 코드입니다. 비워두면 모델은 언어를 자동 감지하려고 시도합니다. 지원되는 언어 코드는 Whisper Tokenizer 라이브러리에 나열되어 있습니다.
Compute_type (str, default="default"): 전사에 사용될 계산 유형을 지정합니다. 속삭임 양자화 참조
input_device_index (int, default=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 : 전사가 시작될 때 트리거되는 호출 가능한 함수입니다.
verify_sentence_starting_uppercase (bool, default=True): 알고리즘이 감지한 모든 문장이 대문자로 시작하는지 확인합니다.
verify_sentence_ends_with_기간 (bool, default=True): "?", "!"와 같은 구두점으로 끝나지 않는 모든 문장을 보장합니다. 마침표로 끝난다
use_microphone (bool, 기본값=True): 녹음을 위해 로컬 마이크를 사용합니다. Feed_audio 메소드로 청크를 제공하려면 False로 설정하십시오.
spinner (bool, default=True): 현재 레코더 상태에 대한 정보가 포함된 스피너 애니메이션 텍스트를 제공합니다.
level (int, default=logging.WARNING): 로깅 수준입니다.
handler_buffer_overflow (bool, default=True): 설정하면 녹화 중 입력 오버플로가 발생할 때 시스템이 경고를 기록하고 버퍼에서 데이터를 제거합니다.
Beam_size (int, default=5): 빔 검색 디코딩에 사용할 빔 크기입니다.
initial_prompt (str 또는 int의 반복 가능, 기본값=None): 전사 모델에 제공될 초기 프롬프트입니다.
억제_토큰 (정수 목록, 기본값=[-1]): 기록 출력에서 표시되지 않는 토큰입니다.
on_recorded_chunk : 오디오 청크가 녹음될 때 트리거되는 콜백 함수입니다. 청크 데이터를 매개변수로 제출합니다.
debug_mode (bool, 기본값=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, 기본값=100): 청크를 삭제하기 전에 대기열에서 처리되지 않은 청크의 최대 수를 지정합니다. 이를 통해 실시간 애플리케이션에서 시스템이 과부하되거나 응답성이 떨어지는 것을 방지할 수 있습니다.
no_log_file (bool, 기본값=False): 설정된 경우 시스템은 디버그 로그 파일 쓰기를 건너뛰어 디스크 I/O를 줄입니다. 파일에 로깅할 필요가 없고 성능이 우선인 경우에 유용합니다.
참고 : 실시간 설명을 활성화하는 경우 GPU 설치를 적극 권장합니다. 실시간 전사를 사용하면 GPU 부하가 높아질 수 있습니다.
활성화_realtime_transcription (bool, 기본값=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, 기본값=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 (bool, 기본값=False): PyTorch 형식 대신 ONNX(Open Neural Network Exchange) 형식으로 Silero에서 사전 훈련된 모델을 사용할 수 있도록 합니다. 기본값은 거짓입니다. 더 빠른 성능을 위해 권장됩니다.
silero_deactivity_Detection (bool, 기본값=False): 음성 끝 감지를 위해 Silero 모델을 활성화합니다. 배경 소음에 더욱 강력해졌습니다. 추가 GPU 리소스를 활용하지만 시끄러운 환경에서 정확도가 향상됩니다. False인 경우 기본 WebRTC VAD를 사용합니다. 이 VAD는 더 민감하지만 배경 소리로 인해 더 오랫동안 녹음을 계속할 수 있습니다.
webrtc_sensitivity (int, 기본값=3): WebRTC 음성 활동 감지 엔진의 감도 범위는 0(가장 덜 공격적/가장 민감함)에서 3(가장 공격적, 가장 덜 민감함)입니다. 기본값은 3입니다.
post_speech_silence_duration (float, 기본값=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, 기본값=None): openwakeword 라이브러리용 모델 파일에 대한 쉼표로 구분된 경로입니다. 이러한 경로는 openwakeword 라이브러리가 wakeword_backend로 선택될 때 깨우기 단어 감지에 사용할 수 있는 사용자 정의 모델을 가리킵니다.
openwakeword_inference_framework (str, default="onnx"): openwakeword 라이브러리와 함께 사용할 추론 프레임워크를 지정합니다. Open Neural Network Exchange 형식의 경우 'onnx', TensorFlow Lite의 경우 'tflite'일 수 있습니다.
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, 기본값=0.6): 깨우기 단어 감지를 위한 민감도 수준(0은 가장 민감하지 않고, 1은 가장 민감합니다).
wake_word_activation_delay (float, 기본값=0): 처음에 음성이 감지되지 않는 경우 모니터링 시작 후 시스템이 깨우기 단어 활성화로 전환되기 전까지의 시간(초)입니다. 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으로 업데이트되었습니다. 이 문제를 해결하는 방법에는 두 가지가 있습니다.
ctranslate2
버전 4.4.0으로 다운그레이드합니다 . pip install ctranslate2==4.4.0
기여는 언제나 환영합니다!
Docker 지원을 제공한 Steven Linn에게 감사 인사를 전합니다.
MIT
콜자 베이겔
이메일: [email protected]
GitHub