Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 23 additions & 10 deletions nerd-dictation
Original file line number Diff line number Diff line change
Expand Up @@ -944,21 +944,30 @@ def text_from_vosk_pipe(

vosk.SetLogLevel(-1)

if not vosk_grammar_file:
grammar_json = ""
else:
with open(vosk_grammar_file, encoding="utf-8") as fh:
grammar_json = fh.read()

# Allow for loading the model to take some time:
if verbose >= 1:
sys.stderr.write("Loading model...\n")
model = vosk.Model(vosk_model_dir)

if grammar_json == "":
rec = vosk.KaldiRecognizer(model, sample_rate)
else:
rec = vosk.KaldiRecognizer(model, sample_rate, grammar_json)
rec = None

def vosk_load_recognizer() -> None:
nonlocal vosk_grammar_file
nonlocal rec

if not vosk_grammar_file:
grammar_json = ""
else:
with open(vosk_grammar_file, encoding="utf-8") as fh:
grammar_json = fh.read()

if grammar_json == "":
rec = vosk.KaldiRecognizer(model, sample_rate)
else:
rec = vosk.KaldiRecognizer(model, sample_rate, grammar_json)

vosk_load_recognizer()
assert rec is not None

if verbose >= 1:
sys.stderr.write("Model loaded.\n")
Expand Down Expand Up @@ -1041,6 +1050,7 @@ def text_from_vosk_pipe(
# Utilities for accessing results on `rec` (VOSK)

def rec_handle_fn_wrapper_from_final_result() -> str:
assert rec is not None
json_text = rec.FinalResult()

# When `rec.FinalResult()` returns an empty string, typically immediately after a resume,
Expand All @@ -1058,6 +1068,7 @@ def text_from_vosk_pipe(
return json_text

def rec_handle_fn_wrapper_from_partial_result(json_text_partial_prev: str) -> Tuple[str, str]:
assert rec is not None
json_text = rec.PartialResult()
# Without this, there are *many* calls with the same partial text.
if json_text_partial_prev != json_text:
Expand Down Expand Up @@ -1089,6 +1100,7 @@ def text_from_vosk_pipe(
rec_handle_fn_wrapper_from_final_result()

# Don't include any of the current analysis when resuming.
assert rec is not None
rec.Reset()

# Clear the buffer:
Expand Down Expand Up @@ -1135,6 +1147,7 @@ def text_from_vosk_pipe(
if verbose >= 1:
sys.stderr.write("Reload.\n")
process_fn("")
vosk_load_recognizer()

import signal

Expand Down