今天测试的内容是进行简单的音频分类。我们要想进行语音控制,就需要构建和训练一个基本的自动语音识别 (ASR) 模型来识别不同的单词。如果想了解这方面的知识可以参考TensorFlow的官方文档:简单的音频识别:识别关键词 | TensorFlow Core。 预训练模型来自Simple Audio Recognition on a Raspberry Pi using Machine Learning (I2S, TensorFlow Lite) - Electronut Labs,我在它提供的代码基础上进行了修改。NXP官方的Model Zoo也提供了类似的代码,不过它需要TensorFlow类,而开发板上默认提供Tflite runtime推理框架,所以我没有使用NXP的方案。 本模型使用 Speech Commands 数据集的一部分,其中包含命令的短(一秒或更短)音频片段,例如“down”、“go”、“left”、“no”、“right”、“stop”、“up”和“yes”。 数据集中的波形在时域中表示,通过计算短时傅里叶变换 (STFT) 将波形从时域信号转换为时频域信号,以将波形转换为[频谱图](频谱图_百度百科 (baidu.com)),显示频率随时间的变化,并且可以表示为二维图像。然后把频谱图图像输入您的神经网络以训练模型。 在前面提到网页中有模型训练的方法。这里采用的是已经训练好的模型。在模型推理部分,首先从wav文件中读取语音数据,如果是双声道的,只使用其中的一个声道。默认音频的采样率是16k,只提取音频中的1s数据进行测试。数据提取后,需要归一化,然后利用STFT转换为频谱图,再输入神经网络进行计算。 程序中使用了scipy库进行STFT处理,所以需要先安装scipy库,执行如下命令: 我在i.MX 93开发板上运行了测试Python程序,它可以正确识别YES和NO。其中yes.wav是我自己录制的。
现在所用的模型是浮点的,只能用于CPU推理而不能使用NPU推理。如果希望使用NPU推理,需要将模型进行转换,并修改程序进行量化处理。 |