零基础入门语音识别-食物声音识别[Task 2]

Task2 食物声音识别之赛题数据介绍与分析

Task1 食物声音识别之Baseline学习

1 赛题数据探索

声音识别,那么声音有什么特点呢?声音是以波的形式传播,声波的特性由频率,振幅和相位决定其音高,音量和音色。丰富的声波在自然中的叠加创造了人耳可以听见以及听不见的声音,给生活带来了乐趣抑或烦恼。

赛题是分类不同食物的咀嚼声音并做标签,可以推而广之作为音乐分类,音乐推荐以及声音识别等多种用途。

2 音频相关知识点学习

为了了解我们要处理的音频数据,我们需要用到python的一些音频库对音频进行采样以及回放。在这个赛题中主要应用的是python中的librosa这个音频处理库,当然除了librosa还有其他PyAudio,PortAudio以及Pydub等。介于这次的赛题中主要采用的是librosa这个音频库,下面都对这个库进行介绍。

2.1 加载音频库

librosa是一个Python模块,通常用于分析音频信号,但更倾向于音乐。它包括用于构建MIR(音乐信息检索)系统的nuts 和 bolts。示例和教程:https://librosa.github.io/librosa/

具体librosa中的核心函数以及基本操作可以参考:https://blog.csdn.net/zzc15806/article/details/79603994

库的安装语句

pip install librosa

or

conda install -c conda-forge librosa

并将相应的所需用到的库函数加载

import librosa
import librosa.display

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()

下一步就是随机选择一些音频文件来查看具体的音频特征,就是上面我们提到的声音的三个参数:频率,幅度和相位。在做具体的音频操作之前,先听一下具体的音频内容,在jupyter中采用的播放的函数是IPython.display.audio()传递的参数为需要播放的音频文件地址。

# 播放芦荟的声音
import IPython.display as ipd
ipd.Audio('./train_sample/aloe/24EJ22XBZ5.wav')

在这里插入图片描述

有了感官上的了解以后,使用librosa模块加载音频文件,librosa.load()加载的音频文件,默认采样率(sr)为22050HZ mono。我们可以通过librosa.load(path,sr=44100)来更改采样频率,返回的是音频数据(数据类型是ndarray)以及采样率。

data1, sampling_rate1 = librosa.load('./train_sample/aloe/24EJ22XBZ5.wav')

接下来从幅度,频谱两个维度来对所要识别的音频文件进行了解。

查看波形幅度包络图,首先设置图的大小,采用plt.figure(figsize=(14,5)),其中表示14和5分别表示figure 的大小为宽、长(单位为inch)。然后用librosa.display.waveplot()函数,参数为音频数据以及采样率,这里会有多声道的情况,左右声道会展示在轴上下

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

在这里插入图片描述

查看声谱图(spectrogram),声谱图是声音或其他信号的频率随时间变化时的频谱(spectrum)的一种直观表示。声谱图有时也称sonographs,voiceprints,或者voicegrams。当数据以三维图形表示时,可称其为瀑布图(waterfalls)。在二维数组中,第一个轴是频率,第二个轴是时间。我们使用librosa.display.specshow()函数来显示声谱图。展示出来的是不同的时间点上相应频率的幅度(这里是转化成对数表示dB)。那么越亮就代表相应的频率越响,在此刻的音频组成中体现的越响。

音频数据->通过STFT变换得到幅度,相位->通过对数变换将幅度转换成dB,并绘制出音频数据在每个时间点上各频率的幅度的大小,可以理解称为这个时间点上音频的频率+响度组成。

# 芦荟的声谱图
plt.figure(figsize=(20, 10))
# 将音频数据通过短时傅里叶变换并做的幅度转化成dB
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
    评论
天池赛事的零基础入门语义分割-地表建筑物识别任务是一个面向初学者的语义分割竞赛。任务的目标是利用机器学习和计算机视觉技术,对卫星图像中的地表建筑物进行标记和识别。 在这个任务中,参赛者需要使用给定的训练数据集进行模型的训练和优化。训练数据集包含了一系列卫星图像和相应的像素级标注,标注了地表建筑物的位置。参赛者需要通过分析训练数据集中的图像和标注信息,来构建一个能够准确地识别出地表建筑物的模型。 参赛者需要注意的是,语义分割是指将图像中的每个像素进行分类,使得同一类别的像素具有相同的标签。因此,在地表建筑物识别任务中,参赛者需要将地表建筑物区域与其他区域进行区分,并正确地进行标记。这对于初学者来说可能是一个挑战,因此需要掌握基本的图像处理和机器学习知识。 参赛者可以根据自己的理解,选择合适的算法和模型来完成这个任务。常见的方法包括卷积神经网络(CNN),通过设计适当的网络结构和训练方式,提高模型的准确性和泛化能力。同时,数据预处理和数据增强技术也是提高模型性能的关键。参赛者可以通过对数据进行增强和扩充,提高模型的鲁棒性和识别能力。 最后,参赛者需要使用训练好的模型对测试数据集进行预测,并生成预测结果。这些预测结果将用于评估参赛者模型的性能和准确度。评估指标通常包括像素级准确度(Pixel Accuracy)和平均交并比(Mean Intersection over Union),参赛者需要根据这些指标来评估和改进自己的模型。 总之,通过参加这个任务,初学者可以通过实践和挑战来提高自己的图像处理和机器学习技能,并掌握语义分割的基本概念和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值