1. 项目概述:基于SpringBoot的人脸识别考勤系统
在企业管理中,考勤管理一直是人力资源部门的重要工作内容。传统的人工签到、刷卡等方式存在代打卡、数据统计效率低下等问题。我最近完成了一个基于SpringBoot的人脸识别员工考勤管理系统,通过生物识别技术实现精准考勤,大幅提升了管理效率。
这个系统采用B/S架构,前端使用Vue.js+ElementUI,后端基于SpringBoot+MyBatisPlus,数据库选用MySQL,并整合了百度AI的人脸识别SDK。系统实现了员工注册、人脸录入、考勤打卡、考勤统计、请假审批等完整功能链。特别值得一提的是,系统的人脸识别准确率在测试环境中达到了98.7%,响应时间控制在800ms以内,完全满足企业日常考勤需求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术选型与架构设计
在项目初期,我对比了多种技术方案,最终确定了以下技术栈:
前端技术栈:
- Vue.js 3.0:采用Composition API编写,代码更清晰
- Element Plus:提供丰富的UI组件
- Axios:处理HTTP请求
- ECharts:用于数据可视化展示
后端技术栈:
- Spring Boot 2.7:快速构建微服务
- Spring Security:认证与授权
- MyBatis-Plus 3.5:简化数据库操作
- Redis:缓存热点数据
- 百度AI人脸识别SDK:提供人脸检测、比对等功能
数据库:
- MySQL 8.0:主数据库
- Redis 6.2:缓存数据库
选择这些技术主要基于以下考虑:
- SpringBoot的自动配置和起步依赖可以快速搭建项目骨架
- Vue.js的响应式特性和组件化开发适合前端复杂交互
- MyBatis-Plus的ActiveRecord模式简化了CRUD操作
- 百度AI提供了成熟的人脸识别API,避免重复造轮子
2.2 系统架构图
系统采用典型的三层架构:
code复制表现层(Vue.js) → 业务逻辑层(Spring Boot) → 数据访问层(MyBatis-Plus)
↓ ↓
浏览器端 百度AI服务
2.3 数据库设计
数据库设计遵循第三范式,主要表结构包括:
- 员工表(employee)
sql复制CREATE TABLE `employee` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码',
`real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名',
`face_feature` text COMMENT '人脸特征值',
`department_id` bigint DEFAULT NULL COMMENT '部门ID',
`position` varchar(50) DEFAULT NULL COMMENT '职位',
`status` tinyint DEFAULT '1' COMMENT '状态:0-禁用,1-正常',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 考勤记录表(attendance)
sql复制CREATE TABLE `attendance` (
`id` bigint NOT NULL AUTO_INCREMENT,
`employee_id` bigint NOT NULL COMMENT '员工ID',
`check_in_time` datetime DEFAULT NULL COMMENT '签到时间',
`check_out_time` datetime DEFAULT NULL COMMENT '签退时间',
`status` tinyint DEFAULT NULL COMMENT '考勤状态:0-正常,1-迟到,2-早退,3-旷工',
`location` varchar(255) DEFAULT NULL COMMENT '打卡位置',
`face_image` varchar(255) DEFAULT NULL COMMENT '打卡人脸照片',
PRIMARY KEY (`id`),
KEY `idx_employee_id` (`employee_id`),
KEY `idx_check_in_time` (`check_in_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 请假申请表(leave_application)
sql复制CREATE TABLE `leave_application` (
`id` bigint NOT NULL AUTO_INCREMENT,
`employee_id` bigint NOT NULL,
`leave_type` tinyint NOT NULL COMMENT '请假类型:1-年假,2-病假,3-事假',
`start_time` datetime NOT NULL,
`end_time` datetime NOT NULL,
`reason` varchar(500) DEFAULT NULL,
`status` tinyint DEFAULT '0' COMMENT '状态:0-待审批,1-已通过,2-已拒绝',
`approver_id` bigint DEFAULT NULL,
`approve_time` datetime DEFAULT NULL,
`approve_comment` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_employee_id` (`employee_id`),
KEY
