本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。
一、项目描述
基于卷积神经网络的人脸表情识别系统
基于卷积神经网络的人脸表情识别系统,在尝试 Gabor、LBP 等传统特征提取方式基础上,改用深度模型实现端到端识别,可识别发怒、厌恶、恐惧、开心、伤心、惊讶、中性 7 种表情。
二、项目功能
GUI 界面识别:基于 PyQt5,选择图片后对图中所有人脸进行检测和表情预测,标注结果输出到 output 目录
实时检测:通过摄像头或视频文件进行逐帧人脸表情识别,支持 ESC 退出
模型训练:支持在 fer2013、jaffe、ck+ 数据集上训练,并生成训练过程可视化
传统方法:提供 LBP、Gabor 特征 + SVM 分类器实现作为对比
三、运行环境
操作系统:Windows / Linux
Python:3.6+(实测 3.13.5 可运行)
深度学习框架:TensorFlow 2.x(Keras API),实测 2.21.0
主要依赖:opencv-python、PyQt5、numpy、pandas、scipy、matplotlib、scikit-image、dlib、tqdm
GPU 支持:可选 CUDA 10.1 + cuDNN 7.6.5(原项目),CPU 亦可运行
四、项目技术
人脸检测:blazeface(默认,效果更好)、HAAR 分类器(opencv)、MTCNN
特征提取与分类:自定义 CNN3 网络,输入层后加入 (1,1) 卷积增加非线性表示,层次较浅
推理增强:对单张人脸进行水平翻转、偏移、裁剪等增广,得到多个概率分布加权求和后取最大概率作为标签
GUI 框架:PyQt5,结合 matplotlib 绘制概率直方图
后台线程:QThread 实现视频检测不阻塞界面
数据集
FER2013:网络爬虫采集,存在标签错误、水印、动画等问题,Pub/Pri Test 准确率约 67%
JAFFE:实验室采集的日本女性表情数据集,半身图需做人脸检测,5 折交叉验证准确率约 99%
CK+:实验室采集,标准较高,5 折交叉验证准确率约 99%
数据集和预训练模型需从百度网盘下载(密码 2pmd),下载后分别解压到 dataset 和 models 目录。GUI 进程已退出(任务 job-f978cbecd7cf4b738cbd552ce4ffbe01 结束)。这是之前运行的 GUI 窗口被关闭或终止导致的,属正常情况。
以上系统源码经过技术整理与调试,确保能正常运行
五、项目截图