基于Flask+Open Cv的人脸识别与管理系统
摘要:本文介绍了一个基于深度学习的人脸识别考勤管理系统,采用Python+Flask技术栈开发,集成OpenCV、dlib和face_recognition库实现人脸特征提取。系统具备员工管理、人脸录入、签到签退、考勤记录查询和报表统计等功能,支持HTTPS协议访问摄像头。部署过程包括环境配置、数据库初始化和SSL证书生成,提供默认管理员账号进行系统管理。项目采用模块化结构设计,包含人脸识别、路由
基于深度学习的人脸识别与管理系统,支持员工签到签退、人脸录入、考勤记录管理等功能。
功能特性
人脸识别签到/签退:员工通过摄像头进行人脸识别完成上下班打卡
人脸录入管理:管理员可为员工录入人脸特征,支持拍照和批量上传
考勤记录管理:查看和管理员工的考勤记录,支持按月筛选和导出
员工管理:添加、编辑、删除员工信息
部门管理:支持部门组织架构管理
统计报表:考勤数据统计和可视化展示







技术栈
后端:Python + Flask
数据库:SQLite
前端:HTML + Bootstrap 5 + JavaScript
人脸识别:OpenCV + dlib + face_recognition
深度学习:基于 ResNet 的人脸特征提取模型
安装部署
环境要求
- Python 3.8+
- Windows/Linux/macOS
- 摄像头(用于人脸识别)
安装步骤
1. 克隆项目
```bash
cd attendance_system
```
2. 创建虚拟环境(推荐)
```bash
conda create -n face_attendance python=3.11
conda activate face_attendance
```
3. 安装依赖
```bash
pip install -r requirements.txt
```
4. 生成SSL证书(用于HTTPS访问摄像头)
```bash
python generate_cert.py
```
5. 初始化数据库(重要!首次运行必须执行)
```bash
python init_db.py
```
这一步会:
- 创建所有数据库表
- 创建默认管理员账号(admin / admin123)
- 创建默认部门数据
- 创建默认考勤规则
6. 运行应用
```bash
python run.py
```
7. 访问系统
- 打开浏览器访问:`https://127.0.0.1:5000`
- 首次访问需要接受自签名证书的安全警告
- 默认管理员账号:`admin` / `admin123`
使用说明
管理员操作
1. 登录系统
- 使用管理员账号登录
2. 员工管理
- 添加新员工
- 编辑员工信息
- 删除员工
3. 人脸录入
- 选择员工
- 使用摄像头拍照或上传照片
- 支持批量导入(ZIP文件,文件名格式:工号.jpg)
4. 考勤记录
- 查看所有员工考勤记录
- 按月筛选
- 导出Excel报表
员工操作
1. 签到
- 点击"开始摄像头"
- 面对摄像头
- 点击"拍摄照片"完成签到
2. 签退
- 操作同签到
3. 查看记录
- 查看个人考勤记录
- 查看打卡照片
注意事项
摄像头访问
由于浏览器安全策略,摄像头访问需要满足以下条件之一:
- 使用 `https://` 协议
- 使用 `http://localhost` 或 `http://127.0.0.1`
解决方案:
- 运行 `python generate_cert.py` 生成SSL证书
- 使用 `https://127.0.0.1:5000` 访问
- 首次访问时浏览器会提示安全警告,请点击"高级"→"继续前往
人脸识别优化建
1. 光线条件:确保光线充足均匀,避免逆光
2. 拍摄角度:正面面对摄像头,避免侧脸
3. 背景简洁:避免复杂背景干扰
4. 录入质量:录入时拍摄多张照片,提高识别准确率
项目结构
```
attendance_system/
├── app/ 应用主目录
│ ├── __init__.py 应用初始化
│ ├── models.py 数据库模型
│ ├── forms.py 表单定义
│ ├── face_recognition/ 人脸识别模块
│ │ ├── face_recognizer.py 人脸识别器
│ │ └── face_encoder.py 人脸编码器
│ ├── routes/ 路由模块
│ │ ├── auth.py 认证路由
│ │ ├── admin.py 管理员路由
│ │ ├── employee.py 员工路由
│ │ ├── attendance.py 考勤路由
│ │ └── face.py 人脸管理路由
│ ├── static/ 静态资源
│ │ ├── css/ 样式文件
│ │ ├── js/ JavaScript文件
│ │ └── uploads/ 上传文件目录
│ │ └── attendance/ 考勤照片
│ └── templates/ HTML模板
│ ├── base.html 基础模板
│ ├── auth/ 认证页面
│ ├── admin/ 管理员页面
│ └── employee/ 员工页面
├── data/ 数据目录
│ ├── data_dlib/ dlib模型文件
│ └── database_faces/ 人脸数据库
├── config.py 配置文件
├── run.py 启动脚本
├── generate_cert.py SSL证书生成脚本
├── requirements.txt 依赖列表
└── README.md 项目说明
```
常见问题
### Q1: 报错 `no such table: user` 或数据库相关错误
A:
- 原因:数据库表还没有创建
- 解决:运行 `python init_db.py` 初始化数据库
### Q2: 摄像头无法打开
A:
- 确保使用 `https://127.0.0.1:5000` 访问
- 检查浏览器是否允许摄像头权限
- 关闭其他占用摄像头的程序
### Q3: 人脸识别失败
A:
- 检查光线是否充足
- 确保正面面对摄像头
- 重新录入人脸特征
Q3: 照片无法显示
A:
- 检查照片文件是否存在
- 路径中包含中文可能导致问题
- 刷新页面重试
Q4: 如何重置管理员密码
A:
- 删除 `attendance.db` 数据库文件
- 重新运行应用,使用默认账号登录
开发计划
- [ ] 支持多人同时识别
- [ ] 活体检测功能
- [ ] 考勤规则自定义
- [ ] 邮件/短信通知
- [ ] 移动端适配优化
- [ ] 数据备份与恢复
许可证
MIT License
更多推荐
所有评论(0)