import os import json import vosk class SpeechRecognitionService: def __init__(self, model_path=None): if model_path is None: base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) model_path = os.path.join(base_dir, "models", "vosk-model-small-en-us-0.15") if not os.path.exists(model_path): raise FileNotFoundError(f"Vosk model not found at {model_path}") print(f"Loading Vosk model from {model_path}...") self.model = vosk.Model(model_path) def transcribe(self, audio_data, samplerate): recognizer = vosk.KaldiRecognizer(self.model, samplerate) if recognizer.AcceptWaveform(audio_data): result = json.loads(recognizer.Result()) return result.get("text", "") else: partial = json.loads(recognizer.PartialResult()) return partial.get("partial", "") def transcribe_full(self, audio_data, samplerate): recognizer = vosk.KaldiRecognizer(self.model, samplerate) recognizer.AcceptWaveform(audio_data) result = json.loads(recognizer.FinalResult()) return result.get("text", "")