python 目标检测中构建基于深度学习的yolov8+gui(pyqt5)人脸情绪识别系统 识别人脸表情中的生气’,厌恶’,害怕’,高兴’,中立’,伤心’,惊讶
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)
环境配置
-
安装Anaconda并创建一个新的虚拟环境:
conda create -n emotion_recognition python=3.9 conda activate emotion_recognition -
安装必要的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设计及推理结果展示。这个系统不仅能够准确识别人脸情绪,还提供了用户友好的交互界面,适用于多种应用场景。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)