from vosk import Model, KaldiRecognizer, SetLogLevel 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) # Если модель не найдена - завершаем работу SetLogLevel(-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