项目概述
智能打卡系统是一个基于 PyQt5 和 OpenCV 的人脸识别考勤系统,具有员工管理、考勤记录、报表生成和数据可视化等功能。系统采用现代化的界面设计,提供直观的用户体验,并实现了基于权限的访问控制。
系统架构
系统采用分层架构设计,包括表示层、业务逻辑层、数据访问层和数据存储层。
系统功能模块
系统由以下主要功能模块组成:
1. 主窗口模块(main_window.py)
主窗口是系统的核心界面,负责整合各个功能模块并提供导航功能。
主要功能:
- 侧边栏菜单导航
- 页面切换管理
- 权限控制逻辑
- 管理员登录验证
2. 打卡模块(clock_page.py)
打卡模块是系统的核心功能,负责员工日常考勤打卡。
主要功能:
- 实时摄像头预览
- 人脸识别和匹配
- 打卡记录保存
- 打卡状态显示
3. 员工管理模块(employee_page.py)
员工管理模块负责员工信息的增删改查,包括新员工注册和照片采集。
主要功能:
- 员工信息表格显示
- 添加新员工(含人脸照片采集)
- 删除员工
- 员工数据管理
- 人脸特征码生成和存储
4. 记录查看模块(record_view_page.py)
记录查看模块负责显示员工信息和考勤记录。
主要功能:
- 员工信息查看
- 考勤记录查看
- 数据分类显示
5. 考勤报表模块(report_page.py)
考勤报表模块负责生成和导出考勤报表。
主要功能:
- 日/月报表切换
- 日期选择
- 报表查询
- 报表导出
6. 管理员登录模块(admin_login_dialog.py)
管理员登录模块负责验证管理员身份。
主要功能:
- 管理员账号验证
- 密码加密存储
- 登录状态管理
7. 管理员设置模块(admin_settings_dialog.py)
管理员设置模块负责修改管理员账号和密码。
主要功能:
- 显示当前管理员信息
- 修改管理员用户名
- 修改管理员密码
- 密码确认验证
8. 数据可视化模块(visualization_page.py)
数据可视化模块负责对考勤数据进行图表展示和统计分析。
主要功能:
- 考勤数据趋势图表
- 出勤率统计分析
- 迟到早退可视化展示
- 部门/个人考勤对比
- 数据导出功能
数据存储
系统使用 MySQL 数据库存储数据,主要包括以下表:
employees:存储员工基本信息- id:员工 ID
- name:员工姓名
- feature_code:人脸特征码
- created_at:创建时间
- updated_at:更新时间
clock_records:存储打卡记录- id:记录 ID
- employee_id:员工 ID
- clock_time:打卡时间
- status:打卡状态(正常/迟到/严重迟到)
admins:存储管理员信息- id:管理员 ID
- username:管理员用户名
- password_hash:密码哈希
- created_at:创建时间
- updated_at:更新时间
员工照片存储在本地文件系统的 data/photos/ 目录。
项目结构
.
├── main_window.py # 主程序入口
├── clock_page.py # 打卡页面
├── employee_page.py # 员工管理页面
├── record_view_page.py # 记录查看页面
├── report_page.py # 报表页面
├── visualization_page.py # 数据可视化页面
├── login_page.py # 登录页面
├── admin_login_dialog.py # 管理员登录对话框
├── admin_settings_dialog.py # 管理员设置对话框
├── dao/ # 数据访问层
├── entity/ # 实体类定义
├── service/ # 业务服务层
├── util/ # 工具类
├── data/ # 数据存储目录
├── database/ # 数据库相关文件
├── resources/ # 应用程序资源
├── cascades/ # 人脸检测级联分类器
├── web/ # Web版本实现
├── requirements.txt # Python依赖包列表
└── README.md # 项目说明文档
操作流程
管理员先注册新员工并采集人脸照片建立数据库,员工日常通过人脸识别完成考勤打卡,系统自动记录打卡时间和状态;管理员可登录查看考勤记录、生成报表并进行数据分析。
权限控制
- 普通用户只能访问打卡和退出功能
- 管理员可以访问所有功能,包括记录查看、员工管理和考勤报表
- 管理员设置功能需要管理员权限
技术栈
- GUI 框架:PyQt5
- 图像处理:OpenCV
- 人脸识别:face_recognition
- 数据库:MySQL
- 密码安全:SHA-256 哈希
- 数据可视化:Matplotlib / PyQtChart
运行环境
- Python 3.6+
- PyQt5 5.15.9
- OpenCV 4.8.0
- face_recognition 1.3.0
- dlib 19.24.0
- NumPy 1.24.3
- MySQL 8.0+
- mysql-connector-python 8.0.33
安装与运行
- 安装 MySQL 数据库并创建数据库:
CREATE DATABASE smart_sign_system; - 安装依赖:
pip install -r requirements.txt - 配置数据库连接,创建
.env文件:DB_HOST=localhost DB_USER=your_username DB_PASSWORD=your_password DB_NAME=smart_sign_system - 初始化数据库:
mysql -u your_username -p smart_sign_system < database/schema.sql - 运行系统:
python main_window.py
默认管理员账号
- 用户名:admin
- 密码:admin
注意事项
- 首次运行时会自动创建必要的数据目录
- 管理员可以通过“管理员设置”功能修改账号和密码
- 系统需要摄像头支持才能使用打卡功能
- 确保 MySQL 服务已启动并正确配置
- 确保已安装所有必要的 Python 包
本项目为个人原创,结构清晰,功能完整,适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求欢迎评论或私信。