📌  相关文章
📜  基于情感的音乐播放器Python项目

📅  最后修改于: 2022-05-13 01:55:13.656000             🧑  作者: Mango

基于情感的音乐播放器Python项目

在本文中,我们将使用Python、OpenCV、Android Studios 和 FisherFace 算法构建一个基于情感的音乐播放器。正如雷·查尔斯 (Ray Charles) 所引述的那样,音乐具有治愈个人的力量。音乐在识别一个人的情绪和精神状态方面起着非常重要的作用;它是人们表达自我的绝佳方式,也是音乐爱好者和听众的重要娱乐媒介。听音乐可以帮助我们放松和平静。音乐也被认为是最有效的媒介,因为它可以通过某种信息来引起深刻的感受。随着科技的进步,艺术家、他们的音乐、音乐听众的数量都在增加,随之而来的是根据他们的心情或选择手动浏览和选择音乐的问题。这就是我们的项目发挥作用的地方,因为我们都知道要面对人体的一个器官,该器官在提取人类行为及其心理状态方面起着至关重要的作用。我们的项目检测用户的心情并根据他的心情播放歌曲或播放列表。该项目使用网络摄像头捕捉用户的图像,然后面部表情分类高兴、悲伤、中性或愤怒,然后根据输入图像播放歌曲。这个项目的主要优点是用户不需要手动实现和选择歌曲。

工具和技术

我们需要在我们的系统中安装 Android 工作室。我们还遇到了 OpenCV、Jupiter notebooks 和卷积神经网络 (CNN) 来检测用户情绪。我们使用了 FisherFace 算法以及主成分分析 (PCA) 和线性判别分析 (LDA)。

所需技能

Python基础知识和OpenCV、Android studio、FisherFace算法的中高级知识。

执行:

检测情绪的过程非常具有挑战性。我们已经在两个数据集上训练了我们的模型: JAFEE Conh-Kanade 数据库。这两个数据集在网上很容易获得,并被我们用来评估我们的模型。 FisherFace 算法捕获分类图像,对数据进行维,然后分类计算统计值。它还为输入图像计算相同的值,并将该值与训练数据集进行比较并给出所需的输出。

LDA属于监督学习类别,其中机器必须使用先验数据进行学习。 LDA 应用了降维技术,可减少执行和分类数据的时间。 PCA以数学值的形式转换不相关和相关的变量。它使用降维来通过将大型数据集转换为更小的部分来减少它们。 PCA观察数据并计算概率生成模型。



我们使用 Cohn-Kanade 数据集进行训练,并进行了一些分类来训练和测试我们的模型。由于输入与用户有关,因此具有数据集较少和内存存储较少的优点,因此将提供良好的准确率。还可以通过快速响应时间获得更快的输出。

涉及处理数据并检测该情绪的步骤讨论如下:

  • 步骤1:用户给出输入,以用户的网络摄像头捕捉到的图像的形式。
  • 第 2 步:我们的模型对图像进行分析,并将其归类为快乐、悲伤、中性或愤怒的情绪。
  • 第 3 步:使用训练数据集(JAFEE 和 Cohn-Kanade 数据集)提取和检测数据。
  • 第四步:根据用户的面部情绪识别选择播放列表或歌曲。
  • 第 5 步:在成功检测到情绪后,播放音乐以提升用户的情绪。

代表相同的流程图如下所示:

代码片段:

要显示源输入,请使用此代码。使用命令提示符安装必要的库,包括Tkinter

pip -V
pip install tkinter
Python3
import tkinter as tk
import cv2
from PIL import Image, ImageTk
  
width, height = 800, 600
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
  
root = Music_player.Tk()
root.bind('', lambda e: root.quit())
lmain = Music_player.Label(root)
lmain.pack()
  
def show_frame():
    _, frame = cap.read()
    frame = cv2.flip(frame, 1)
    cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
    img = Image.fromarray(cv2image)
    imgtk = ImageTk.PhotoImage(image=img)
    lmain.imgtk = imgtk
    lmain.configure(image=imgtk)
    lmain.after(10, show_frame)
  
show_frame()
root.mainloop()


Python3
import numpy as np
import glob
import random
import cv2
  
fishface=cv2.face.FisherFaceRecognizer_create()
data={}
  
def update(emotions):
    run_recognizer(emotions)
    print("Saving model...")
    fishface.save("model.xml")
    print("Model saved!!")
  
def make_sets(emotions):
    training_data=[]
    training_label=[]
  
    for emotion in emotions:
        training=training=sorted(glob.glob("dataset/%s/*" %emotion))
        for item in training:
            image=cv2.imread(item)
            gray=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
            training_data.append(gray)
            training_label.append(emotions.index(emotion))
    return training_data, training_label
  
def run_recognizer(emotions):
    training_data, training_label=make_sets(emotions)
    print("Training model...")
    print("The size of the dataset is "+str(len(training_data))+" images")
    fishface.train(training_data, np.asarray(training_label))


导入该组库并使用以下代码进行情绪检测:

蟒蛇3



import numpy as np
import glob
import random
import cv2
  
fishface=cv2.face.FisherFaceRecognizer_create()
data={}
  
def update(emotions):
    run_recognizer(emotions)
    print("Saving model...")
    fishface.save("model.xml")
    print("Model saved!!")
  
def make_sets(emotions):
    training_data=[]
    training_label=[]
  
    for emotion in emotions:
        training=training=sorted(glob.glob("dataset/%s/*" %emotion))
        for item in training:
            image=cv2.imread(item)
            gray=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
            training_data.append(gray)
            training_label.append(emotions.index(emotion))
    return training_data, training_label
  
def run_recognizer(emotions):
    training_data, training_label=make_sets(emotions)
    print("Training model...")
    print("The size of the dataset is "+str(len(training_data))+" images")
    fishface.train(training_data, np.asarray(training_label))

结果和成果:

静态图像用于面部反应或反应知觉。拍摄的照片是从为测试而存储的照片中拍摄的。 Cohn-Kanade 数据库共有 890 张照片,而JAFEE 数据库共有 213 张照片,其中数据库有两部分不同:第一个是训练集,另一个是评估集。

对于训练和评估,我们以80/20关系的方式安排数据库。这两个集合都带有七个表达式断言。

  • Cohn-Kanade 数据库:对于评估模型,我们向系统提供了一张单独拍摄的照片。然后系统首先识别排他标记的位置,然后找到那些标记。
  • 对于训练和评估,模式,数据库被赋予了模型。评估后,生成混淆矩阵和分组报告或按特定顺序排列。

系统研究的个体的一些心理状态如下所示:

1) 愤怒的脸

在这张图片中,用户的心态是愤怒的。

2) 悲伤的脸

在这张图片中,用户的心理状态是悲伤或沮丧的。



3)快乐的脸:

在这张图片中,用户的心态是快乐的或快乐的。

4)中性脸:

在捕获的这张图像中,用户的心态是中性的。

表1:CK+数据库分类报告

表2:CK+数据库准确率报告

现实生活应用和未来范围

在我们目前的工作状态下,我们已经处理了在线数据库中的音乐。在不久的将来,我们可以继续在线播放音乐,但还有更多选项,例如选择特定语言、最新歌曲、不太新的歌曲和 80 年代或 90 年代等老歌等等。未来的工作范围旨在举办音乐治疗课程,这肯定会帮助许多患有精神疾病、悲伤但想要快乐的人等。 基于移动应用程序的基于情感检测的音乐播放器必须是用户-友好的越来越多的选择。我们还可以创建具有此功能的应用程序和网站,包括语音识别和面部情绪检测。