
一、项目简介功能描述本项目基于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文件夹存储人脸照片。三、个人任务简述本人独立完成整个人脸识别签到系统后端所有功能开发、算法实现、数据管理与项目调试下表为具体任务序号完成功能与任务描述1Spring Boot项目搭建与环境配置使用Maven管理项目依赖整合Spring Boot Web、Lombok、Jackson等组件配置项目编译、打包、运行环境搭建标准Java Web项目结构。2面向对象设计定义学生实体类Student采用面向对象思想拆分功能模块封装图像处理、文件操作、人脸比对工具方法代码低耦合、易维护。3RESTful接口开发与跨域处理编写新增学生、人脸签到、查询学生列表、签到状态查询、重置签到等接口配置跨域支持实现前后端数据正常交互。4本地文件数据持久化不使用数据库采用JSON文件存储学生信息通过Jackson框架实现JSON序列化与反序列化结合IO流完成照片文件本地保存。5云端人脸API对接本地备用算法重难点对接阿里云人脸比对API、阿里云OSS对象存储完成图片云端上传与云端身份识别同时纯 Java实现多特征融合本地图像比对算法作为API故障时的降级方案保障服务可用。6图像预处理功能实现图片Base64编解码、尺寸缩放、RGB转灰度图、图像格式统一等预处理逻辑解决不同摄像头图片尺寸、格式不一致问题。7异常捕获与容错处理针对文件不存在、图片解析失败、参数缺失、IO异常等场景增加异常捕获完善日志输出提升系统稳定性。8项目打包与部署测试编写启动批处理脚本完成项目编译、打包、运行测试解决端口占用、文件路径、图片解析等线上问题。四、本人负责功能详解1. *面向对象设计简述本系统采用面向对象思想进行模块化设计划分实体类、业务控制类、工具方法。核心分为两大核心类1.启动与控制类CheckinServerSpring 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获取云端图片公网URL3.按照阿里云OpenAPI规范计算HMAC-SHA1接口签名调用人脸比对API4.解析云端返回的人脸相似度数值设置阈值判断签到结果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.jsonJSON 格式存储所有学生基础信息、照片路径、录入时间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技术栈的云端人脸识别系统。