Python基于OpenCV的人脸表情识别系统[源码&部署教程]

1.项目背景

人脸表情识别是模式识别中一个非常重要却十分复杂的课题。首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾。然后对近期人脸表情识别的方法进行了分类综述。通过对各种识别方法的分析与比较 ,提出了人脸表情识别技术实用化所需要考虑的几个方面 ,进而展望了今后人脸表情识别技术的发展方向。

2.识别效果展示

3.识别视频演示

Python基于OpenCV的人脸表情识别系统[源码&部署教程]_哔哩哔哩_bilibili

4.实现方法分析

人脸表情识别中需要运用人脸检测技术,识别人脸之后,再对表情图像做预处理(彩色图像灰度化、图像几何归一化和光照预处理),然后再对表情特征进行提取,分析,从而实现对表情的识别。国内外对于人脸的表情识别的研究近几年非常的多,涌现出了很多的算法,但对于表情的识别精度还是有待改进。

5.实现方法分析

人脸表情识别中需要运用人脸检测技术,识别人脸之后,再对表情图像做预处理(彩色图像灰度化、图像几何归一化和光照预处理),然后再对表情特征进行提取,分析,从而实现对表情的识别。国内外对于人脸的表情识别的研究近几年非常的多,涌现出了很多的算法,但对于表情的识别精度还是有待改进。
参考该博客的方法,本设计采用人脸检测技术,并进行标记,图像灰度化,图像几何归一化等方法,通过提取出嘴巴,眼睛两个地方的大小变化进行判断。

5.算法流程图

Python基于OpenCV的人脸表情识别系统[源码&部署教程]_第1张图片

6.fer2013人脸表情数据集简介

Fer2013人脸表情数据集由35886张人脸表情图片组成,其中,测试图(Training)28708张,公共验证图(PublicTest)和私有验证图(PrivateTest)各3589张,每张图片是由大小固定为48×48的灰度图像组成,共有7种表情,分别对应于数字标签0-6,具体表情对应的标签和中英文如下:0 anger 生气; 1 disgust 厌恶; 2 fear 恐惧; 3 happy 开心; 4 sad 伤心;5 surprised 惊讶; 6 normal 中性。

但是,数据集并没有直接给出图片,而是将表情、图片数据、用途的数据保存到csv文件中,如下图所示,
Python基于OpenCV的人脸表情识别系统[源码&部署教程]_第2张图片
如上图所示,第一张图是csv文件的开头,第一行是表头,说明每列数据的含义,第一列表示表情标签,第二列即为图片数据,这里是原始的图片数据,最后一列为用途。

7.表情图片提取

按照该博客的数据结构存放数据集,使用pandas解析csv文件,(pandas的简单用法可以查看这篇博客:https://blog.csdn.net/rookie_wei/article/details/82974277 ),再将原始图片数据保存为jpg文件,并根据用途和标签标签进行分类,分别保存到对应文件夹下,代码比较简单,并且做了详细备注,直接给完整代码如下

代码实现

#encoding:utf-8
import pandas as pd
import numpy as np
import scipy.misc as sm
import os
 
emotions = {
    '0':'anger', #生气
    '1':'disgust', #厌恶
    '2':'fear', #恐惧
    '3':'happy', #开心
    '4':'sad', #伤心
    '5':'surprised', #惊讶
    '6':'normal', #中性
}
 
#创建文件夹
def createDir(dir):
    if os.path.exists(dir) is False:
        os.makedirs(dir)
 
def saveImageFromFer2013(file):
 
 
    #读取csv文件
    faces_data = pd.read_csv(file)
    imageCount = 0
    #遍历csv文件内容,并将图片数据按分类保存
    for index in range(len(faces_data)):
        #解析每一行csv文件内容
        emotion_data = faces_data.loc[index][0]
        image_data = faces_data.loc[index][1]
        usage_data = faces_data.loc[index][2]
        #将图片数据转换成48*48
        data_array = list(map(float, image_data.split()))
        data_array = np.asarray(data_array)
        image = data_array.reshape(48, 48)
 
        #选择分类,并创建文件名
        dirName = usage_data
        emotionName = emotions[str(emotion_data)]
 
        #图片要保存的文件夹
        imagePath = os.path.join(dirName, emotionName)
 
        # 创建“用途文件夹”和“表情”文件夹
        createDir(dirName)
        createDir(imagePath)
 
        #图片文件名
        imageName = os.path.join(imagePath, str(index) + '.jpg')
 
        sm.toimage(image).save(imageName)
        imageCount = index
    print('总共有' + str(imageCount) + '张图片')
 
 
if __name__ == '__main__':
    saveImageFromFer2013('fer2013.csv')

运行完上面的代码后,得到3个文件夹,文件下有相应的表情的子文件夹
Python基于OpenCV的人脸表情识别系统[源码&部署教程]_第3张图片
子文件夹下又有相应的图片
Python基于OpenCV的人脸表情识别系统[源码&部署教程]_第4张图片

8.系统整合

下图完整源码&环境部暑视频教程&数据集&自定义UI界面
Python基于OpenCV的人脸表情识别系统[源码&部署教程]_第5张图片
参考博客《Python基于OpenCV的人脸表情识别系统[源码&部署教程]》

9.参考文献

  • [1]人工心理模型驱动的人脸表情动画合成[J]. 谷学静,许广宾,熊伟,王志良. 计算机工程与应用. 2008(08)
  • [2]基于CNN的人脸识别解压助眠微信小程序[J]. 胡文寒,李健喆,曾天伦,沈青. 电脑编程技巧与维护. 2022(08)
  • [3]小波变换在人脸表情识别研究中的应用[J]. 崔景霞. 长春理工大学学报(自然科学版). 2011(03)
  • [4]基于活动外观模型的人脸表情分析与识别[J]. 左坤隆,刘文耀. 光电子·激光. 2004(07)
  • [5]人脸表情识别方法综述[J]. 陈俊. 中国集体经济. 2009(16)
  • [6]基于语义属性的人脸表情识别新方法[J]. 于永斌,刘清怡,毛启容,詹永照. 小型微型计算机系统. 2016(02)
  • [7]人脸表情特征提取方法的研究进展[J]. 乔明,陈亚军. 重庆工学院学报(自然科学版). 2008(06)
  • [8]人脸表情自动识别技术研究进展[J]. 张家树,陈辉,李德芳,罗小宾,夏小东. 西南交通大学学报. 2005(03)
  • [9]基于多群体遗传算法的人脸表情识别[J]. 朱娅妮,吴国华,杜加友. 杭州电子科技大学学报. 2013(01)
  • [10]基于生成对抗网络的人脸表情数据增强方法[J]. 孙晓,丁小龙. 计算机工程与应用. 2020(04)

你可能感兴趣的:(opencv,python,计算机视觉)