基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
22.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】23.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
24.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】25.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】

《------正文------》

基本功能演示

在这里插入图片描述

摘要:人脸面部表情识别在多个领域中都扮演着重要的角色,通过解读人的情绪反应,增强机器与人之间的交互体验。本文基于YOLOv8深度学习框架,通过28079张图片,训练了一个进行人脸面部表情识别的检测模型,可用于检测7种不同的人物表情。并基于此模型开发了一款带UI界面的人脸面部表情识别系统,可用于实时检测场景中的人物面部表情,更方便进行功能的展示。该系统是基于pythonPyQT5开发的,支持图片视频以及摄像头进行目标检测,并保存检测结果。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件获取方式见文末

文章目录

  • 基本功能演示
  • 前言
  • 一、软件核心功能介绍及效果演示
    • 软件主要功能
    • (1)图片检测演示
    • (2)视频检测演示
    • (3)摄像头检测演示
  • 二、模型的训练、评估与推理
    • 1.YOLOv8的基本原理
    • 第一步:人脸位置检测
    • 第二步:人脸表情识别
      • 1. 数据集准备与训练
      • 2.模型训练
      • 3. 训练结果评估
      • 4. 利用模型进行表情识别
  • 【获取方式】
  • 结束语

点击跳转至文末《完整相关文件及源码》获取


前言

人脸面部表情识别在多个领域中都扮演着重要的角色,通过解读人的情绪反应,增强机器与人之间的交互体验。

在人机交互中,面部表情系统可以使计算机更加智能化,能够理解和响应用户的情感状态,从而提供更加个性化和富有同理心的服务。例如,在教育领域,该技术能够识别学生的情绪变化,帮助教师调整教学方式以提高学生的学习效率;在心理健康领域,它可以作为情绪监测工具,帮助医生评估患者情绪状态,辅助诊断和治疗;在自动驾驶系统中,通过监测驾驶员的表情和状态,可以有效预防疲劳或注意力不集中驾驶带来的风险。
此外,人脸面部表情识别技术在市场研究和用户体验设计中也极为有用,能够识别消费者在看到某个产品或广告时的真实情绪反应,从而帮助企业更好地了解消费者需求,优化产品设计和营销策略。在智能家居和安全监控系统中,结合情绪识别可以提供更加人性化的服务,如根据用户的情绪状态调整室内的灯光、音乐等环境设置,或是及时警觉异常情绪状态来预防潜在风险。除此之外,面部表情识别技术还广泛应用于娱乐产业,如视频游戏和虚拟现实中,以提供更加沉浸和互动的用户体验。
综上所述,人脸面部表情识别技术开启了新一代人机交互的大门,它的应用场景广泛,从提高商业价值到增进人类福祉,这项技术的发展极具潜力并正在逐渐改变我们的生活与工作方式。

博主通过搜集不同种类的人脸表情的相关数据图片,根据YOLOv8的目标检测技术,基于python与Pyqt5开发了一款界面简洁的人脸面部表情识别系统,可支持图片、视频以及摄像头检测,同时可以将图片或者视频检测结果进行保存

软件初始界面如下图所示:
在这里插入图片描述

检测结果界面如下:
在这里插入图片描述

一、软件核心功能介绍及效果演示

软件主要功能

1. 可进行7种不同人物表情识别,表情分别为:['生气','厌恶','害怕','高兴','中立','伤心','惊讶'];
2. 支持图片、视频及摄像头进行人脸表情检测;
3. 界面可实时显示表情结果置信度各表情概率值等信息;

(1)图片检测演示

点击打开图片图标,选择需要检测的图片,会显示检测结果,同时会将7种表情的概率值显示在右方。操作演示如下:点击目标下拉框后,可以选定指定目标的结果信息进行显示。
注:1.右侧目标默认显示置信度最大一个目标。
单个图片检测操作如下:
在这里插入图片描述

(2)视频检测演示

点击打开视频按钮,打开选择需要检测的视频,就会自动显示检测结果。
在这里插入图片描述

(3)摄像头检测演示

点击打开摄像头按钮,可以打开摄像头,可以实时进行检测,再次点击摄像头按钮,可关闭摄像头。
在这里插入图片描述

二、模型的训练、评估与推理

1.YOLOv8的基本原理

YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行
其主要网络结构如下:
在这里插入图片描述

本文的人脸表情识别,主要分为两步。第一步:检测人脸位置第二步:将人脸位置截取出来,作为输入传入到使用YOLOv8训练的表情分类模型,从而得到表情识别的结果。

第一步:人脸位置检测

关于人脸位置检测的方法有很多,比如:opencv的dilb库,face_recognition,insightface,mediapipe,deepface等都可以进行人脸位置检测。因为本文主要是对人脸面部表情进行识别,重点实现的是第二部分的表情识别部分。因此对于第一步,本文直接使用的是通过yolov8官方训练好的人脸检测模型yolov8n-face.pt,来进行人脸位置检测,该模型是通过人脸目标数据集训练而来,精度较高。
具体使用方法如下:

#coding:utf-8
from ultralytics import YOLO
import cv2
if __name__ == '__main__':
    # 所需加载的模型目录
    path = 'models/yolov8n-face.pt'
    # 需要检测的图片地址
    img_path = "TestFiles/test3.jpg"

    model = YOLO(path, task='detect')
    # 检测图片
    results = model(img_path,conf=0.5)
    res = results[0].boxes.xyxy.tolist()
    print(res)

    img = cv2.imread(img_path)

    for each in res:
        # 开始的y坐标:结束的y坐标,开始x:结束的x
        x1,y1,x2,y2 = each[:4]
        x1 = int(x1)
        y1 = int(y1)
        x2 = int(x2)
        y2 = int(y2)
        cv2.rectangle(img, (x1, y1), (x2, y2), (50, 50, 250), 3)
    cv2.imshow('face_detection', img)
    cv2.waitKey(0)

在这里插入图片描述
以上结果可以发现,该模型能够很好的检测人脸位置。下面我们需要使用yolov8训练一个表情识别的模型,对于检测到的人脸进行表情的识别判断

第二步:人脸表情识别

1. 数据集准备与训练

本文使用的数据集为人脸面部表情分类数据集,包含7种不同的人脸表情,分别是:['生气','厌恶','害怕','高兴','中立','伤心','惊讶']。一共包含35257张图片,其中训练集包含28079张图片,测试集包含7178张图片。部分数据集及类别信息如下。下面我们将使用该数据集训练一个表情分类模型,用于对截取后的人脸部分进行表情分类,从而达到进行表情识别的目的。
在这里插入图片描述
在这里插入图片描述

图片数据集的存放格式如下,在项目目录中新建datasets目录,同时将分类的图片分为训练集与验证集放入ExpressionData目录下。
在这里插入图片描述

2.模型训练

数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:

#coding:utf-8
from ultralytics import YOLO

# 加载预训练模型
model = YOLO("yolov8n-cls.pt")
if __name__ == '__main__':
    model.train(data='datasets/ExpressionData', epochs=300, batch=4)
    # results = model.val()
    # # results = model("自己的验证图片")

3. 训练结果评估

在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv8在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:
在这里插入图片描述

本文训练结果如下:
在这里插入图片描述
在这里插入图片描述

4. 利用模型进行表情识别

模型训练完成后,我们可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们可以使用该文件进行后续的推理检测。
图片检测代码如下:

#coding:utf-8
from ultralytics import YOLO
import cv2

import Config
import detect_tools as tools
import numpy as np

if __name__ == '__main__':
    img_path = 'TestFiles/12.png'

    # 所需加载的模型目录
    face_model_path = 'models/yolov8n-face.pt'
    expression_model_path = 'models/expression_cls.pt'
    # 人脸检测模型
    face_model = YOLO(face_model_path, task='detect')
    # 表情识别模型
    expression_model = YOLO(expression_model_path, task='classify')

    cv_img = tools.img_cvread(img_path)
    face_cvimg, faces, locations = face_detect(cv_img, face_model)

    if faces is not None:
        for i in range(len(faces)):
            left, top, right, bottom = locations[i]
            # 彩色图片变灰度图
            img = cv2.cvtColor(faces[i], cv2.COLOR_BGR2GRAY)
            # 灰度图变3通道
            img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
            rec_res = expression_model(img)
            probs = rec_res[0].probs.data.tolist()
            num = np.argmax(probs)
            label = Config.names[num]
            face_cvimg = cv2.putText(face_cvimg, label, ((left, top - 10)), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 250),
                                     2, cv2.LINE_AA)
    cv2.imshow('yolov8_detections',face_cvimg)
    cv2.waitKey(0)

执行上述代码后,会将执行的结果直接标注在图片上,结果如下:
在这里插入图片描述

以上便是关于此款人脸面部表情识别系统的原理与代码介绍。基于此模型,博主用pythonPyqt5开发了一个带界面的软件系统,即文中第二部分的演示内容,能够很好的支持图片、视频及摄像头进行检测

关于该系统涉及到的完整源码、UI界面代码、数据集、训练代码、测试图片视频等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。


【获取方式】

关注下方名片G-Z-H:【阿旭算法与机器学习】,回复【软件】即可获取下载方式

本文涉及到的完整全部程序文件:包括python源码、数据集、训练代码、UI文件、测试图片视频等(见下图),获取方式见文末:
在这里插入图片描述

注意:该代码基于Python3.9开发,运行界面的主程序为MainProgram.py,其他测试脚本说明见上图。为确保程序顺利运行,请按照程序运行说明文档txt配置软件运行所需环境。

关注下方名片GZH:【阿旭算法与机器学习】,回复【软件】即可获取下载方式


结束语

以上便是博主开发的基于YOLOv8深度学习的人脸面部表情识别系统的全部内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正。
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入剖析ShardingSphere:探索其内核原理与核心源码,揭秘分库分表技术的奥秘

一、 内核剖析 ShardingSphere虽然有多个产品,但是他们的数据分片主要流程是完全一致的。 解析引擎 解析过程分为词法解析和语法解析。 词法解析器用于将SQL 拆解为不可再分的原 子符号,称为Token。 并根据不同数据库方言所提供的字典,将其…

掌握 Postman Newman:快速启动 API 测试自动化

Postman 中的 Newman 是什么? Newman 是一个 CLI(命令行界面)工具,用于运行 Postman 中的集合(Collection)和环境(Environment)来进行自动化测试。它允许直接从命令行运行 Postman …

解决VMware 虚拟机 ubuntu 20.04 异常关闭导致虚拟网卡 ens33 无法工作问题

问题描述 由于经常使用 SSH 远程链接 VMware 中的虚拟机 ubuntu,每次关闭都是挂起,时间久了,虚拟机运行有些卡顿了,此时可以通过 Linux 命令重启或者关闭 ubuntu,也可以之间使用 VMWare 中的【虚拟机】-- 【电源】-&g…

SpringCloudAlibaba之Nacos

1、简介 Nacos支持基于DNS和基于RPC的服务发现,服务端可以通过SDK或者Api进行服务注册,相应的服务消费者可以使用DNS或者Http查找的方式获取服务列表。Spring Cloud 服务注册中心的服务器很多,如 Zookeeper、Eureka、Consul 等。 Spring Clou…

CCNP课程实验-02-EIGRP_CFG

目录 实验条件网络拓朴需求: 基础配置需求实验1. R4/R5/R6通过二层交换机连接,按照实验拓扑图来宣告路由器接口到相应的EIGRP进程,没有具体说明的可任意宣告,要求关闭自动汇总。2. R2 --- R3上启用EIGRP认证(采用MD5进…

SM2——适用于前后端(java+vue)公用的SM2国密加解密传输

目录 一、SM2国密加解密算法1.1、pom文件引入依赖包1.2、SM2加解密工具类1.3、测试类 一、SM2国密加解密算法 1.1、pom文件引入依赖包 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk18on</artifactId><version>…

JMeter使用

目录 启动JMeter 创建线程组 设置线程参数 设置http请求参数 ​编辑 创建查看结果树(显示成功/失败多少以及返回结果等信息) 创建聚合报告(显示响应时间、吞吐量、异常数等信息) 点击上方的执行按钮即可开始压力测试 结果树显示 聚合报告结果显示 启动JMeter 在JMete…

产品经理学习-从0-1搭建策略产品

从0-1搭建策略产品 目录&#xff1a; 回顾策略产品 如何从0-1搭建策略产品 回顾策略产品 之前也了解过从产品实施的角度来看&#xff0c;策略就是针对问题的解决方案&#xff0c;在互联网时代更集中体现在2个维度&#xff1a;业务场景和数据应用 如何从0-1搭建策略产品 我们…

HTML5+CSS3④——选择器、复合选择器

目录 选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子代选择器 并集选择器 交集选择器 选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子代选择器 并集选择器 交集选择器

一文读懂OTA【赠书活动|第12期《一书读懂物联网:基础知识+运行机制+工程实现》】

2020年&#xff0c;特斯拉发布过一次OTA更新&#xff0c;车主可以通过这次系统更新获得座椅加热功能。当时&#xff0c;这则新闻震惊了车圈和所有车主&#xff0c;彼时的大家还没有把汽车当作可以“升级”的智能设备。 如今3年过去了&#xff0c;车主对各家车企的OTA升级早已见…

easyrecovery 2024最新免费密钥分享 实用数据恢复软件分享

在日常使用电脑时&#xff0c;我们经常会遇到误删文件的情况&#xff0c;若文件还未被彻底删除&#xff0c;我们还可以通过电脑中的回收站将其恢复&#xff0c;但若是回收站都被清空的话&#xff0c;想要恢复文件就变得比较困难了&#xff0c;而EasyRecovery可以很好的帮助我们…

关键字:new关键字

在 Java 中&#xff0c;new关键字用于创建对象实例。它是对象创建的语法糖&#xff0c;用于分配内存空间并调用构造函数来初始化对象。 以下是new关键字的基本语法&#xff1a; 在上述语法中&#xff0c;ObjectType是要创建对象的类名&#xff0c;objectName是对象的引用变量…

Stable Diffusion API入门:简明教程

Stable Diffusion 是一个先进的深度学习模型&#xff0c;用于创造和修改图像。这个模型能够基于文本描述来生成图像&#xff0c;让机器理解和实现用户的创意。使用这项技术的关键在于掌握其 API&#xff0c;通过编程来操控图像生成的过程。 在探索 Stable Diffusion API 的世界…

CISSP 第1章:实现安全治理的原则和策略

作者&#xff1a;nothinghappend 链接&#xff1a;https://zhuanlan.zhihu.com/p/669881930 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 CIA CIA 三性&#xff1a; 机密性&#xff1a;和数据泄露有关。完整性…

工业交换机进行高低温检测的原因是什么?

工业交换机进行高低温检测的原因有以下几点&#xff1a; 1. 确保设备正常工作&#xff1a;工业交换机在工作过程中会产生一定的热量&#xff0c;如果环境温度过高&#xff0c;可能会导致设备过热&#xff0c;影响交换机的性能和寿命。通过高温检测&#xff0c;可以及时采取措施…

基于蝴蝶算法优化的Elman神经网络数据预测 - 附代码

基于蝴蝶算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于蝴蝶算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于蝴蝶优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

SpringBoot知识

1、Spring和SpringBoot对比 2、版本调整 &#xff08;1&#xff09;先排除是否是JDK与SpringBoot的版本不一致导致的&#xff1a;如JDK1.8和SpringBoot3.1.5冲突&#xff1b; &#xff08;2&#xff09;调整编译版本 &#xff08;3&#xff09;调整maven的jdk &#xff08;4&…

基于蜻蜓算法优化的Elman神经网络数据预测 - 附代码

基于蜻蜓算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于蜻蜓算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于蜻蜓优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

【解决】电脑上的WIFI图标不见了咋整?

相信不少同学都遇到过这种情况&#xff1a;电脑上的wifi图标莫名不见了&#xff0c;甚至有时候还是在使用的中途突然断网消失的。 遇到这种情况一般有两种解决方案&#xff1a; 1. 在开机状态下长按电源键30秒以上 这种办法应该是给主板放电&#xff0c;一般应用在wifi6上面。…

我的机器学习起步如何Getting Started

学习技巧和原则 先通过经典书籍进行科普知名机器学习网站根据书籍或网站的目录&#xff0c;先泛读、再选择有兴趣的部分重点精读、后至于反复读知行合一 起步Getting Started 周志华版《机器学习》&#xff0c;又名西瓜书 可以作为科普书籍&#xff0c;需要主动略过对于理论…