【学习笔记】Task2 食物声音识别-赛题数据介绍与分析

参考资料

Datawhale Github官方代码
Python处理音频信号实战 : 手把手教你实现音乐流派分类和特征提取

代码理解

加载库

# 加载音频处理库
import os
import matplotlib.pyplot as plt
import librosa
import librosa.display
import glob
import IPython.display as ipd

1)Librosa:它通常用于分析音频信号,但更倾向于音乐,它包括用于构建MIR(音乐信息检索)系统的nuts 和 bolts。(示例和教程)
2)IPython.display.Audio: 该模块能使得音频直接在jupyter笔记本中播放。
3)glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件。

查看音频数据

获取整个测试集中的基本信息

voice_path = './train_sample'

def look_data():
    # 音频类别文件夹个数
    print(f'音频文件夹的个数: {len(os.listdir(voice_path))}')

    voice_total = 0
    single_label = {}
    for ind, label_name in enumerate(os.listdir(voice_path)):
        file_path = voice_path + '/' + label_name
        single_num = len(os.listdir(file_path))
        single_label[label_name] = single_num
        voice_total += single_num

    print(f'音频文件总量: {voice_total}')
    print(f'{"序号":<5}{"类别":<15}{"数量":<10}{"占比"}')
    for ind, (key, value) in enumerate(single_label.items()):
        print(f'{ind:<5}{key:<20}{value:<10}{value / voice_total:.2%}')

look_data()

1)Python3.6新增了一种f-字符串格式化,格式化的字符串文字前缀为’f’和接受的格式字符串相似str.format()。它们包含由花括号包围的替换区域。

num = input("Enter a number:")
print('您输入的数字是:',num)
print(f'您输入的数字是:{num}')

运行结果:
运行结果
2)enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。(用法)
3)os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。(用法)

查看音频特征

导入音频资料

# 播放芦荟的声音
ipd.Audio('./train_sample/aloe/24EJ22XBZ5.wav')
# 播放汉堡的声音
ipd.Audio('./train_sample/burger/0WF1KDZVPZ.wav')
data1, sampling_rate1 = librosa.load('./train_sample/aloe/24EJ22XBZ5.wav')
data2, sampling_rate2 = librosa.load('./train_sample/burger/0WF1KDZVPZ.wav')

1)import IPython.display as ipd
2)使用librosa模块加载音频文件,librosa.load()加载的音频文件,默认采样率(sr)为22050HZ mono。我们可以通过librosa.load(path,sr=44100)来更改采样频率。

使用波形幅度包络图以及声谱图查看特征
声谱图(spectrogram)是声音或其他信号的频率随时间变化时的频谱(spectrum)的一种直观表示。声谱图有时也称sonographs,voiceprints,或者voicegrams。当数据以三维图形表示时,可称其为瀑布图(waterfalls)。在二维数组中,第一个轴是频率,第二个轴是时间。我们使用librosa.display.specshow来显示声谱图。

# 芦荟的波形幅度包络图
plt.figure(figsize=(14, 5))
librosa.display.waveplot(data1,sr=sampling_rate1)

# 芦荟的声谱图
plt.figure(figsize=(20, 10))
D = librosa.amplitude_to_db(np.abs(librosa.stft(data1)), ref=np.max)
plt.subplot(4, 2, 1)
librosa.display.specshow(D, y_axis='linear')
plt.colorbar(format='%+2.0f dB')
plt.title('Linear-frequency power spectrogram of aloe')

波形幅度包络图
声谱图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值