|
|
преди 5 дни | |
|---|---|---|
| .. | ||
| __pycache__ | преди 5 дни | |
| models | преди 5 дни | |
| AEC_GUIDE.md | преди 5 дни | |
| README.md | преди 5 дни | |
| USAGE.md | преди 5 дни | |
| __init__.py | преди 5 дни | |
| aec_processor.py | преди 5 дни | |
| audio_capture.py | преди 5 дни | |
| config.py | преди 5 дни | |
| detector.py | преди 5 дни | |
| example.py | преди 5 дни | |
| requirements.txt | преди 5 дни | |
| simple_test.py | преди 5 дни | |
| test.py | преди 5 дни | |
基于 sherpa-onnx 实现的独立语音唤醒模块,从 py-xiaozhi 项目中提取而来,支持AEC回音消除。
pip install -r requirements.txt
在使用前,需要准备 sherpa-onnx 模型文件。确保以下文件存在于 models/ 目录中:
encoder.onnx - 编码器模型decoder.onnx - 解码器模型joiner.onnx - 连接器模型tokens.txt - 词汇表文件keywords.txt - 唤醒词配置文件import asyncio
from wake_word_module import WakeWordDetector, AudioCapture, WakeWordConfig
async def main():
# 创建配置
config = WakeWordConfig(
model_path="models",
sample_rate=16000,
keywords_threshold=0.2,
)
# 创建音频采集器(不启用AEC)
audio_capture = AudioCapture(sample_rate=16000, channels=1, enable_aec=False)
# 创建检测器
detector = WakeWordDetector(config)
# 设置回调
def on_detected(result, full_text):
print(f"检测到唤醒词: {result}")
detector.on_detected(on_detected)
# 连接并启动
audio_capture.add_audio_listener(detector)
await audio_capture.start()
await detector.start()
# 保持运行
while True:
await asyncio.sleep(1)
asyncio.run(main())
import asyncio
from wake_word_module import WakeWordDetector, AudioCapture, WakeWordConfig
async def main():
# 创建配置
config = WakeWordConfig(
model_path="models",
sample_rate=16000,
)
# 创建音频采集器(启用AEC)
audio_capture = AudioCapture(
sample_rate=16000,
channels=1,
enable_aec=True, # 启用AEC回音消除
)
# 创建检测器
detector = WakeWordDetector(config)
# 设置回调
detector.on_detected(lambda r, t: print(f"检测到唤醒词: {r}"))
# 连接并启动
audio_capture.add_audio_listener(detector)
await audio_capture.start()
await detector.start()
# 保持运行
while True:
await asyncio.sleep(1)
asyncio.run(main())
注意: Windows和Linux平台会自动使用系统级AEC,无需额外配置。详见 AEC_GUIDE.md
# 使用AEC运行示例
python example.py
# 不使用AEC运行示例
python example.py --no-aec
语音唤醒配置类。
参数:
model_path (str): 模型文件目录路径sample_rate (int): 音频采样率,默认 16000num_threads (int): 线程数,默认 4provider (str): 计算提供者 (cpu/cuda),默认 "cpu"max_active_paths (int): 最大激活路径数,默认 2keywords_score (float): 关键词分数,默认 1.8keywords_threshold (float): 关键词阈值,默认 0.2num_trailing_blanks (int): 尾部空白数,默认 1detection_cooldown (float): 检测冷却时间(秒),默认 1.5音频采集器。
参数:
sample_rate (int): 采样率,默认 16000channels (int): 声道数,默认 1device_id (int): 设备ID,None表示自动选择enable_aec (bool): 是否启用AEC回音消除,默认 False方法:
start(): 启动音频采集stop(): 停止音频采集add_audio_listener(listener): 添加音频监听器remove_audio_listener(listener): 移除音频监听器list_devices(): 列出所有可用设备(静态方法)AEC支持:
唤醒词检测器。
方法:
start(): 启动检测器stop(): 停止检测器pause(): 暂停检测resume(): 恢复检测on_detected(callback): 设置检测回调on_error(callback): 设置错误回调on_audio_data(audio_data): 接收音频数据(AudioListener接口)keywords_threshold: 控制检测灵敏度
keywords_score: 控制检测分数
detection_cooldown: 防止重复触发的时间间隔
AudioCapture.list_devices() 查看可用设备num_threads 参数FileNotFoundError: 模型文件不存在: models/encoder.onnx
解决方法: 确保所有模型文件存在于指定目录中
RuntimeError: 找不到可用的输入设备
解决方法: 检查麦克风连接,使用 AudioCapture.list_devices() 查看设备
解决方法:
keywords_threshold 值本项目从 py-xiaozhi 项目提取,遵循原项目许可证。