基于 Spring Boot + SmartJavaAI SDK 的人脸识别管理系统,支持人脸注册、识别、查询和管理功能。
- 🎯 人脸识别登录:实时摄像头捕获,1:N 人脸匹配登录
- 👤 人脸注册:通过摄像头实时拍照注册新用户
- 🔍 人脸查询:
- 上传图片进行 1:N 人脸搜索
- 查看所有已注册人脸列表
- 📋 人脸管理:查看、删除已注册的人脸信息
- 🎨 现代化UI:炫酷的渐变背景 + 毛玻璃效果
- 💾 数据持久化:人脸图片和索引数据本地存储
特点:
- ✨ 炫酷的动态渐变背景(紫色-绿色渐变动画)
- 🎨 毛玻璃效果的卡片容器
- 🌟 浮动光球装饰效果
- 📹 实时摄像头预览窗口
- ⚡ 自动人脸识别(每秒一次)
- 🎯 识别状态实时显示
功能亮点:
- 📸 实时摄像头拍照
- 📝 用户信息表单(用户ID、角色)
- 🎭 一键拍照并注册
- ✅ 注册结果实时反馈
- 💾 自动保存人脸图片和特征
查询方式:
- 📤 方式一:上传图片进行 1:N 人脸搜索
- 支持拖拽上传
- 显示匹配结果和相似度
- 展示匹配用户信息
- 📋 方式二:查看所有已注册人脸列表
- 卡片式网格布局
- 显示人脸图片、用户ID、角色
- 支持快速浏览
管理功能:
- 🔄 刷新人脸列表
- 📊 网格展示所有已注册人脸
- 🗑️ 一键删除人脸数据
- 💡 删除确认提示
- 🔗 自动同步图片文件和索引数据
- 🎨 现代化UI:采用 Glassmorphism(毛玻璃拟态)设计风格
- 🌈 动态背景:多彩渐变背景持续动画,视觉效果出色
- 💫 交互动画:按钮悬停、卡片浮动等流畅动画效果
- 📱 响应式设计:完美适配桌面端和移动端
- 🎯 Tab切换:三大功能模块,切换流畅自然
- 🎭 光球装饰:背景浮动光球,增加科技感
- JDK:21+
- Maven:3.6+
- 浏览器:支持摄像头的现代浏览器(Chrome、Edge、Firefox等)
- 系统:Windows / Linux / macOS
由于模型文件较大(约355MB),需要单独下载:
| 模型文件 | 大小 | 用途 |
|---|---|---|
retinaface.pt |
105MB | 人脸检测模型 |
elasticface.pt |
250MB | 人脸识别模型 |
下载地址:
- 百度网盘:https://pan.baidu.com/s/10l22x5fRz_gwLr8EAHa1Jg?pwd=1234
- 提取码:
1234
下载后,将两个模型文件放在项目根目录下的 smart_java_ai/ 文件夹中:
Face_recognition/
├── smart_java_ai/ # 模型文件目录
│ ├── retinaface.pt # 人脸检测模型
│ ├── elasticface.pt # 人脸识别模型
│ └── pytorch/ # PyTorch运行库(自动下载)
└── smart_java_ai_face/ # 项目代码
打开文件:src/main/java/com/codeying/utils/FaceRecUtils.java
找到第 58 行左右的配置项,修改为你的模型文件路径:
// ========== 👇 重要配置:首次运行请修改 👇 ==========
/**
* 模型文件存储路径
* TODO: ⚠️ 首次运行前,请将此路径修改为你本地的模型文件目录
*/
public static String MODAL_PATH = "smart_java_ai/"; // 修改这里!
// ========== 👆 重要配置:首次运行请修改 👆 ==========路径配置示例:
// 使用相对路径(推荐,模型文件放在项目根目录的上一级)
public static String MODAL_PATH = "../smart_java_ai/";
// 使用绝对路径 - Windows
public static String MODAL_PATH = "D:/models/smart_java_ai/";
// 使用绝对路径 - Linux/Mac
public static String MODAL_PATH = "/home/user/models/smart_java_ai/";注意:路径末尾必须包含斜杠 / 或 \\
- 用 IDEA 打开项目
- 找到文件:
src/main/java/com/codeying/App.java - 右键点击 → Run 'App.main()'
- 等待启动完成(首次启动约30-60秒)
# 进入项目目录
cd smart_java_ai_face
# 编译打包
mvn clean package -DskipTests
# 运行应用
java -jar target/proj-boot-1.0-SNAPSHOT.jarcd smart_java_ai_face
mvn spring-boot:run启动成功后,在浏览器中访问:
首次访问:浏览器会请求摄像头权限,请点击"允许"。
- 访问管理中心,点击"人脸注册"选项卡
- 允许浏览器访问摄像头
- 输入用户ID和角色信息
- 点击"拍照并注册"按钮
- 系统自动拍照、提取特征并保存
数据存储:
- 人脸图片:
face-imgs/用户ID_时间戳.jpg - 索引信息:
../smart_java_ai/face_index.json
- 点击"人脸查询"选项卡
- 点击上传区域,选择包含人脸的图片
- 点击"开始搜索"
- 系统在人脸库中查找最匹配的人脸
- 显示匹配结果和相似度
- 在"人脸查询"选项卡中
- 点击"查看所有人脸"按钮
- 浏览所有已注册的人脸信息
- 查看人脸图片、用户ID、角色等信息
- 点击"人脸管理"选项卡
- 点击"刷新列表"加载所有人脸
- 找到要删除的人脸
- 点击"删除"按钮
- 确认后删除(同时删除图片文件和索引记录)
- 访问首页:http://localhost:8080/
- 系统自动启动摄像头
- 将人脸对准摄像头
- 系统每秒自动识别一次
- 识别成功后跳转到成功页面
smart_java_ai_face/
├── src/main/
│ ├── java/com/codeying/
│ │ ├── App.java # 启动类(含模型检查)
│ │ ├── config/
│ │ │ └── WebMvcConfig.java # Web配置(静态资源)
│ │ ├── controller/
│ │ │ ├── IndexController.java # 人脸识别登录控制器
│ │ │ └── FaceManageController.java # 人脸管理控制器
│ │ ├── service/
│ │ │ └── ImageStorageService.java # 图片存储服务
│ │ ├── entity/
│ │ │ ├── FaceInfo.java # 人脸信息实体
│ │ │ ├── FaceRegisterRequest.java # 注册请求VO
│ │ │ ├── FaceSearchResponse.java # 搜索响应VO
│ │ │ └── ApiResponse.java # 统一API响应
│ │ └── utils/
│ │ └── FaceRecUtils.java # 人脸识别工具类★
│ └── resources/
│ ├── templates/
│ │ ├── hello.html # 人脸识别登录页
│ │ ├── manage.html # 管理中心页面★
│ │ └── success.html # 识别成功页
│ ├── application.properties # 应用配置
│ └── iu_*.jpg # 示例图片
├── face-imgs/ # 人脸图片存储目录
│ └── .gitkeep
├── pom.xml # Maven配置
└── README.md # 本文件
重点文件(标★):
FaceRecUtils.java:需要配置MODAL_PATHmanage.html:管理中心前端页面
| 接口 | 方法 | 说明 | 请求参数 |
|---|---|---|---|
/face/manage |
GET | 访问管理页面 | - |
/face/register |
POST | 注册新人脸 | {base64Image, userId, role} |
/face/search |
POST | 搜索人脸(1:N) | {base64Image} |
/face/list |
GET | 获取所有人脸列表 | - |
/face/detail/{faceId} |
GET | 获取人脸详情 | 路径参数:faceId |
/face/delete/{faceId} |
DELETE | 删除人脸 | 路径参数:faceId |
| 接口 | 方法 | 说明 | 请求参数 |
|---|---|---|---|
/ |
GET | 识别登录页 | - |
/getInfoByFace |
POST | 人脸识别 | {base64String} |
/success |
GET | 识别成功页 | - |
注册人脸:
curl -X POST http://localhost:8080/face/register \
-H "Content-Type: application/json" \
-d '{
"base64Image": "data:image/jpeg;base64,...",
"userId": "user001",
"role": "员工"
}'搜索人脸:
curl -X POST http://localhost:8080/face/search \
-H "Content-Type: application/json" \
-d '{
"base64Image": "data:image/jpeg;base64,..."
}'获取人脸列表:
curl http://localhost:8080/face/list| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 3.5.0 | 后端框架 |
| JDK | 21 | Java开发工具包 |
| Thymeleaf | 3.x | 模板引擎 |
| SmartJavaAI Face SDK | 1.0.24 | 人脸识别SDK |
| PyTorch | 2.5.1 (CPU) | 深度学习框架 |
| RetinaFace | - | 人脸检测模型 |
| ElasticFace | - | 人脸识别模型 |
| SQLite | - | 向量数据库(人脸特征存储) |
| HTML/CSS/JS | - | 前端技术 |
问题:
❌ 错误:找不到模型文件 retinaface.pt
解决方法:
- 确认已下载模型文件(百度网盘链接见上方)
- 检查文件是否放在正确的目录
- 修改
FaceRecUtils.java中的MODAL_PATH配置
问题:
NotAllowedError: Permission denied
解决方法:
- 点击浏览器地址栏左侧的锁图标
- 允许摄像头权限
- 刷新页面
- 注意:某些浏览器在非HTTPS下可能限制摄像头访问
问题:访问 http://localhost:8080/face/manage 显示 404
解决方法:
- 确认应用已成功启动(查看控制台日志)
- 检查端口是否正确(默认8080)
- 不要直接在IDE中打开HTML文件,必须通过浏览器访问
localhost:8080
问题:启动需要很长时间
原因:首次启动需要:
- 下载 PyTorch 运行库(约300MB)
- 加载人脸识别模型
解决方法:
- 耐心等待30-60秒
- 后续启动会快很多(模型已缓存)
问题:
OutOfMemoryError: Java heap space
解决方法: 增加JVM内存:
java -Xmx2048m -jar target/proj-boot-1.0-SNAPSHOT.jar问题:识别结果不准确或无法识别
优化建议:
- 光线充足:确保拍照环境光线良好
- 正面拍摄:尽量正对摄像头
- 距离适中:与摄像头保持30-50cm
- 高质量图片:使用清晰的人脸图片注册
- 调整阈值:在代码中修改相似度阈值(默认0.8)
- 查看控制台日志
- 参考官方文档:http://doc.smartjavaai.cn/
- 提交 Issue:GitHub Issues
# 克隆项目
git clone https://github.com/IceYuanyyy/Smart-Java-AI-Face.git
# 进入目录
cd Smart-Java-AI-Face
# 编译
mvn clean compile
# 运行
mvn spring-boot:run编辑 src/main/resources/application.properties:
server.port=8080 # 修改为你想要的端口logging.level.com.codeying=DEBUG本项目采用 MIT License 开源协议。
- SmartJavaAI:提供强大的人脸识别SDK
- PyTorch:深度学习框架
- Spring Boot:快速开发框架
- B站UP主: 学长敲代码
IceYuanyyy
如果这个项目对你有帮助,欢迎 Star ⭐️
如有问题或建议,欢迎通过以下方式联系:
- 📧 Email: [email protected] / [email protected]
- 💬 GitHub Issues: 提交Issue
查看 CHANGELOG.md 了解版本更新记录。
Happy Coding! 🎉



