人脸专注度检测系统
项目介绍
本项目是基于Flask、MobileNetV2、Mediapipe的人脸专注度检测系统。
项目采用tensorflow.keras库内置的MobileNetV2预训练模型,对自主采集的少量人脸图片数据迁移训练而得到最终的人脸专注度检测模型。
项目采用前后端分离的技术框架,基于 Flask 轻量级 Web 框架搭建后端服务,结合 HTML/CSS/JavaScript 实现前端用户界面。
人脸专注度检测原理
- ①通过MobileNet预训练模型迁移学习自主采集的人脸照片数据集,最终训练得到人脸专注度检测模型,实时对摄像头画面人脸状态检测;
- ②通过Mediapipe提供的 468 个面部关键点,检测头部姿态,用于标注人脸状态为不集中时的原因,如:抬头、低头、侧脸;
- ③最后将识别的人脸状态和状态不集中的原因显示在镜头界面上。
1、面部关键点检测:
使用 MediaPipe 检测用户面部的 468 个关键点。
通过关键点的位置关系,判断用户是否侧脸、抬头或低头。
2、专注度分类:
使用预训练的深度学习模型(基于 MobileNetV2)对用户的面部图像进行分类,判断用户是否专注。
模型输出为二分类结果:专注(0)或不专注(1)。
3、姿态判断:
如果用户被判断为不专注,系统会进一步分析面部关键点,判断不专注的原因(侧脸、抬头、低头)。
主要技术与框架
-
深度学习框架:
- TensorFlow/Keras:用于训练和加载专注度检测模型。
-
计算机视觉库:
-
OpenCV:用于图像处理和摄像头帧捕获。
-
MediaPipe:用于面部关键点检测。
-
-
Web 框架:
- Flask:用于构建 Web 应用,提供用户界面和 API 接口。
-
前端技术:
-
HTML/CSS/JavaScript:用于构建用户界面。
-
Jinja2 模板引擎:用于动态生成 HTML 页面。
-
-
其他工具:
-
Pillow:用于图像处理和文字绘制。
-
NumPy:用于数值计算。
-
主要功能
-
功能1:训练集预览
- 用户可以分页预览采集状态为专注和不专注的人脸图片,用于模型的训练。
-
功能2:专注度实时检测
- 实时显示摄像头画面,并标注用户的专注状态(专注/不专注)。
- 如果用户不专注,系统会显示原因(侧脸、抬头、低头)。
-
功能3:采集人脸照片
- 用户可以采集专注和不专注的人脸照片,用于训练模型。
-
功能4:模型训练
- 用户可以通过系统启动模型训练,训练完成后会保存新的模型。
- 在模型训练过程中,用户可以实时查看训练日志,包括损失和准确率。
-
功能5:登录、注册、注销
- 使用 Flask 的 session 来管理用户登录状态。在导航栏中根据登录状态显示不同的内容。
- 用户可以通过注册账号并登录系统,使用专注度检测功能。
环境说明
参考以下环境(已跑通),可按顺序安装库的版本:
Windows10及以上(操作系统)
python 3.9.12
numpy==1.22.4
tensorflow==2.7.4
pillow==9.0.1
flask==3.0.3
opencv-python==4.5.5
mediapipe==0.10.5
目录说明
人脸专注度检测系统/
├── start.py # Flask 应用主程序(运行启动项目)
├── models/ # 存放预训练模型和训练后的模型
│ └── focus_detection_model.h5
├── dataset/ # 存放采集的人脸照片
│ ├── focused/ # 专注状态的照片
│ └── unfocused/ # 不专注状态的照片
├── static/ # 静态资源文件
│ ├── background_img/ # 背景图片
│ └── fonts/ # 字体文件
├── templates/ # HTML 模板文件
│ ├── base.html # 基础模板
│ ├── index.html # 数据集预览页面(首页)
│ ├── login.html # 登录页面
│ ├── register.html # 注册页面
│ ├── focus_detection.html # 专注度检测页面
│ ├── collect_faces.html # 人脸照片采集页面
│ └── train_model.html # 模型训练页面
├── README.md # 项目说明文档
└── environment.txt # 项目依赖列表
右键运行 start.py 后,浏览器输入地址:127.0.0.1:5000 访问系统。
视频演示(效果图)
人脸专注度检测系统