[唤醒灵敏度与端点恢复]:完成唤醒提示顺序和Hybrid VAD优化,包含阈值默认值、缓冲时序和测试覆盖

This commit is contained in:
mkbk
2026-06-17 21:00:28 +08:00
parent 44f708a3dc
commit 95e4996434
13 changed files with 145 additions and 29 deletions
+25 -1
View File
@@ -7,7 +7,7 @@ import unittest
from owner_voice_pet.models import AudioFrame, AudioSegment, ErrorCode, ProviderError
from owner_voice_pet.config import AppConfig
from owner_voice_pet.stt import CloudAsrSttProvider, MetadataSttProvider, SherpaOnnxSttProvider, is_valid_transcript_text
from owner_voice_pet.vad import EnergyVadProvider, VadRecorder
from owner_voice_pet.vad import EnergyVadProvider, HybridVadProvider, VadRecorder
from owner_voice_pet.wakeword import (
KeywordWakeWordProvider,
MissingWakeWordModelProvider,
@@ -87,6 +87,30 @@ class WakeVadSttTests(unittest.TestCase):
self.assertIsInstance(result, ProviderError)
self.assertEqual(result.code, ErrorCode.VAD_TIMEOUT_NO_SPEECH)
def test_hybrid_vad_accepts_energy_fallback_speech(self) -> None:
class SilentVadProvider:
def __init__(self) -> None:
self.loaded = False
def load(self) -> None:
self.loaded = True
def analyze(self, frame: AudioFrame):
return type(
"Result",
(),
{"is_speech": False, "confidence": 0.1, "speech_ms": 0, "silence_ms": 20},
)()
def reset(self) -> None:
return None
provider = HybridVadProvider(SilentVadProvider(), EnergyVadProvider())
provider.load()
result = provider.analyze(make_frame(1, 0, speech=True))
self.assertTrue(result.is_speech)
self.assertEqual(result.speech_ms, 20)
def test_metadata_stt_transcribes_fixture_text(self) -> None:
provider = MetadataSttProvider()
provider.load()