Этап 4: слово активации через Vosk
- Фоновое прослушивание микрофона маленькой моделью Vosk, фразы настраиваются - Свободное распознавание + требование устойчивой гипотезы: грамматика давала массу ложных срабатываний - Пауза прослушивания, пока ассистент слушает команду, думает или говорит - Модель скачивается с зеркала HuggingFace, проверка слов по словарю модели - Переключатель в меню трея - Тесты поиска фразы и фонового слушателя Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
513d010c19
commit
a719980d74
@@ -0,0 +1,33 @@
|
||||
from agr_assistent.audio.wakeword import (
|
||||
WakeWordMatcher,
|
||||
contains_phrase,
|
||||
normalize_phrase,
|
||||
)
|
||||
|
||||
|
||||
def test_normalize_phrase() -> None:
|
||||
assert normalize_phrase(" Эй, Ассистент ") == ("эй", "ассистент")
|
||||
|
||||
|
||||
def test_contains_phrase_matches_whole_words_in_order() -> None:
|
||||
words = "слушай эй ассистент включи".split()
|
||||
|
||||
assert contains_phrase(words, ("эй", "ассистент"))
|
||||
assert not contains_phrase(words, ("ассистент", "эй"))
|
||||
assert not contains_phrase("ассистентка пришла".split(), ("ассистент",))
|
||||
|
||||
|
||||
def test_partial_hypothesis_must_hold_for_several_updates() -> None:
|
||||
matcher = WakeWordMatcher([("ассистент",)], required_streak=2)
|
||||
|
||||
assert not matcher.update_partial("ассистент")
|
||||
assert not matcher.update_partial("ассистентка") # гипотеза исправилась — счёт сброшен
|
||||
assert not matcher.update_partial("ассистентка ассистент")
|
||||
assert matcher.update_partial("ассистентка ассистент какая")
|
||||
|
||||
|
||||
def test_final_result_matches_immediately() -> None:
|
||||
matcher = WakeWordMatcher([("эй", "ассистент")], required_streak=3)
|
||||
|
||||
assert matcher.update_final("ну эй ассистент")
|
||||
assert not matcher.update_final("просто ассистент")
|
||||
Reference in New Issue
Block a user