基于TensorFlow的唤醒词检测故障:‘Hey Jarvis’无法识别
唤醒词检测程序无法识别"Hey Jarvis"的排查与解决
无关警告说明
终端中出现的CUDA相关警告是因为未配置GPU,不影响程序在CPU上运行,可直接忽略。
核心排查与修复步骤
1. 对齐音频预处理与训练逻辑
- 你当前录制的是双声道音频(
channels=2),但librosa.load默认会将其转为单声道。如果训练模型时使用的是双声道音频,这里的预处理会导致特征不匹配,建议修改录制代码为单声道:myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1) - 确认采样率统一:录制用的是
44100Hz,检查训练集音频的采样率是否一致。若训练时用的是其他采样率(如16000Hz),加载音频时需指定对应采样率:audio, sample_rate = librosa.load(filename, sr=16000) # sr设为训练时的采样率 - 核对MFCC特征处理逻辑:确保
n_mfcc=40以及np.mean(mfcc.T, axis=0)的特征聚合方式,和模型训练时的代码完全一致。如果训练时用的是MFCC序列而非均值,当前特征维度不匹配,模型无法正确识别。
2. 验证录制音频的有效性
- 手动播放生成的
prediction.wav,确认音频清晰、包含完整的"Hey Jarvis"发音,无录制失败或杂音问题。 - 可视化录制音频的MFCC特征,和训练集中正样本的MFCC对比,查看特征分布是否一致:
import matplotlib.pyplot as plt mfcc = librosa.feature.mfcc(y=audio, sr=sample_rate, n_mfcc=40) plt.figure(figsize=(10, 4)) librosa.display.specshow(mfcc, x_axis='time') plt.colorbar() plt.title('MFCC') plt.tight_layout() plt.show()
3. 排查模型训练问题
- 模型对负样本的置信度始终为
1.0,大概率是训练集数据不平衡(负样本远多于正样本)或正样本质量差(发音不标准、录音模糊),导致模型偏向预测负样本。 - 确认训练时的标签映射:正样本("Hey Jarvis")是否标注为
1,负样本标注为0。如果标签搞反,当前的判断逻辑会完全错误。 - 用训练集中的正样本输入当前预测代码,若仍无法检测,说明模型训练存在问题,需重新训练,优化数据集或模型结构。
4. 临时调整检测阈值(仅作测试)
当前阈值设为0.10,若模型正样本输出置信度普遍偏低,可临时降低阈值测试,但这无法解决根本问题:
if prediction[:, 1] > 0.05: # 降低阈值 print(f"Wake Word Detected for ({i})") print("Confidence:", prediction[:, 1]) i += 1
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

