系列文章目录
Datawhale的2021的四月学习——食物音频分析 bassline
文章目录
本文仅为代码分析,代码源码为:里奥呐多艾斯的Task2 食物声音识别-赛题数据介绍与分析
1.特征分析
1.1库函数加载
1.1.1分析
本次使用的音频处理库函数为librosa,使用的IPython.display.Audio 模块能使得音频直接在jupyter笔记本中播放。
库函数 | 作用 |
---|---|
pd.plotting.register_matplotlib_converters() | 是否在matplotlib的单位注册表中为dates, times, datetimes, and Periods注册转换器,“False”将删除转换器,默认值是“auto”; |
%matplotlib inline | 用在Jupyter notebook中具体作用是当调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,可以直接在你的python console里面生成图像。 |
from sklearn.model_selection import train_test_split | 数据集划分 |
from sklearn.metrics import classification_report | 分类报告 |
from sklearn.model_selection import GridSearchCV | 使用自定义验证集进行模型调参 |
from sklearn.preprocessing import MinMaxScaler | 把数据集的不同特征缩放到固定范围 |
1.1.2代码:
#基本库
import pandas as pd
import numpy as np
pd.plotting.register_matplotlib_converters()
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
# 加载音频处理库
import os
import matplotlib.pyplot as plt
import librosa
import librosa.display
import glob
import IPython.display as ipd
1.2查看音频数据
1.2.1分析
统计文件夹的个数(或者说是总文件夹下一级列表中元素的个数)和文件夹中数据的个数,并计算百分比数据进行可视化处理
1.2.2代码
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.3 查看音频特征
1.3.1分析
代码 | 作用 |
---|---|
display,Audio | 播放声音 |
librosa.load | load函数就是用来读取音频的。当然,读取之后,转化为了numpy的格式储存,而不再是音频的格式了 |
librosa.display.waveplot | 音频的可视化处理 |
librosa.amplitude_to_db | 将振幅谱图转换为db _scale谱图 |
1.3.2代码
# 播放芦荟的声音
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')
# 芦荟的波形幅度包络
plt.figure(figsize=(14, 5))
librosa.display.waveplot(data1,sr=sampling_rate1)
# 汉堡的波形幅度包络图
plt.figure(figsize=(14, 5))
librosa.display.waveplot(data2,sr=sampling_rate2)
# 芦荟的声谱图
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')
# 汉堡的声图谱
plt.figure(figsize=(20, 10))
D = librosa.amplitude_to_db(np.abs(librosa.stft(data2)), 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 burger')
2.一些相关文章(参考文献)
Python音频信号处理库函数librosa介绍
论文笔记:语音情感识别(四)语音特征之声谱图,log梅尔谱,MFCC,deltas
声音特性介绍——声谱图、音色、音调
声谱图,梅尔语谱,倒谱,梅尔倒谱系数