package com.face.service.impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.face.bean.Face;
import com.face.bean.result.FaceResult;
import com.face.mapper.FaceMapper;
import com.face.server.FaceContrastServer;
import com.face.service.FaceService;
import com.face.utils.JwtUtils;
import com.face.utils.TimeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author typsusan
* @description 针对表【face】的数据库操作Service实现
* @createDate 2022-07-17 03:33:50
*/
@Service
public class FaceServiceImpl extends ServiceImpl<FaceMapper, Face>
implements FaceService {
@Autowired
FaceContrastServer faceContrastServer;
@Override
public FaceResult vef(String imageBase) {
imageBase = JSONUtil.parseObj(imageBase).getStr("imageBase");
List<Face> faceList = lambdaQuery().orderByDesc(Face::getVefNum).list();
FaceResult faceState = null;
// 如果人脸库为空,则第一次登录为录入人脸
if (faceList.size() == 0){
return initFace(imageBase);
}else {
int faceLength = faceList.size();
for (Face face : faceList) {
FaceResult faceResult = faceContrastServer.faceContrast(face.getFaceBase(), imageBase);
// 是否比对成功
if (faceResult.getCode() == FaceResult.SUCCESS_CODE ){
// 相似度是否大于80
if (faceResult.getScore() > FaceResult.SATISFY_SCORE){
if (face.getFaceStatus() == 0){
// 成功
lambdaUpdate().set(Face::getVefNum,face.getVefNum()+1).eq(Face::getFid,face.getFid()).update();
faceResult.setMsg(TimeUtils.timeQuantum()+"好,"+face.getFaceName());
faceResult.setName(face.getFaceName());
Map<String,String> map = new HashMap<>();
map.put("score",String.valueOf(faceResult.getScore()));
map.put("faceName",faceResult.getName());
faceResult.setToken(JwtUtils.genereteToken(map));
return faceResult;
}else {
// 失败 人脸被禁用
lambdaUpdate().set(Face::getVefNum,face.getVefNum()+1).eq(Face::getFid,face.getFid()).update();
faceResult.setMsg(face.getFaceName()+",当前人脸被禁用");
faceResult.setName(face.getFaceName());
faceResult.setCode(FaceResult.FORBIDDEN_FACE);
faceState = faceResult;
// 就算上一张人脸被禁用还得往下执行
// 可能当前用户存在多张人脸,
if (faceLength == 1){
return faceResult;
}
faceLength --;
}
}else {
// 人脸库没有检测到人脸
if (faceLength == 1){
// 判断当前人脸是否被禁用,如被禁用,提示被禁用
// 禁用优先级大于 没有检测到人脸
return faceState != null?faceState:FaceResult.error(FaceResult.NOT_FOUND_FACE,"人脸库不存在该人脸",faceResult.getScore());
}
faceLength --;
}
}else {
// 接口返回异常
return faceResult;
}
}
}
// 空异常
return FaceResult.error(FaceResult.NULL_ERROR,"空指针异常");
}
public FaceResult initFace(String imageBase){
FaceResult faceResult = new FaceResult();
Face face = new Face();
face.setFaceBase(imageBase);
face.setCreateTime(new Date());
face.setVefNum(0);
face.setFaceName("admin");
face.setFaceStatus(0);
boolean save = save(face);
faceResult.setCode(FaceResult.INIT_FACE);
faceResult.setMsg("人脸初始化"+(save?"成功":"失败")+","+(save?"请验证登录":"请稍后再试"));
faceResult.setName(face.getFaceName());
return faceResult;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于前后端分离Web端项目,主要实现了网页版的人脸登录,通过调取前端摄像头拍照,传入后台进行跟数据库人脸库的相似度比对
共29个文件
java:21个
xml:3个
sql:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 83 浏览量
2023-05-12
11:32:51
上传
评论
收藏 33KB ZIP 举报
温馨提示
FACE-UI 基于前后端分离Web端项目,主要实现了网页版的人脸登录,通过调取前端摄像头拍照,传入后台进行跟数据库人脸库的相似度比对,技术的用点:Springboot,Mysql,JWT,VUE 2.X 等等技术实现,主要功能点:人脸列表CRUD,日志列表CRUD,基于自建人脸库通过base64编码方式存储人脸图片,通过调用腾讯云人脸对比API场景实现,人脸登录,网页版人脸登录,Web端人脸登录
资源推荐
资源详情
资源评论
收起资源包目录
face-easy-1.0X.zip (29个子文件)
face-easy-1.0X
mvnw.cmd 7KB
sql
face.sql 858B
pom.xml 4KB
src
test
java
com
face
FaceEasyApplicationTests.java 211B
main
resources
mapper
FaceMapper.xml 1KB
FaceVefLogMapper.xml 795B
application.yml 712B
java
com
face
mapper
FaceMapper.java 313B
FaceVefLogMapper.java 345B
annotation
aspect
FaceAspect.java 1KB
FaceLog.java 177B
controller
FaceVefLogController.java 2KB
FaceController.java 3KB
utils
JwtUtils.java 2KB
TimeUtils.java 544B
FaceEasyApplication.java 397B
service
FaceService.java 445B
FaceVefLogService.java 318B
impl
FaceServiceImpl.java 5KB
FaceVefLogServiceImpl.java 536B
server
FaceContrastServer.java 2KB
config
WebConfig.java 2KB
FaceConfig.java 2KB
MybatisConfig.java 1KB
bean
Face.java 1KB
FaceVefLog.java 972B
result
FaceResult.java 2KB
LICENSE 11KB
mvnw 10KB
共 29 条
- 1
资源评论
- qq_331586182023-07-14资源很受用,资源主总结的很全面,内容与描述一致,解决了我当下的问题。
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6650
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功