面部情绪检测:一种 OpenCV 方法

255 阅读3分钟

面部情绪检测是一种允许计算机从面部表情检测人类情绪的技术。随着计算机视觉技术的进步,面部情绪检测已成为机器学习和人工智能的热门应用。

在本文中,我们将探讨如何使用 Python 和 OpenCV 构建面部情绪检测系统。我们将使用 FER2013 数据集,其中包含超过 35,000 张面部图像,标记有七种情绪:愤怒、厌恶、恐惧、快乐、悲伤、惊讶和中性。

第 1 步: 导入库

第一步是导入所需的库。我们将使用 OpenCV 从摄像头捕获视频流,使用 Keras 加载和训练我们的模型,使用 NumPy 处理图像。

import cv2 
import numpy as np 
from keras.models import load_model

第 2 步: 加载模型

我们将使用预训练的卷积神经网络 (CNN) 模型对面部表情进行分类。我们可以使用 Keras 函数加载模型load_model()

model = load_model('model.h5')'模型.h5'

第三步: 初始化相机

接下来,我们需要初始化摄像头来捕捉视频流。我们可以使用 OpenCVVideoCapture()函数来初始化相机。

上限 = cv2.VideoCapture(0)0 )

第 4 步: 定义情绪

我们需要定义我们想要检测的情绪及其相应的颜色来显示。

情绪 = {0'愤怒'1'厌恶'2'恐惧'3'快乐'4'悲伤'5'惊讶'6'中性'}颜色 = {'0:“愤怒”,1:“厌恶”,2:“恐惧”,3:“高兴”,4:“悲伤”,5:“惊讶”,6:“中性” }
颜色={ “愤怒”:(0 , 0 , 255 ), '厌恶' : ( 0 , 255 , 0 ), '恐惧' : ( 255 , 0 ,0), '快乐' : ( 255 , 255 , 0 ), '悲伤' : ( 0 , 255 , 255 ), '惊讶' : ( 255 , 0 , 255 ), '中性' : ( 255 , 255 , 255 )}

步骤 5: 处理视频流

我们现在可以处理视频流来检测面部情绪。我们将遍历视频流的每一帧,使用 Haar 级联分类器检测人脸,提取人脸区域,预处理图像,并使用预训练模型对情绪进行分类。

while  True : 
    ret, frame = cap.read() 
    
    # 使用 Haar 级联分类器检测人脸
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3 , 5 ) 
    
    for (x, y, w, h) in faces: 
        # 提取人脸区域
        face = gray[y:y+h, x:x+w] 
        
        # 将人脸图像调整为48x48像素
        face = cv2.resize(face, ( 48 , 48 )) 
        
        # 预处理图像
        face = np.expand_dims(face, axis= 0 ) 
        face = np.expand_dims(face, axis=- 1 )
        face = face/ 255.0 
        
        # 使用预训练模型对情绪进行分类
        predictions = model.predict(face) 
        emotion = emotions[np.argmax(predictions)] 
        color = colors[emotion] 
        
        # 在面部周围画一个矩形并显示情感
        cv2.rectangle(frame, (x, y), (x+w, y+h), color, 2 ) 
        cv2.putText(frame, emotion, (x, y+ 20 ), cv2.FONT_HERSHEY_SIMPLEX, 1 , color, 2 , cv2.LINE_AA) #显示
        
        处理后的视频流
        cv2.imshow( 'Facial Emotion Detection' , frame) # if cv2.waitKey(

        
        1 ) & 0xFF == ord ( 'q' ):
          中断

第六步: 松开相机并关闭所有窗口

cap.release() 
cv2.destroyAllWindows()

#保存模型以备将来使用
model.save( 'model.h5' )

结论

面部情绪检测是计算机视觉技术的一项引人入胜的应用,可用于娱乐、医疗保健和安全等各个行业。在本文中,我们探讨了如何使用 Python 和 OpenCV 构建面部情绪检测系统。我们使用预训练的 CNN 模型对面部表情进行分类,并使用 FER2013 数据集来训练模型。我们处理视频流以检测人脸、提取人脸区域、预处理图像并使用预训练模型对情绪进行分类。最后,我们展示处理后的视频流并保存模型以备将来使用。

面部情绪检测已经取得了长足的进步,随着人工智能和计算机视觉技术的进步,未来有望变得更加准确和高效。