深度学习:python人脸表情识别系统 情绪识别系统 深度学习 神经网络CNN算法 ✅

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅**感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。**🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、最全计算机专业毕业设计选题大全(建议收藏)✅

1、项目介绍

技术栈:

Python语言、人脸表情识别系统、情绪识别系统、深度学习、神经网络、CNN算法、PyQt5、tensorflow、FER数据集、CNN的主流框架之mini_XCEPTION。

识别分类:

生气、厌恶、恐惧、快乐、伤心、惊讶、中性(7种)

首先运用 Adaboos 算法对人 脸面部表情图像进行粗略的裁剪,再利用梯度积分投影和双阈值二值化对人脸面部表情图像中的人眼进行定位从而实现对人脸面部图像的精确裁剪;对于裁剪好的图像又对其进行了基于双线性插值的尺度归一化处理和基于均衡化算法的灰度归一化处理,得到最终的统一尺寸和统一灰度的人脸面部表情图像。

综合考虑的神经元的特征、学习规则和网络的拓扑结构三个方面构建了一个用于对人脸面部表情进行识别和分类的卷积神经网络构架。卷积层采用固定权值的 Gabor 小波直接构造,全连接层采用支持向量机算法进行构造,并运用匹配生长规则 对卷积神经网络的层次结构进行确定,利用反向传播算法对整个卷积神经网进行参 数训练。最终得到经过实验确定的适用于人脸面部表情识别与分类的卷积神经网络 结构。针对 Gabor 小波的位数灾难问题,运用 Fisher 线性判别法改进的主成分分析 法对其进行了降维处理,有效地解决了人脸面部图像维数过多和识别时间较长的问 题。 对改进的主成分分析法结合支持向量机算法与卷积神经网络算法分别进行了人 脸面部表情识别的实验,并与传统的人脸面部表情识别结构进行了比较,验证了卷 积神经网络在人脸面部表情识别的准确性和有效性;另外,对人脸面部表情识别分 类系统进行了设计,并设计了应用于人机交互的 GUI 图形用户界面

2、项目界面

(1)图片识别检测1

(2)图片识别检测2

(3)视频检测

(4)摄像头检测识别

3、项目说明

首先运用 Adaboos 算法对人 脸面部表情图像进行粗略的裁剪,再利用梯度积分投影和双阈值二值化对人脸面部表情图像中的人眼进行定位从而实现对人脸面部图像的精确裁剪;对于裁剪好的图像又对其进行了基于双线性插值的尺度归一化处理和基于均衡化算法的灰度归一化处理,得到最终的统一尺寸和统一灰度的人脸面部表情图像。

综合考虑的神经元的特征、学习规则和网络的拓扑结构三个方面构建了一个用于对人脸面部表情进行识别和分类的卷积神经网络构架。卷积层采用固定权值的 Gabor 小波直接构造,全连接层采用支持向量机算法进行构造,并运用匹配生长规则 对卷积神经网络的层次结构进行确定,利用反向传播算法对整个卷积神经网进行参 数训练。最终得到经过实验确定的适用于人脸面部表情识别与分类的卷积神经网络 结构。针对 Gabor 小波的位数灾难问题,运用 Fisher 线性判别法改进的主成分分析 法对其进行了降维处理,有效地解决了人脸面部图像维数过多和识别时间较长的问 题。 对改进的主成分分析法结合支持向量机算法与卷积神经网络算法分别进行了人 脸面部表情识别的实验,并与传统的人脸面部表情识别结构进行了比较,验证了卷 积神经网络在人脸面部表情识别的准确性和有效性;另外,对人脸面部表情识别分 类系统进行了设计,并设计了应用于人机交互的 GUI 图形用户界面

4、核心代码

python 复制代码
# -*- coding: utf-8 -*-




from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QMovie
from real_time_video_me import Emotion_Rec
from os import getcwd
import numpy as np
import cv2
import time
from base64 import b64decode
from os import remove
from slice_png import img as bgImg
from EmotionRecongnition_UI import Ui_MainWindow
import image1_rc


class Emotion_MainWindow(Ui_MainWindow):
    def __init__(self, MainWindow):
        self.path = getcwd()
        self.timer_camera = QtCore.QTimer()  # 定时器
        self.timer_video = QtCore.QTimer()  # 定时器

        self.setupUi(MainWindow)
        self.retranslateUi(MainWindow)
        self.slot_init()  # 槽函数设置

        # 设置界面动画
        gif = QMovie(':/newPrefix/icons/scan.gif')
        self.label_face.setMovie(gif)
        gif.start()

        self.cap = cv2.VideoCapture()  # 屏幕画面对象
        self.cap2 = cv2.VideoCapture()
        self.CAM_NUM = 0  # 摄像头标号
        self.model_path = None  # 模型路径
        # self.__flag_work = 0

    def slot_init(self):  # 定义槽函数
        self.toolButton_camera.clicked.connect(self.button_open_camera_click)
        self.toolButton_model.clicked.connect(self.choose_model)
        self.toolButton_video.clicked.connect(self.button_open_video_click)

        self.timer_camera.timeout.connect(self.show_camera)
        self.timer_video.timeout.connect(self.show_video)
        self.toolButton_file.clicked.connect(self.choose_pic)

    def button_open_camera_click(self):
        # 界面处理
        self.timer_camera.stop()
        self.timer_video.stop()
        self.cap.release()
        self.cap2.release()
        self.label_face.clear()
        self.label_result.setText('None')
        self.label_time.setText('0 s')
        self.textEdit_camera.setText('实时摄像已关闭')
        self.textEdit_video.setText("视频未选中")
        self.label_outputResult.clear()
        self.label_outputResult.setStyleSheet("border-image: url(:/newPrefix/icons/ini.png);")

        if self.timer_camera.isActive() == False:  # 检查定时状态
            flag = self.cap.open(self.CAM_NUM)  # 检查相机状态
            if flag == False:  # 相机打开失败提示
                msg = QtWidgets.QMessageBox.warning(self.centralwidget, u"Warning",
                                                    u"请检测相机与电脑是否连接正确! ",
                                                    buttons=QtWidgets.QMessageBox.Ok,
                                                    defaultButton=QtWidgets.QMessageBox.Ok)

            else:
                # 准备运行识别程序
                self.textEdit_pic.setText('文件未选中')
                QtWidgets.QApplication.processEvents()
                self.textEdit_camera.setText('实时摄像已开启')
                self.label_face.setText('正在启动识别系统...\n\nleading')
                # 新建对象
                self.emotion_model = Emotion_Rec(self.model_path)
                QtWidgets.QApplication.processEvents()
                # 打开定时器
                self.timer_camera.start(30)
        else:
            # 定时器未开启,界面回复初始状态
            self.timer_camera.stop()
            self.timer_video.stop()
            self.cap.release()
            self.cap2.release()
            self.label_face.clear()
            self.textEdit_camera.setText('实时摄像已关闭')
            self.textEdit_pic.setText('文件未选中')
            self.textEdit_video.setText('文件未选中')
            gif = QMovie(':/newPrefix/icons/scan.gif')
            self.label_face.setMovie(gif)
            gif.start()
            self.label_outputResult.clear()
            self.label_outputResult.setStyleSheet("border-image: url(:/newPrefix/icons/ini.png);")

            self.label_result.setText('None')
            self.label_time.setText('0 s')

    def button_open_video_click(self):
        # 界面处理
        self.timer_camera.stop()
        self.timer_video.stop()
        self.cap.release()
        self.cap2.release()
        self.label_face.clear()
        self.label_result.setText('None')
        self.label_time.setText('0 s')
        self.textEdit_camera.setText('实时摄像已关闭')
        self.textEdit_video.setText("视频未选中")
        self.label_outputResult.clear()
        self.label_outputResult.setStyleSheet("border-image: url(:/newPrefix/icons/ini.png);")

        if self.timer_video.isActive() == False:  # 检查定时状态
            # 使用文件选择对话框选择图片
            fileName_choose, filetype = QFileDialog.getOpenFileName(
                self.centralwidget, "选取图片文件",
                self.path,  # 起始路径
                "视频(*.mp4;)")  # 文件类型
            self.path = fileName_choose  # 保存路径
            if fileName_choose != '':
                self.textEdit_video.setText(fileName_choose + '文件已选中')
                # 新建对象
                self.cap2 = cv2.VideoCapture(self.path)
                self.emotion_model = Emotion_Rec(self.model_path)
                # 打开定时器
                self.label_face.setText('正在启动识别系统...\n\nleading')
                self.timer_video.start(30)
                QtWidgets.QApplication.processEvents()
            else:
                # 准备运行识别程序
                self.textEdit_pic.setText('文件未选中')
                self.textEdit_video.setText('文件未选中')
                QtWidgets.QApplication.processEvents()
                self.textEdit_camera.setText('实时摄像已关闭')

        else:
            # 定时器未开启,界面回复初始状态
            self.timer_camera.stop()
            self.timer_video.stop()
            self.cap.release()
            self.cap2.release()
            self.label_face.clear()
            self.textEdit_camera.setText('实时摄像已关闭')
            self.textEdit_pic.setText('文件未选中')
            self.textEdit_video.setText('文件未选中')
            gif = QMovie(':/newPrefix/icons/scan.gif')
            self.label_face.setMovie(gif)
            gif.start()
            self.label_outputResult.clear()
            self.label_outputResult.setStyleSheet("border-image: url(:/newPrefix/icons/ini.png);")

            self.label_result.setText('None')
            self.label_time.setText('0 s')

  

    def choose_model(self):
        # 选择训练好的模型文件
        self.timer_camera.stop()
        self.timer_video.stop()
        self.cap.release()
        self.cap2.release()
        self.label_face.clear()
        self.label_result.setText('None')
        self.label_time.setText('0 s')
        self.textEdit_camera.setText('实时摄像已关闭')
        self.textEdit_video.setText('文件未选中')
        self.textEdit_pic.setText('文件未选中')
        self.label_outputResult.clear()
        self.label_outputResult.setStyleSheet("border-image: url(:/newPrefix/icons/ini.png);")

        # 调用文件选择对话框
        fileName_choose, filetype = QFileDialog.getOpenFileName(self.centralwidget,
                                                                "选取图片文件", getcwd(),  # 起始路径
                                                                "Model File (*.hdf5)")  # 文件类型
        # 显示提示信息
        if fileName_choose != '':
            self.model_path = fileName_choose
            self.textEdit_model.setText(fileName_choose + ' 已选中')
        else:
            self.textEdit_model.setText('使用默认模型')

        # 恢复界面
        gif = QMovie(':/newPrefix/icons/scan.gif')
        self.label_face.setMovie(gif)
        gif.start()

🍅✌**感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!**🍅✌

5、源码获取方式

🍅**由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。**🍅

点赞、收藏、关注,不迷路,下方查看 👇🏻获取联系方式👇🏻

相关推荐
小尧嵌入式4 分钟前
C++基础语法总结
开发语言·c++·stm32·单片机·嵌入式硬件·算法
white-persist4 分钟前
【攻防世界】reverse | IgniteMe 详细题解 WP
c语言·汇编·数据结构·c++·python·算法·网络安全
霍格沃兹测试开发学社-小明5 分钟前
AI来袭:自动化测试在智能实战中的华丽转身
运维·人工智能·python·测试工具·开源
@游子7 分钟前
Python学习笔记-Day2
开发语言·python
稚辉君.MCA_P8_Java11 分钟前
Gemini永久会员 归并排序(Merge Sort) 基于分治思想(Divide and Conquer)的高效排序算法
java·linux·算法·spring·排序算法
wanderist.11 分钟前
Linux使用经验——离线运行python脚本
linux·网络·python
大千AI助手13 分钟前
Softmax函数:深度学习中的多类分类基石与进化之路
人工智能·深度学习·机器学习·分类·softmax·激活函数·大千ai助手
韩曙亮16 分钟前
【人工智能】AI 人工智能 技术 学习路径分析 ② ( 深度学习 -> 机器视觉 )
人工智能·深度学习·学习·ai·机器视觉
九千七52621 分钟前
sklearn学习(3)数据降维
人工智能·python·学习·机器学习·sklearn
黑客思维者24 分钟前
Salesforce Einstein GPT 人机协同运营的核心应用场景与工作流分析
人工智能·gpt·深度学习·salesforce·rag·人机协同·einstein gpt