语音情感识别python项目

news2024/12/22 23:54:37

注意:本文引用自专业人工智能社区Venus AI

更多AI知识请参考原站 ([www.aideeplearning.cn])

什么是语音情感识别?

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

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

什么是librosa?

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

语音情感识别——目标

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

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

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

数据集

对于这个 Python 迷你项目,我们将使用 RAVDESS 数据集;这是瑞尔森情感言语和歌曲视听数据库数据集,可免费下载。该数据集包含 7356 个文件,由 247 个人对情感有效性、强度和真实性进行了 10 次评级。整个数据集有 24.8GB,来自 24 个参与者,但我们降低了所有文件的采样率,您可以在此处下载。

先决条件

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

pip install librosa soundfile numpy scikit-learn pyaudio

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

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

1. 进行必要的导入:

import librosa
import soundfile
import os, glob, pickle
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score

2. 定义函数 extract_feature 从声音文件中提取 mfcc、chroma 和 mel 特征。该函数有 4 个参数 – 文件名和三个布尔参数(用于三个功能):

  • mfcc:梅尔频率倒谱系数,表示声音的短期功率谱
  • 色度:涉及 12 个不同的音级
  • mel:梅尔频谱图频率

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

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

# Extract features (mfcc, chroma, mel) from a sound file
def extract_feature(file_name, mfcc, chroma, mel):
    with soundfile.SoundFile(file_name) as sound_file:
        X = sound_file.read(dtype="float32")
        sample_rate=sound_file.samplerate
        if chroma:
            stft=np.abs(librosa.stft(X))
        result=np.array([])
        if mfcc:
            mfccs=np.mean(librosa.feature.mfcc(y=X, sr=sample_rate, n_mfcc=40).T, axis=0)
            result=np.hstack((result, mfccs))
        if chroma:
            chroma=np.mean(librosa.feature.chroma_stft(S=stft, sr=sample_rate).T,axis=0)
            result=np.hstack((result, chroma))
        if mel:
                    mel = np.mean(librosa.feature.melspectrogram(y=X, sr=sample_rate).T, axis=0)
                    result=np.hstack((result, mel))
        return result

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

# Emotions in the RAVDESS dataset
emotions={
  '01':'neutral',
  '02':'calm',
  '03':'happy',
  '04':'sad',
  '05':'angry',
  '06':'fearful',
  '07':'disgust',
  '08':'surprised'
}

#DataFlair - Emotions to observe
observed_emotions=['calm', 'happy', 'fearful', 'disgust']

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

图片[1]-语音情感识别python项目-VenusAI

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

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

# Split the dataset
x_train,x_test,y_train,y_test=load_data(test_size=0.25)

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

# Initialize the Multi Layer Perceptron Classifier
model=MLPClassifier(alpha=0.01, batch_size=256, epsilon=1e-08, hidden_layer_sizes=(300,), learning_rate='adaptive', max_iter=500)

7. 拟合/训练模型。


# Train the model

model.fit(x_train,y_train)

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


# Predict for the test set

y_pred=model.predict(x_test)

9. 为了计算模型的准确性,我们将调用从sklearn导入的 precision_score() 函数。最后,我们将精度四舍五入到小数点后两位并打印出来。


# Calculate the accuracy of our model

accuracy=accuracy_score(y_true=y_test, y_pred=y_pred)

# Print the accuracy

print("Accuracy: {:.2f}%".format(accuracy*100))

概括

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

图片[2]-语音情感识别python项目-VenusAI

项目全部资料 

详情请见网站语音情感识别python项目-VenusAI (aideeplearning.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1511106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker + nginx打包前端镜像

项目场景&#xff1a; 前端使用angular开发&#xff0c;Dockerfile如下&#xff1a; FROM nginx:1.16.1 AS base WORKDIR /app COPY nginx.conf.template /etc/nginx/ CMD ["/bin/bash", "-c", "envsubst ${APP_VERSION} < /app/index.html > …

Python环境安装及Selenium引入

Python环境安装 环境下载 Download Python | Python.org 环境安装 需使用管理员身份运行 查看环境是否安装成功 python --version 如果未成功则检查环境变量配置 安装 Selenium 库 pip install selenium Selenium 可以模拟用户在浏览器中的操作&#xff0c;如点击按钮、填写…

Vue3全家桶 - VueRouter - 【2】重定向路由

重定向路由 在路由规则数组中&#xff0c;可采用 redirect 来重定向到另一个地址&#xff1a; 通常是将 / 重定向到 某个页面&#xff1b; 示例展示&#xff1a; router/index.js&#xff1a;import { createRouter, createWebHashHistory, createWebHistory } from vue-route…

51单片机基础篇系列-中断系统处理过程中断编程

&#x1f308;个人主页:会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 80C51单片机中断处理过程 中断相应过程&#xff1a; 中断源有中断请求 此中断源的中断允许位为1 CPU开中断&#xff08;即EA-1&#xff09;.以上三条同时满足&#xff0c;CPU才有…

okcc呼叫中心外呼任务为何启动后会自动暂停?

OKCC呼叫中心系统是一套完整的呼叫中心与管理平台,为电话营销型企业专门设计的电销平台与客服平台。OKCC系统集电话营销功能与热线客服功能于一体,兼具呼入呼出功能。本呼叫中心支持独立的计费系统、话务系统、客户系统、工单管理系统,是一套完善的高效的呼叫中心系统 那我们在…

基于EasyCVR视频技术的流媒体视频融合与汇聚管理系统建设方案

流媒体视频融合与汇聚管理系统可以实现对各类模块化服务进行统一管理和配置等操作&#xff0c;可实现对应用服务的整合、管理及共享&#xff0c;以标准接口的方式&#xff0c;业务平台及其他第三方业务平台可以方便地调用各类数据&#xff0c;具有开放性和可扩展性。在流媒体视…

如何不依赖Unity直接解压unitypackage的内容

使用场景 我们都知道unity的资源导出是导出成.unitypackage文件,如果要里面的内容,得打开Unity,将unitypackage导入进去才能看到里面的内容。 但是很多时候我们下了几十个unitypackage资源包,又不清楚好不好用,而且导入之后编译特别慢,unity又不提供批量解压的功能,所…

Leangoo领歌免费敏捷工具项目“版本发布”功能上线

Leangoo领歌是款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新。…

String 底层为什么使用 final 修饰?

1、典型回答 对于这个问题&#xff0c;Java之父詹姆斯 高斯林&#xff08;James Gosling&#xff09; 是这样回答的&#xff1a; I would use an immutable whenever I can 翻译为中文&#xff1a;只要允许&#xff0c;我就会使用不可变对象 而作为普通人的我们来说&#xff0…

【历年论文真题考点汇总】与【历年论文原题2009~2023年文字版记录】(2024年软考高级系统架构设计师冲刺知识点总结-论文篇-先导篇)

历年真题论文题考点汇总 历年软考系统架构设计师论文原题(2009-2022年) 因最新的2023年目前仅能搜索到回忆版,等楼主搜集到真题会更新最新版到本文中。 注意系统架构设计师一年只下半年开考,项目管理师一年两次开考。 2022年下半年-论文原题 试题1:论基于构件的软件开发…

智海Mo 平台与 Datawhale 携手浙江大学,共襄 AI+X 高校行!

2024年3月9日&#xff0c;一场以"AIX 高校行"为主题的活动在浙江大学成功举办。本次活动由 Datawhale 与杭州市人工智能学会主办&#xff0c;浙江大学人工智能研究所、浙江大学控制科学与工程学院联合主办&#xff0c;浙江大学学生人工智能协会承办&#xff0c;趋动云…

基础小白快速入门web前端开发技术------->hbuilder的下载安装以及简易的网页最开始制作

工欲善其事&#xff0c;必先利其器&#xff0c; 在我们学习开发网页设计&#xff0c;我们首先需要一个良好的开发工具 这里我比较推荐hbuilder这个 只需要进入官网傻瓜下载&#xff0c;傻瓜安装 https://dcloud.io/ 点击hbuilder选择版本进行下载安装即可 hbuilder的新建文件…

【VUE合并同一列相另的行的数据合并为一行:span-method】亲测有用

【VUE合并同一列相另的行的数据合并为一行&#xff1a;span-method】亲测有用 第一步&#xff1a; 给table加对应的标签的属性 :data"list" :span-method"arraySpanMethod"第二步&#xff1a; 在methods中添加对应的处理的方法 arraySpanMethod({ row, …

MQTT+ONENET+STM32+LWIP驱动

前言 近段时间由于项目需求&#xff0c;需要将原来的项目增加应用层的MQTT协议&#xff0c;由于不懂MQTT所以从B站学习了正点原子的lwip课程&#xff0c;看完后需要进行实践&#xff0c;所以选择了ONENET平台来作为学习的时间的平台。 1、学习准备 先下载工具&#xff1a; …

鸿蒙原生应用元服务开发-WebGL网页图形库开发接口说明

一、场景介绍 WebGL主要帮助开发者在前端开发中完成图形图像的相关处理&#xff0c;比如绘制彩色图形等。目前该功能仅支持使用兼容JS的类Web开发范式开发。 二、接口说明 表1 WebGL主要接口列表 本文参考引用HarmonyOS官方开发文档&#xff0c;基于API9。

Vue-Router学习笔记

文章目录 一、Vue Router简介二、简单使用三、动态路由匹配3.1 响应路由参数的变化3.2 捕获所有路由或 404 Not found 路由 四、路由的匹配语法4.1 在参数中自定义正则4.2 可重复的参数4.3 Sensitive 与 strict 路由配置4.4 可选参数 五、嵌套路由嵌套的命名路由 六、编程式导航…

利用百度竞价排名推广增加转化率-华媒舍

在数字营销领域&#xff0c;提高网站转化率是一个重要的目标。百度竞价排名是一种有效的推广方式&#xff0c;通过提高网站在搜索结果中的排名&#xff0c;能够吸引更多的用户点击&#xff0c;并且增加转化率。本文将介绍如何利用百度竞价排名来推广&#xff0c;并且提供一些最…

外盘国际期货分仓系统VUE源码展示

国际期货市场已经成为投资者追求高收益的重要战场。然而&#xff0c;面对复杂多变的市场环境&#xff0c;如何高效、安全地进行期货交易&#xff0c;成为了投资者们共同面临的挑战。今天&#xff0c;我们荣幸地向您推荐一款引领期货交易新风尚的利器——外盘国际期货分仓系统VU…

Leetcode刷题【每日n题】(7)

题目一 思路分析 中序遍历&#xff1a;先遍历左子树&#xff0c;再输出根节点&#xff0c;再遍历右子树 1.若当前节点的左子节点不为空&#xff0c;则递归遍历2.输出当前节点&#xff08;根节点&#xff09;3.若当前节点的左子节点不为空&#xff0c;则递归遍历 代码解析 cl…

知识文档管理系统平台:企业管理的王炸

无论是企业内部的文件共享&#xff0c;还是团队之间的协作编辑&#xff0c;知识文档管理系统都能发挥巨大的作用。它帮助企业整理、存储和查找各种文档资料&#xff0c;这不仅能提高企业的工作效率&#xff0c;还能增强企业的竞争力。今天就跟着LookLook同学一起来深入了解知识…