news 2026/6/13 12:23:23

基于Java Spring Boot的人脸识别签到系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Java Spring Boot的人脸识别签到系统

一、项目简介

功能描述:本项目基于Java Spring Boot开发人脸识别签到系统,接入阿里云人脸比对API与OSS对象存储实现云端高精度人脸识别,同时自研多特征人脸比对算法作为离线降级方案,整合图像解析、文件读写、前后端交互等功能,实现学生信息录入、摄像头人脸采集、智能签到、签到数据统计全流程。开发过程独立完成,未直接照搬他人代码,仅参考Java图像处理、Spring Boot接口开发、阿里云OpenAPI对接相关技术文档。

个人负责任务:系统整体架构设计、后端代码开发、阿里云人脸API 与OSS对接开发、本地多特征人脸比对算法实现、文件数据持久化、RESTful接口编写、全场景异常容错处理、项目打包部署与功能测试。

二、功能架构图

系统分为前端展示层、后端服务层、数据持久层三大模块:

1.前端层:checkin.html提供页面交互、摄像头调用、图片Base64编码、请求发送;

2.后端服务层(本人全权开发):Spring Boot 服务、RESTful 接口、图像处理、阿里云人脸 API 与 OSS 云端服务对接、本地人脸比对算法、请求路由、跨域处理;

3.数据持久层:本地JSON文件students.json存储学生信息,photos文件夹存储人脸照片。

三、个人任务简述

本人独立完成整个人脸识别签到系统后端所有功能开发、算法实现、数据管理与项目调试,下表为具体任务:

序号

完成功能与任务

描述

1

Spring Boot项目搭建与环境配置

使用Maven管理项目依赖,整合Spring Boot Web、Lombok、Jackson等组件,配置项目编译、打包、运行环境,搭建标准Java Web项目结构。

2

面向对象设计

定义学生实体类Student,采用面向对象思想拆分功能模块,封装图像处理、文件操作、人脸比对工具方法,代码低耦合、易维护。

3

RESTful接口开发与跨域处理

编写新增学生、人脸签到、查询学生列表、签到状态查询、重置签到等接口,配置跨域支持,实现前后端数据正常交互。

4

本地文件数据持久化

不使用数据库,采用JSON文件存储学生信息,通过Jackson框架实现JSON序列化与反序列化,结合IO流完成照片文件本地保存。

5

云端人脸API对接+本地备用算法(重难点)

对接阿里云人脸比对API、阿里云OSS对象存储,完成图片云端上传与云端身份识别;同时纯 Java实现多特征融合本地图像比对算法,作为API故障时的降级方案,保障服务可用。

6

图像预处理功能

实现图片Base64编解码、尺寸缩放、RGB转灰度图、图像格式统一等预处理逻辑,解决不同摄像头图片尺寸、格式不一致问题。

7

异常捕获与容错处理

针对文件不存在、图片解析失败、参数缺失、IO异常等场景增加异常捕获,完善日志输出,提升系统稳定性。

8

项目打包与部署测试

编写启动批处理脚本,完成项目编译、打包、运行测试,解决端口占用、文件路径、图片解析等线上问题。

四、本人负责功能详解

1. *面向对象设计

简述

本系统采面向对象思想进行模块化设计,划分实体类、业务控制类、工具方法。核心分为两大核心类:

1.启动与控制类CheckinServer:Spring Boot启动入口、接口接收、业务逻辑调度,整合所有功能;

2.实体内部类Student:使用Lombok简化实体代码,封装学生学号、姓名、照片路径、录入时间等属性;

3.所有图像处理、人脸比对、文件读写逻辑均封装为独立私有方法,遵循单一职责原则,代码复用性强同时封装阿里云 API 签名、OSS 图片上传相关网络工具方法,统一处理云端服务调用逻辑。

2. *云端API对接+本地人脸比对降级方案(重难点)

简述

该模块为系统核心功能,采用云端识别为主、本地算法为辅的双方案设计。

1.主方案:对接阿里云人脸比对 API 与阿里云 OSS,将前端采集的图片上传至云端存储,调用官方接口完成人脸相似度比对,识别精度高;

2.降级方案:当网络异常、云端 API 调用失败、OSS 上传出错时,自动切换为本地多特征融合算法;纯代码实现像素相似度、SSIM 结构相似度、直方图等图像特征计算,加权融合得出匹配结果。难点:阿里云 API 签名计算、OSS 文件上传、网络请求异常捕获、主备方案自动切换、两套识别逻辑阈值适配。解决方法:按照阿里云接口规范实现 HMAC-SHA1 签名逻辑,增加多级异常捕获;分别为云端、本地算法设置独立匹配阈值,保证两种模式下识别效果稳定。

核心逻辑流程

(1)云端识别主流程(优先执行)

1.接收前端Base64人脸图片,完成解码与图像预处理;

2.将图片字节流上传至阿里云OSS,获取云端图片公网URL;

3.按照阿里云OpenAPI规范计算HMAC-SHA1接口签名,调用人脸比对API;

4.解析云端返回的人脸相似度数值,设置阈值判断签到结果

5.若网络超时、API报错、OSS上传失败,自动触发本地降级算法。

(2)本地多特征比对降级流程

1.对Base64图片解码,转为BufferedImage图像对象;

2.统一图片尺寸、转为灰度图,完成图像预处理;

3.分别计算像素相似度、SSIM结构相似度、直方图相似度;

4.求取三者平均值作为综合相似度;

5.遍历所有学生照片,筛选最优匹配,结合阈值判断签到是否成功。

3.*文件数据读写模块(重难点)

简述

系统无MySQL等数据库,采用本地JSON文件+文件夹实现数据持久化。使用Jackson框架完成JSON与Java对象的互转,结合Java IO流实现学生照片的保存与读取。同时搭配阿里云 OSS 实现人脸图片云端持久存储,形成本地 + 云端双存储方案。

难点:JSON文件读写编码乱码、图片Base64解码异常、目录自动创建、文件缺失容错。

解决方法:统一使用UTF-8编码读写文件;提前判断目录是否存在并自动创建;增加try-catch捕获IO、解析异常。

4.数据库文件设计

简述

本系统未使用传统关系型数据库,采用文件型数据存储方案,分为两部分:

1.学生信息文件:students.json,JSON 格式存储所有学生基础信息、照片路径、录入时间;

2.人脸照片目录:photos/文件夹,按学号_姓名.jpg规则命名存储人脸图片。

该设计轻量、无需额外安装数据库,适合小型桌面Web系统,数据结构简单清晰。同时配套阿里云 OSS 对象存储实现人脸图片云端备份与云端识别调用,形成本地文件 + 云端对象存储双存储架构。

5.接口开发与前后端交互

简述

基于 Spring Boot @RestController 开发 RESTful 接口,接收前端 JSON 请求,处理业务后返回标准 JSON 结果;配置跨域注解解决前端跨域报错。共实现 6 个核心接口,覆盖增、查、签到、签到重置全业务。

五、课程设计感想

本次Java课程设计我选择独立完成人脸识别签到系统,从项目搭建到代码调试全程自主摸索,收获很多也遇到了不少难题。

首先最大的困难是Java原生图像处理与人脸比对算法。此前只学习过基础Java语法,没有接触过Web开发、BufferedImage图像类、像素运算相关知识,一开始完全不知道如何对比两张图片。我先查阅 Java 图像处理资料,逐个学习图片缩放、灰度转换、像素读取等基础操作,再分步实现像素相似度、SSIM算法,反复调试算法公式与特征权重,解决了人脸相似度计算偏差、图片解析失败等问题,通过打印日志一步步定位bug,最终完成算法融合。

其次是文件读写与编码问题。在读写JSON和图片文件时,频繁出现中文乱码、文件找不到、Base64解码失败的情况。我逐一规范编码格式为UTF-8,增加文件目录自动创建、参数非空校验等容错逻辑,慢慢解决了数据持久化的问题。

另外,前后端跨域、端口占用、Maven 依赖冲突也是实际开发中常见的问题。通过配置跨域注解、修改服务端口、核对pom.xml依赖版本,保证项目正常运行。

这次课程设计让我把课堂上学的面向对象、集合、IO 流、Spring Boot 等知识点真正落地应用,不再局限于书本例题;本次开发除完成 Java Web 与本地图像处理开发外,还自学掌握了第三方云 API 对接、HMAC-SHA1 接口签名、OSS 对象存储等云服务相关知识,理解了「云端识别为主、本地算法降级备用」的项目容错设计思想,拓宽了网络编程与云服务开发的视野。独立开发的过程锻炼了我的问题排查能力和自主学习能力,也明白了软件开发需要严谨的逻辑和足够的耐心。

六、展望

(一) 现有功能不足与改进方案

1.复杂场景人脸识别准确率有限:系统默认调用阿里云人脸 API 完成高精度识别,但离线降级时仅依靠本地基础图像特征比对,在复杂光线、侧脸、遮挡情况下识别效果较差。后续计划引入轻量级人脸检测算法,先定位人脸区域再比对,过滤无效背景,提升离线模式下识别准确率。

2.数据存储方式简陋:目前使用JSON文件存储,当学生数量增多后,文件读写效率会下降。后续可接入MySQL数据库,使用MyBatis实现数据操作,优化查询性能。

3.功能单一:缺少签到记录查询、历史数据统计、分页展示等功能。后续新增签到日志模块,按日期、班级查询签到记录。

4.异常提示不够友好:当前仅后台打印日志,前端报错信息简略。后续完善前端异常提示,区分参数错误、图片错误、识别失败等不同场景。

(二)后续学习与拓展计划

1.深入学习Java图像处理、计算机视觉相关知识,了解主流人脸识别开源框架,丰富算法能力;

2.学习数据库与持久层框架(MySQL、MyBatis),完善项目架构,让系统更贴合企业级开发标准;

3.学习单元测试(JUnit),为现有接口和算法编写测试用例,保证代码稳定性;

4.可优化云端API调用逻辑,增加请求缓存减少OSS重复上传;也可将阿里云API能力整合到Java后端中,实现全Java技术栈的云端人脸识别系统。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 12:21:12

五轴机选型实录:玉石雕刻场景下的性价比与避坑指南

五年实测经验:不是参数越好看越好,而是“雕得好、废得少、上手快” 兄弟,你说到“性价比高的五轴机”,这事儿可说到我心坎里了。我在这个圈子里泡了五年,见了太多人买设备踩坑——花大价钱买回个“祖宗”,…

作者头像 李华
网站建设 2026/6/13 12:18:21

扣子工作流变量体系深度解析:从踩坑到精通

一、变量问题:扣子工作流崩溃的第一大元凶 如果你在扣子社区里翻翻求助帖,会发现一个规律: "为什么我的工作流报错?" "变量取不到值怎么办?" "明明上游有数据,下游节点为什么收到…

作者头像 李华
网站建设 2026/6/13 12:13:33

SAR点目标成像旁瓣性能量化工具:MATLAB一键计算PSLR与ISLR

本文还有配套的精品资源,点击获取 简介:一套开箱即用的MATLAB脚本工具,专用于SAR点目标图像的旁瓣质量量化分析。支持单点和多点目标输入,自动提取距离向与方位向响应剖面,精准计算峰值旁瓣比(PSLR&…

作者头像 李华
网站建设 2026/6/13 12:11:56

2026世界杯叒是“诸神的黄昏”懂球体育这一届梅西C罗真将成历史!

2026美加墨世界杯正式进入倒计时,这一届赛事被全网公认为足坛诸神的黄昏,是一代人青春的终极落幕之战。39岁的梅西、41岁的C罗迎来职业生涯最后一届世界杯征程,伴随莫德里奇、诺伊尔等一众传奇老将悉数谢幕,属于足坛黄金一代的时代…

作者头像 李华
网站建设 2026/6/13 12:09:53

3大核心技术革新:MAA明日方舟助手如何实现全日常一键长草

3大核心技术革新:MAA明日方舟助手如何实现全日常一键长草 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://…

作者头像 李华