【正点原子i.MX93开发板试用连载体验】简单的音频分类

本文最早发表于电子发烧友论坛:

今天测试的内容是进行简单的音频分类。我们要想进行语音控制,就需要构建和训练一个基本的自动语音识别 (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库,执行如下命令:

 
pip3 install scipy

我在i.MX 93开发板上运行了测试Python程序,它可以正确识别YES和NO。其中yes.wav是我自己录制的。

 



测试代码和wav文件参见*附件:simple_audio.zip

 

现在所用的模型是浮点的,只能用于CPU推理而不能使用NPU推理。如果希望使用NPU推理,需要将模型进行转换,并修改程序进行量化处理。

 

最近更新

  1. 学习opencv

    2024-07-10 20:18:05       0 阅读
  2. DP学习——中介者模式

    2024-07-10 20:18:05       0 阅读
  3. 交换机(Switches)和桥(Bridges)的区别

    2024-07-10 20:18:05       0 阅读
  4. 测试面试宝典(二十一)—— get和post的区别

    2024-07-10 20:18:05       0 阅读
  5. ESP8266AT指令查看有哪些指令可用(3)

    2024-07-10 20:18:05       0 阅读

热门阅读

  1. 适合selenium的防自动化检测的方法

    2024-07-10 20:18:05       8 阅读
  2. 使用Spring Boot和HBase实现大数据存储

    2024-07-10 20:18:05       7 阅读
  3. 华为机考真题 -- 篮球游戏

    2024-07-10 20:18:05       9 阅读
  4. Docker 入门篇(十 一)-- 网络配置总结

    2024-07-10 20:18:05       11 阅读
  5. 设计模式——原型模式

    2024-07-10 20:18:05       11 阅读
  6. grblHAL的代码学习笔记和解读

    2024-07-10 20:18:05       10 阅读
  7. Spring Boot中的多租户架构实现

    2024-07-10 20:18:05       10 阅读
  8. 单链表的学习与基础运用p

    2024-07-10 20:18:05       13 阅读