| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """
- 语音唤醒配置类
- """
- from pathlib import Path
- from typing import Optional
- class WakeWordConfig:
- """语音唤醒配置"""
- def __init__(
- self,
- model_path: str = "models",
- sample_rate: int = 16000,
- num_threads: int = 4,
- provider: str = "cpu",
- max_active_paths: int = 2,
- keywords_score: float = 1.8,
- keywords_threshold: float = 0.2,
- num_trailing_blanks: int = 1,
- detection_cooldown: float = 1.5,
- ):
- """
- 初始化语音唤醒配置
- Args:
- model_path: 模型文件目录路径
- sample_rate: 音频采样率
- num_threads: 线程数
- provider: 计算提供者 (cpu/cuda)
- max_active_paths: 最大激活路径数
- keywords_score: 关键词分数
- keywords_threshold: 关键词阈值
- num_trailing_blanks: 尾部空白数
- detection_cooldown: 检测冷却时间(秒)
- """
- self.model_path = Path(model_path)
- self.sample_rate = sample_rate
- self.num_threads = num_threads
- self.provider = provider
- self.max_active_paths = max_active_paths
- self.keywords_score = keywords_score
- self.keywords_threshold = keywords_threshold
- self.num_trailing_blanks = num_trailing_blanks
- self.detection_cooldown = detection_cooldown
- def validate(self) -> bool:
- """验证配置参数"""
- if not self.model_path.exists():
- raise FileNotFoundError(f"模型目录不存在: {self.model_path}")
- required_files = [
- "encoder.onnx",
- "decoder.onnx",
- "joiner.onnx",
- "tokens.txt",
- "keywords.txt",
- ]
- for file_name in required_files:
- if not (self.model_path / file_name).exists():
- raise FileNotFoundError(f"模型文件不存在: {self.model_path / file_name}")
- if not 0.1 <= self.keywords_threshold <= 1.0:
- raise ValueError(f"关键词阈值 {self.keywords_threshold} 超出范围 [0.1, 1.0]")
- if not 0.1 <= self.keywords_score <= 10.0:
- raise ValueError(f"关键词分数 {self.keywords_score} 超出范围 [0.1, 10.0]")
- return True
|