使用Python 机器学习-4-Python Mini Project–使用 librosa 进行语音情感识别

一、前言

该文章仅作为个人学习使用

二、正文

项目源代码:Python 迷你项目 - 使用 librosa 进行语音情感识别 - DataFlair (data-flair.training)

数据集:

Python 迷你项目

语音情感识别,有史以来最好的python小项目。最好的例子可以在呼叫中心看到。如果您注意到,呼叫中心员工从不以相同的方式说话,他们与客户推销/交谈的方式会随着客户而变化。现在,这也发生在普通人身上,但这与呼叫中心有什么关系?这是你的答案,员工从言语中识别客户的情绪,这样他们就可以改善他们的服务并转化更多的人。通过这种方式,他们正在使用语音情感识别。那么,让我们详细讨论这个项目。

语音情感识别是一个简单的 Python 迷你项目,您将使用 DataFlair 进行练习。之前,我向您解释与此迷你 python 项目相关的术语,请确保您将 Python 项目的完整列表添加为书签。

什么是语音情感识别?

言语情绪识别,缩写为SER,是试图从言语中识别人类情绪和情感状态的行为。这利用了这样一个事实,即声音通常通过语气和音调反映潜在的情感。这也是狗和马等动物用来理解人类情感的现象。

SER 很难,因为情绪是主观的,注释音频具有挑战性。

什么是天秤座?

librosa 是一个用于分析音频和音乐的 Python 库。它具有更扁平的封装布局、标准化的接口和名称、向后兼容性、模块化功能和可读代码。此外,在这个 Python 迷你项目中,我们演示了如何使用 pip 安装它(以及其他一些包)。

什么是 JupyterLab?

JupyterLab 是 Project Jupyter 的开源、基于 Web 的 UI,它具有 Jupyter Notebook 的所有基本功能,如笔记本、终端、文本编辑器、文件浏览器、丰富的输出等。但是,它还提供了对第三方扩展的改进支持。

若要在 JupyterLab 中运行代码,首先需要使用命令提示符运行它:

C:\Users\DataFlair>jupyter 实验室

这将在浏览器中为您打开一个新会话。创建一个新的控制台,然后开始键入代码。JupyterLab 可以一次执行多行代码;按 Enter 键不会执行您的代码,您需要按 Shift+Enter 键才能执行相同的代码。

言语情感识别 – 目标

使用 librosa 和 sklearn 库以及 RAVDESS 数据集构建一个模型来识别语音中的情感。

语音情感识别 – 关于 Python 迷你项目

在这个 Python 迷你项目中,我们将使用 librosa、soundfile 和 sklearn 等库来构建使用 MLPClassifier 的模型。这将能够识别声音文件中的情感。我们将加载数据,从中提取特征,然后将数据集拆分为训练集和测试集。然后,我们将初始化 MLPClassifier 并训练模型。最后,我们将计算模型的准确性。

数据集

对于这个 Python 迷你项目,我们将使用 RAVDESS 数据集;这是 Ryerson Audio-Visual Database of Emotional Speech and Song 数据集,可免费下载。该数据集有 7356 个文件,由 247 个人对情感有效性、强度和真实性进行了 10 次评分。整个数据集是来自 24 个参与者的 24.8GB,但我们降低了所有文件的采样率,您可以在此处下载

先决条件

您需要使用 pip 安装以下库:

pip install librosa soundfile numpy sklearn pyaudio

如果您在使用 pip 安装 librosa 时遇到问题,可以尝试使用 conda。

语音情感识别 python 项目的步骤

1. 进行必要的进口:

导入 Librosa
导入声音文件
导入操作系统、glob、泡菜
导入 numpy 作为 np
来自 Sklearn。model_selection导入train_test_split
来自 Sklearn。neural_network导入 MLPClassifier
来自 Sklearn。指标导入accuracy_score

截图:

Python 项目 - 导入数据

2. 定义一个功能extract_feature,以从声音文件中提取 mfcc、chroma 和 mel 特征。此函数采用 4 个参数 - 文件名和三个功能的三个布尔参数:

  • MFCC的:Mel 频率倒谱系数,表示声音的短期功率谱
  • 色度:涉及 12 种不同的音高等级
  • 梅尔:梅尔频谱图频率

使用 soundfile 打开声音文件。SoundFile 使用 with-as,因此一旦我们完成,它就会自动关闭。从中读取并称之为 X。另外,获取采样率。如果色度为 True,则获取 X 的短时傅里叶变换。

设结果为空 numpy 数组。现在,对于这三个特征中的每个特征,如果存在,请从 librosa.feature 调用相应的函数(例如,mfcc 的 librosa.feature.mfcc),并获取平均值。从 numpy 调用函数 hstack() with result 和 feature 值,并将其存储在 result 中。hstack() 水平(以列式方式)按顺序堆叠数组。然后,返回结果。

#DataFlair - 从声音文件中提取特征(mfcc、chroma、mel)
定义 extract_featurefile_name, MFCC, 色度, MEL
使用声音文件。SoundFilefile_name sound_file:
X = sound_file。读取dtype=“float32”)
sample_rate=sound_file。采样率
如果色度:
stft=np。ABS天秤座。stftX))
结果=np。数组([])
如果 MFCC:
mfccs=np。意思是librosa.功能mfccy=X, sr=sample_rate, n_mfcc=40)。T,轴=0)
结果=np。hstack((结果,MFCCS))
如果色度:
色度=NP。意思是librosa.功能chroma_stftS=stft,sr=sample_rate)。T,轴=0)
结果=np。hstack((结果,色度))
如果梅尔:
mel=np。意思是librosa.功能melspectrogramX, sr=sample_rate中。T,轴=0)
结果=np。hstack((结果,mel))
返回结果

截图:

Python 语音情感识别投影

3. 现在,让我们定义一个字典来保存 RAVDESS 数据集中可用的数字和情绪,以及一个列表来保存我们想要的那些——平静、快乐、恐惧、厌恶。

#DataFlair - RAVDESS 数据集中的情绪
情绪={
'01''中性'
'02''平静'
'03''快乐'
'04''悲伤'
'05''生气'
'06''恐惧'
'07''厌恶'
'08''惊讶'
}
#DataFlair - 要观察的情绪
observed_emotions=['冷静''快乐', '恐惧''厌恶']

截图:

Python 项目

4. 现在,让我们使用函数 load_data() 加载数据——这将测试集的相对大小作为参数。x 和 y 是空列表;我们将使用 glob 模块中的 glob() 函数来获取数据集中声音文件的所有路径名。我们为此使用的模式是:“D:\\DataFlair\\ravdess data\\Actor_*\\*.wav”。这是因为我们的数据集如下所示:

广告

截图:

有趣的 Python 项目

因此,对于每个这样的路径,通过拆分名称“-”并提取第三个值来获取文件的基名和情感:

截图:

顶级 Python 项目

使用我们的情绪字典,这个数字被转化为一种情绪,我们的函数检查这种情绪是否在我们的observed_emotions列表中;如果没有,它将继续到下一个文件。它调用extract_feature并存储“feature”中返回的内容。然后,它将特征附加到 x,将情感附加到 y。因此,列表 x 包含特征,y 包含情感。我们用这些值、测试大小和随机状态值调用函数train_test_split,并返回该值。

#DataFlair - 加载每个声音文件的数据和提取要素
def load_datatest_size=0.2
x,y=[][]
对于 glob 中的文件glob“D:\\DataFlair\\ravdess data\\Actor_*\\*.wav”
file_name=操作系统。路径basename文件)
emotion=emotions[file_name.split“-”)[2]]
如果情绪不observed_emotions
继续
feature=extract_featurefile, mfcc=True, chroma=True, mel=True)
十。append特征)
y。appendemotion)
返回 train_test_splitnp.数组x, y, test_size=test_size, random_state=9)

截图:

Python 数据科学项目

5. 是时候将数据集拆分为训练集和测试集了!让我们将测试集保留 25% 的所有内容,并为此使用 load_data 函数。

#DataFlair - 拆分数据集
x_train,x_test,y_train,y_test=load_datatest_size=0.25)

截图:

拆分语音图像识别数据集

 

6. 观察训练和测试数据集的形状:

#DataFlair - 获取训练和测试数据集的形状
print((x_train.形状[0],x_test。形状[0]))

截图:

Get Shape - Python 项目

7. 并获取提取的特征数量。

#DataFlair - 获取提取的要素数
printf'提取的特征: {x_train.shape[1]}')

输出截图:

Python 项目

8.现在,让我们初始化一个MLP分类器。这是一个多层感知器分类器;它使用LBFGS或随机梯度下降来优化对数损失函数。与SVM或Naive Bayes不同,MLPClassifier具有用于分类的内部神经网络。这是一个前馈神经网络模型。

#DataFlair -初始化多层感知器分类器
型号=MLP分类器(alpha=0.01,批量大小=256,=1e-08,隐藏层大小=(300,),learning_rate=“适应性”,max_iter=500)

截图:

initialize MLP in python projects

9.拟合/训练模型。

#DataFlair -训练模型
模型配合(x列,y列)

输出截图:

train model simple python project

10.让我们预测测试集的值。这给了我们y_pred(测试集中特征的预测情绪)。

#DataFlair -预测测试集
y_pred=模型。预测(x检验)

截图:

predict- simple python project

11.为了计算模型的精度,我们最后,我们将精确度四舍五入到小数点后两位,并打印出来。

#DataFlair -计算模型的准确性
准确度=准确度分数(y_true=y_test,y_pred=y_pred)
#DataFlair -打印精度
打印(“精度:{:.2f}%”.格式(准确度 *100))

输出截图:

Python 数据科学项目

三、总结

在这个 Python 迷你项目中,我们学会了从语音中识别情绪。为此,我们使用了 MLPClassifier,并利用 soundfile 库来读取声音文件,并使用 librosa 库从中提取特征。如您所见,该模型的准确率为 72.4%。这对我们来说已经足够了。

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值