【正点原子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. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 20:18:05       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 20:18:05       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 20:18:05       4 阅读
  4. Python语言-面向对象

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

热门阅读

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

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

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

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

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

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

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

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

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