diff --git a/listener.py b/listener.py index e69de29..555c0c5 100644 --- a/listener.py +++ b/listener.py @@ -0,0 +1,47 @@ +from vosk import Model, KaldiRecognizer +import pyaudio +import os # Для проверки наличия папки языковой модели +import json + +kaldi = None # Распознавание речи +audio_stream = None # Звуковой поток с микрофона + +def init_listener(): + """Инициализация слушателя для распознования речи""" + + global kaldi # Распознавание речи + global audio_stream # Звуковой поток с микрофона + + model_dir = "model-ru" # Директория с языковой моделью + + if not os.path.exists(model_dir): + print ("Модель можно скачать по адресу https://alphacephei.com/vosk/models") + exit(1) # Если модель не найдена - завершаем работу + + model = Model(model_dir) # Загружаем языковую модель + kaldi = KaldiRecognizer(model, 16000) # Разпознование речи + + # Звук с микрофона + p = pyaudio.PyAudio() + audio_stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000) + audio_stream.start_stream() + + +def recognize(): + """Слушает микрофон и распознает речь. Возвращает строку распознанных слов""" + + while True: + # Запись фреймов(4000) + data = audio_stream.read(4000) + # Если ничего не считалось - завершаем цикл + if len(data) == 0: + break + + # Распознание записанного звука + if kaldi.AcceptWaveform(data): + text = json.loads(kaldi.Result())["text"].lower() + # print(text) # Отладочная печать + if len(text) > 0: + return text + +