树莓派Pico与TensorFlow实现音乐流派识别
立即解锁
发布时间: 2025-08-31 00:22:41 阅读量: 7 订阅数: 15 AIGC 

### 树莓派Pico与TensorFlow实现音乐流派识别
#### 1. 树莓派Pico音频录制验证
当你使用树莓派Pico进行音频录制时,4秒后,你会在串口终端看到一系列整数。这些整数代表通过ADC外设以数字格式采集的音频样本。在麦克风前说话,显示的数字会发生变化,这表明树莓派Pico能够有效捕获音频片段。
如果你使用的是SparkFun Artemis Nano,可以参考Arduino IDE中的预构建示例(Example1_MicrophoneOutput),它展示了如何使用内置的PDM麦克风。
#### 2. 从串口传输的样本生成音频文件
- **所需库**:
- pySerial:用于读取串口传输的数据。
- soundfile(https://pysoundfile.readthedocs.io/):用于读取或写入音频文件,可通过以下命令安装:
```bash
$ pip install soundfile
```
- **操作步骤**:
1. 在计算机上创建一个名为`parse_audio_samples.py`的Python脚本。
2. 导入必要的Python库:
```python
import serial
import soundfile as sf
import numpy as np
```
3. 初始化pySerial:
```python
ser = serial.Serial()
ser.port = '/dev/ttyACM0'
ser.baudrate = 115200
ser.open()
ser.reset_input_buffer()
```
4. 定义一个无限循环,读取样本率、音频长度和串口传输的样本:
```python
def serial_readline(obj):
data = obj.readline()
return data.decode("utf-8")
while True:
ad_sr_str = serial_readline(ser)
ad_len_str = serial_readline(ser)
ad_sr = int(ad_sr_str)
ad_len = int(ad_len_str)
ad_buf = np.empty((ad_len), dtype=np.int16)
for i in range(0, ad_len):
sample_str = serial_readline(ser)
ad_buf[i] = int(sample_str)
```
5. 创建一个名为`test.wav`的音频文件:
```python
sf.write("test.wav", ad_buf, ad_sr, subtype='PCM_16')
```
- **验证录制**:关闭Arduino串口监视器,确保树莓派Pico连接到计算机,运行Python脚本:
```bash
$ python parse_audio_samples.py
```
按下按钮并在麦克风前说话,树莓派Pico的内置LED会亮起4秒表示正在录制。录制完成后,Python脚本会解析串口传输的数据并创建`test.wav`文件。使用媒体播放器播放该文件,检查音频是否录制正确。
#### 3. 构建音乐流派分类数据集
- **数据集来源**:
- GTZAN数据集:包含十种音乐流派(蓝调、古典、乡村、迪斯科、嘻哈、爵士、金属、流行、雷鬼和摇滚),每个流派有100个30秒的音频片段,音频格式为.wav,采样率22050 Hz,单声道,16位整数样本。对于本项目,只需要识别迪斯科、爵士和金属音乐流派,可将相关文件夹上传到Google Drive。
- 树莓派Pico录制的音频:为确保数据集包含与生产环境中使用的相同麦克风捕获的音频样本,建议为每个音乐流派选择至少5首歌曲,并从每首歌曲中录制10个4秒长的片段。可以使用Pixabay(https://pixabay.com/)上的免版税歌曲。
- **选择合适的模型输入长度**:由于微控制器内存有限,考虑到树莓派Pico的SRAM为264 KB,选择分析1秒的音频数据,这样可以将内存需求降低到44.1 KB(采样频率为22050 Hz,16位整数样本)。
- **操作步骤**:
1. 从Kaggle(https://www.kaggle.com/datasets/andradaolteanu/gtzan-dataset-music-genre-classification)下载GTZAN数据集并解压。
2. 在Google Drive中创建一个名为`mgr_dataset`的文件夹,将`genres_original`目录中的迪斯科、爵士和金属文件夹拖到该文件夹中。记录这三个目录的Google Drive文件ID。
3. 复制`parse_audio_samples.py`脚本到一个新文件`build_dataset.py`,并删除创建`test.wav`音频文件的行。
4. 调整Python脚本以将树莓派Pico录制的音频片段上传到Google Drive:
- 导入UUID模块并声明变量:
```python
import u
```
0
0
复制全文
相关推荐









