【A269】基于Python+OpenCV+CNN表情识别推荐对应情感音乐(Web版)

2022-06-12 21:46:07      索炜达电子      476     

项目描述:情感识别模型在FER 2013数据集上进行训练。它可以检测到7种情绪。该项目的工作原理是从网络摄像头获取实时视频,将其传递到模型中,以获得情绪预测。然后根据预测的情绪,应用程序将通过spotipy从Spotify获取歌曲的播放列表,并通过在屏幕上显示来推荐歌曲。

特征:

-实时表情检测和歌曲推荐。

-使用API从Spotify获取的播放列表。

-网站形式展现

运行应用程序:

Run python app.py

技术应用:

-Keras

-Tensorflow

-Spotipy

-Tkinter (For testing)

-Flask

数据集:

本项目使用的数据集是著名的FER2013数据集。在此数据集上训练的模型可以对7种情绪进行分类。可以在此处找到数据集。

https://www.kaggle.com/datasets/msambare/fer2013

请注意,数据集高度不平衡,happy类具有最大表示。这可能是导致训练后okaysish准确性的一个因素。

模型架构:

模型架构是由Conv2d、Maxpool2d、Dropout和Dense层组成的顺序模型:

整个模型中的Conv2D层具有不同的过滤器大小,从32到128,都具有激活“relu”

池层具有池大小(2,2)

辍学设置为0.25,因为以上任何内容都会导致性能不佳

最后的致密层有“softmax”激活,用于分类7种情绪

使用“categorical\u crossentropy”和“Adam”优化器以及“准确性”指标计算损失

注意:-尝试实现各种其他模型,如VGG16,但精度太低。该模型架构提供了足够的准确性。稍微修改一下超参数可能会提高精度

模型架构是由Conv2d、Maxpool2d、Dropout和Dense层组成的顺序模型:

1.Conv2D layers throughout the model have different filter size from 32 to 128, all with activation 'relu'

2.Pooling layers have pool size (2,2)

3.Dropout is set to 0.25 as anything above results in poor performance

4.Final Dense layer has 'softmax' activation for classifying 7 emotions

注意:-尝试实现各种其他模型,如VGG16,但精度太低。该模型架构提供了足够的准确性。稍微修改一下超参数可能会提高精度

图像处理和训练:

1.在Keras API中的“ImageDataGenerator”的帮助下,这些图像被标准化,大小调整为(48,48),并分64批转换为灰度。

2.训练在当地进行了大约13个小时,共75个阶段,准确率约为66%

当前状况:

整个项目运作得非常好。由于多线程,实时检测提供了良好的帧速率。

项目组成部分:

1.Spotipy is a module for establishing connection to and getting tracks from Spotify using Spotipy wrapper.

2.haarcascade is for face detection.

3.camera.py is the module for video streaming, frame capturing, prediction and recommendation which are passed to main.py.

4.main.py is the main flask application file.

5.index.html in 'templates' directory is the web page for the application. Basic HTML and CSS.

6.utils.py is an utility module for video streaming of web camera with threads to enable real time detection.

7.train.py is the script for image processing and training the model.

遇到问题:

当前状态下的应用程序无法部署在web上,因为:

Opencv尝试在应用程序运行的任何设备上打开摄像头。当前状态的代码使用网络摄像头(如果服务器端而非客户端可用)。所以,当应用程序在笔记本电脑上本地运行时,可以通过网络摄像头进行视频流传输。但如果将其部署到云上,该应用程序将存储在数据中心的某个地方,而该数据中心显然没有连接网络摄像头,因此无法工作。

进一步工作:

创建数据库并将其连接到应用程序,而不是CSV。DB将获取歌曲以供推荐,新歌曲可以直接更新到数据库中

添加一项功能,该功能将更新指定的播放列表以获得更好的和更新的推荐,在固定的时间内的特定日期(例如每个星期日)将其附加到数据库中

直接播放歌曲或在用户单击Spotify时重定向到歌曲。

重写代码,使视频流在客户端而不是服务器端完成,从而使应用程序可部署

注:模型精度不是很高。大约66%。需要进一步培训和微调。可以尝试视觉转换器模型。


TAG
  • 6 次