基于MATLAB的人脸表情识别系统
项目介绍
本项目是一个利用MATLAB构建的完整人脸表情识别实战系统。该系统设计直观、代码结构清晰,集成了计算机视觉的标准处理流程,专门针对MATLAB初学者及从事模式识别研究的人员设计。通过图形用户界面(GUI),用户可以轻松进行模型训练、加载本地图片进行测试或启动摄像头进行实时表情识别。
本项目核心算法采用 HOG(方向梯度直方图)特征提取 结合 SVM(支持向量机)分类器,实现了对“高兴、悲伤、愤怒、惊讶、恐惧、厌恶、中性”等基本表情的自动识别。
功能特性
- 图形用户界面 (GUI):提供简洁的操作面板,单窗口即可完成所有交互,包括图像显示、状态监控和功能控制。
- 多模式识别:
*
本地图片模式:支持读取 JPG、PNG、BMP 等常见格式图片进行静态识别。
*
实时摄像头模式:调用计算机摄像头进行实时视频流的人脸检测与表情分类。
* 支持选择自定义数据集文件夹进行训练(文件夹名即为标签)。
* 提供“模拟数据生成”功能,用于演示代码逻辑和流程跑通。
- 可视化反馈:在图像上实时绘制人脸边界框,并标注预测的表情类别及置信度分数。
- 鲁棒的预处理:包含灰度转换、尺寸归一化和直方图均衡化,以提高不同光照条件下的识别率。
系统要求
运行本项目代码需要安装 MATLAB 及以下工具箱:
- Computer Vision Toolbox:用于人脸检测 (
CascadeObjectDetector)、HOG特征提取 (extractHOGFeatures) 及图像标注。 - Statistics and Machine Learning Toolbox:用于支持向量机模型训练 (
fitcecoc) 和预测。 - MATLAB Support Package for USB Webcams:用于摄像头实时调用 (
webcam)。
详细实现原理与逻辑
本项目在 main.m 中实现了完整的计算机视觉处理流水线,具体逻辑如下:
1. 初始化与全局配置
程序启动时会初始化全局变量,设定图像标准处理尺寸为
64x64 像素,HOG特征提取的 Cell 尺寸为
8x8。同时会尝试根据当前环境初始化人脸检测器对象,并构建一个临时的模拟分类器以防止未训练时的调用错误。
2. 人脸检测与定位
通过 Computer Vision Toolbox 提供的级联目标检测器 (
vision.CascadeObjectDetector) 扫描输入图像。代码中设定了合并阈值 (
MergeThreshold = 5) 以减少误检,输出人脸所在的矩形区域(Bounding Box)。
3. 图像预处理
为了保证特征提取的一致性,系统会对每一个检测到的人脸区域进行如下处理:
- 裁剪:根据检测到的边界框从原图中截取人脸。
- 尺寸归一化:将截取的人脸图像统一缩放至 64x64 像素。
- 直方图均衡化:使用
histeq 函数对图像进行对比度增强,消除光照不均的影响。
4. 特征提取 (HOG)
采用方向梯度直方图 (Histogram of Oriented Gradients, HOG) 作为表情特征描述子。调用
extractHOGFeatures 函数,基于预设的 8x8 Cell 尺寸计算特征向量。该特征能有效捕捉面部的边缘和形状信息,对几何形变和光照变化具有一定的鲁棒性。
5. 分类识别 (SVM)
分类器采用多分类支持向量机 (Multiclass SVM)。
- 训练阶段:通过
fitcecoc 函数训练一个纠错输出编码 (ECOC) 模型,内部采用线性核的支持向量机作为学习器。 - 预测阶段:使用训练好的模型对新提取的特征向量进行预测,输出表情标签及对应的置信度分数。
关键函数说明
以下是 main.m 中核心函数的具体功能分析:
构建系统的主界面,包括绘图区域 (Axes)、状态栏、以及“加载图片”、“开启摄像头”、“训练模型”三个核心按钮,并绑定相应的回调函数。
这是本系统的核心处理引擎。它接收一帧图像作为输入,依序执行:灰度化 -> 人脸检测 -> 循环处理每个人脸 (裁剪、缩放、均衡化、提取HOG特征) -> 调用SVM预测 -> 在原图绘制红框和标签文字 -> 刷新界面显示。
负责模型的训练流程。用户通过对话框选择训练数据来源。如果选择文件夹,程序会遍历根目录下的子文件夹,将子文件夹名称作为标签,读取其中的图像提取特征并构建训练集,最后调用
fitcecoc 完成模型训练。
管理摄像头的生命周期。
startCamera 使用
webcam 对象建立连接,并利用
while 循环不断获取视频帧快照 (
snapshot),将每一帧送入
processAndDisplay 进行实时处理和显示。
辅助函数,封装了标准的预处理步骤(转灰度、Resize、HistEq)和特征提取步骤,确保训练数据和测试数据经过了完全相同的处理流程。
使用方法
- 准备数据(可选):为了获得真实的识别效果,建议准备一个包含表情图片的文件夹。结构如下:
* 根目录/
* 高兴/ (包含若干表情图片)
* 悲伤/ (包含若干表情图片)
* ...
- 启动程序:在 MATLAB 命令行运行
main 即可启动 GUI。 - 训练模型:
* 首次运行请点击
“训练/重置模型”。
* 在弹出的对话框中选择
“选择文件夹(推荐)” 并指向上述准备好的数据根目录。
* 等待进度条或状态栏提示训练完成。
* *注:如果没有数据,可以选择“生成模拟数据”来体验程序流程,但该模式无法识别真实表情。*
- 测试识别:
* 点击
“加载本地图片” 选择一张包含人脸的图片进行识别。
* 或者点击
“开启摄像头实时识别” 使用电脑摄像头进行实时演示。