python 目标检测中构建基于深度学习的yolov8+gui(pyqt5)人脸情绪识别系统 识别人脸表情中的生气’,厌恶’,害怕’,高兴’,中立’,伤心’,惊讶

基于深度学习的人脸情绪识别系统,

在这里插入图片描述

项目介绍:
模型:YOLOV8
软件:Pycharm+Anaconda
环境:python=3.9 opencv_python PyQt5
在这里插入图片描述

简介:
有28079张情绪图像,训练了一个进行人脸面部情绪识别的检测模型,可用于检测7种不同的人物情绪。UI界面的人脸面部情绪识别系统,基于python与PyQT5开发,在这里插入图片描述

可检测7种不同人物情绪识别,表情分别为:[’生气’,厌恶’,害怕’,高兴’,中立’,伤心’,惊讶”];

基于深度学习的人脸情绪识别系统:从数据准备到带UI界面的应用实现

项目介绍

构建基于深度学习的人脸情绪识别系统,使用YOLOv8模型进行人脸检测和情绪分类。支持图片、视频以及摄像头输入,并能够保存检测结果。整个系统基于Python与PyQt5开发,提供了一个用户友好的图形界面(GUI)。

资源详情
  • 图片数量: 28,079张
  • 情绪类别: 7种不同的情绪(如快乐、悲伤、惊讶等)
  • 软件环境: PyCharm + Anaconda
  • 编程语言: Python 3.9
  • 依赖库: opencv-python, PyQt5, ultralytics (用于YOLOv8)
环境配置
  1. 安装Anaconda并创建一个新的虚拟环境:

    conda create -n emotion_recognition python=3.9
    conda activate emotion_recognition
    
  2. 安装必要的Python包:

    pip install torch torchvision opencv-python PyQt5 ultralytics
    
数据准备

假设您的数据集已经准备好,并且包含以下结构:

dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
└── labels/
    ├── train/
    ├── val/
    └── test/

创建一个YOLO配置文件data.yaml来描述您的数据集:

train: ./dataset/images/train
val: ./dataset/images/val
test: ./dataset/images/test

nc: 7 # 类别数量
names: ['happy', 'sad', 'surprised', 'angry', 'neutral', 'disgusted', 'fearful']
模型训练

使用YOLOv8进行模型训练的代码示例如下:

from ultralytics import YOLO

# 加载预训练的YOLOv8模型或自定义模型
model = YOLO('yolov8n.yaml')  # 或者 'yolov8n.pt' 来加载预训练权重

# 开始训练
results = model.train(data='data.yaml', epochs=100, imgsz=640, batch=16)

# 保存模型
model.save("best_model.pt")
UI界面设计

使用PyQt5设计一个简单的GUI界面:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton
from PyQt5.QtGui import QPixmap
import cv2
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QFileDialog

class EmotionRecognitionApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('人脸情绪识别系统')
        self.setGeometry(100, 100, 800, 600)

        self.image_label = QLabel(self)
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.image_label)

        self.button_open_image = QPushButton('打开图片', self)
        self.button_open_image.clicked.connect(self.open_image)
        self.layout.addWidget(self.button_open_image)

        container = QWidget()
        container.setLayout(self.layout)
        self.setCentralWidget(container)

    def open_image(self):
        fname, _ = QFileDialog.getOpenFileName(self, '打开图片', '', "Image files (*.jpg *.png)")
        if fname:
            self.display_image(fname)

    def display_image(self, fname):
        image = cv2.imread(fname)
        image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        h, w, ch = image_rgb.shape
        bytes_per_line = ch * w
        q_img = QPixmap.fromImage(QImage(image_rgb.data, w, h, bytes_per_line, QImage.Format_RGB888))
        self.image_label.setPixmap(q_img.scaled(self.image_label.size(), Qt.KeepAspectRatio))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = EmotionRecognitionApp()
    ex.show()
    sys.exit(app.exec_())
推理与结果显示

在UI中集成推理功能,以便实时显示检测结果:

from ultralytics import YOLO

model = YOLO('best_model.pt')

def recognize_emotion(image_path):
    results = model(image_path)
    boxes = results[0].boxes.xyxy.cpu().numpy()
    confidences = results[0].boxes.conf.cpu().numpy()
    class_ids = results[0].boxes.cls.cpu().numpy()

    img = cv2.imread(image_path)
    for box, conf, cls in zip(boxes, confidences, class_ids):
        x_min, y_min, x_max, y_max = map(int, box)
        label = model.model.names[int(cls)]
        cv2.rectangle(img, (x_min, y_min), (x_max, y_max), (255, 0, 0), 2)
        cv2.putText(img, f'{label}: {conf:.2f}', (x_min, y_min - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
    return img

# 在UI中调用此函数处理图像并显示结果

总结

通过上述这样子的步骤,可构建一个基于深度学习的人脸情绪识别系统,包括模型训练、UI设计及推理结果展示。这个系统不仅能够准确识别人脸情绪,还提供了用户友好的交互界面,适用于多种应用场景。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐