1. 项目概述与背景
这个基于微信小程序和SpringBoot的人脸识别考试系统,本质上解决的是传统线下考试管理中的三个核心痛点:身份核验效率低、考试过程监管难、数据统计滞后。我在实际开发中发现,市面上大多数考试系统要么功能过于简单,要么部署成本过高,而微信小程序+人脸识别的组合恰好能平衡便捷性与安全性。
系统采用前后端分离架构,前端使用微信小程序原生框架,后端基于SpringBoot+MyBatis实现。人脸识别模块我们选择了百度AI开放平台的人脸对比接口,实测在普通安卓机上识别准确率能达到98.7%,响应时间控制在1.2秒以内。特别要说明的是,我们通过小程序原生摄像头组件获取的人脸图像,会先经过本地压缩(分辨率降至640x480,质量系数0.7)再上传,这样既保证识别精度又节省流量。
关键设计决策:选择百度AI而非自建模型,主要考虑到高校客户对私有化部署接受度低,且第三方API的活体检测功能更成熟。实测发现,简单的摇头动作检测就能有效防范照片攻击。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心功能模块详解
2.1 考试管理子系统
管理员后台的测试管理界面(如图5-13)采用Element UI构建,核心字段包括:
- 测试名称:限制20个字符且禁止特殊符号
- 考试时长:以分钟为单位,支持小数(如1.5小时需输入90)
- 测试状态:包含"未开始/进行中/已结束"三种状态
技术实现上,这里有个值得分享的细节:我们使用Redis的过期键机制来自动更新考试状态。具体做法是:
java复制// 考试开始时设置Redis键
redisTemplate.opsForValue().set(
"exam:"+examId+":status",
"RUNNING",
examDuration,
TimeUnit.MINUTES
);
// 通过监听KeySpace通知处理状态变更
@RedisListener(pattern = "__keyevent@0__:expired")
public void handleExamTimeout(String key) {
if(key.startsWith("exam:") && key.endsWith(":status")) {
examService.upd
