如何构建训练TensorFlow模型识别唤醒词'red on'/'red off'以控制LED
TensorFlow双唤醒词识别+LED控制实现方案
1. 数据集准备
- 你需要准备三类16kHz单声道音频样本,单条时长控制在1~1.5s即可:
red on、red off、无关语音/背景噪音,每类样本量至少500条,最好覆盖不同口音、不同录制距离、不同环境噪音的场景,自己录制或者从公开语音数据集裁剪都可以。 - 做数据增强降低过拟合风险:对现有样本随机加高斯白噪、±10%时间拉伸、±半音音调调整,能直接把样本量翻3~5倍。
- 统一提取MFCC特征作为模型输入:用TensorFlow内置的
tf.audio.compute_mfccs接口就可以,每条样本提取13维MFCC特征,不需要额外处理复杂特征。
2. 模型构建与训练
就用轻量型CNN就行,完全能满足两个唤醒词的识别需求,不需要上大模型,训练快还容易部署到嵌入式设备。
import tensorflow as tf from tensorflow.keras import layers, models # 输入shape根据你MFCC提取的时间步长调整,这里是44个时间步、13维特征 model = models.Sequential([ layers.Input(shape=(44, 13)), layers.Reshape((44, 13, 1)), layers.Conv2D(32, (3, 3), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dropout(0.3), # 3分类输出:red on、red off、其他无效指令 layers.Dense(3, activation='softmax') ]) model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'] )
- 把数据集按8:1:1拆分训练集、验证集、测试集,训练20~30轮就行,加个早停回调,验证集准确率连续3轮不涨就停止训练,避免过拟合。
- 训练完成后把模型转成TensorFlow Lite格式,压缩后体积很小,适合嵌入式部署。如果识别准确率不够,优先加对应类别的样本,其次调整推理置信度阈值,比如只有识别置信度高于0.8才判定为有效指令,能大幅降低误触发概率。
3. 对接LED控制逻辑
根据你用的硬件选择部署方案即可,常用的两种方案:
- 树莓派部署:接USB麦克风,跑TensorFlow Lite实时采集音频推理,识别到
red on就调用GPIO口输出高电平点亮红色LED,识别到red off就输出低电平熄灭。可以加连续两次识别一致才执行的逻辑,进一步降低误触。 - ESP32嵌入式部署:把TFLite微解释器和模型一起烧录到ESP32里,外接MEMS麦克风和LED,推理逻辑和上面一致,功耗比树莓派低很多,适合长期运行。
内容的提问来源于stack exchange,提问作者Elsa B.
相关产品推荐
相关产品推荐

