友善提示
支持JAVA、Python、大数据专业、小程序、PHP、APP、ASP.NET、Node.js、Vue、STM32单片机及51单片机、数据分析、可视化、推荐系统等各类系统定做,您出题目,我们按需求定做。或者我们出相关的选题,并定做系统都支持…
博主简介
作者简介:Java领域优质创作者、优快云博客专家 、优快云内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业讲师以及同行交流合作
主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等
业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。
收藏点赞不迷路 关注作者有好处
文末获取源码
系统演示录像
文章底部名片,联系我获取更详细的演示视频
系统实际运行效果图


项目介绍
项目介绍
指纹识别技术作为一种生物特征识别技术,因其具有唯一性、稳定性、难以伪造等优点,在身份认证、门禁系统、安全支付、公共安全等领域得到了广泛应用。随着科技的不断进步,图像处理技术的提升使得指纹识别系统在准确性、速度和安全性方面都有了显著的提高。指纹识别技术的核心是提取和分析指纹图像中的特征信息。传统的指纹识别方法多依赖于人工提取特征,如细节点(minutiae)匹配、纹线方向等信息。然而,随着识别技术的需求不断增长,尤其是在低质量图像、不同环境条件下,如何提高指纹图像的处理精度、增强对复杂指纹图像的适应能力,成为了一个亟待解决的问题。基于图像处理的指纹识别算法设计成为了一个具有重要学术价值和实用意义的研究方向。图像处理技术可以在指纹图像的预处理、特征提取、特征匹配等方面起到至关重要的作用。特别是在指纹图像质量较差、指纹图案复杂或指纹与背景噪声干扰较强的情况下,如何利用先进的图像处理方法提高指纹识别系统的准确率和鲁棒性,是当前指纹识别技术发展中的一个关键问题
功能介绍
本设计基于MATLAB开发了一套指纹识别系统,集成了归一化、灰度化、二值化、特征提取和库内比对等功能。通过图形用户界面(GUI),实现指纹的采集、预处理、识别和结果展示。系统支持建立和管理指纹数据库,可快速识别输入指纹与库内指纹的匹配结果。
(1)归一化、灰度化、二值化,提高图像质量,便于特征提取;
(2)提取指纹的细节点特征,并与数据库中的指纹进行快速匹配;
(3)对比输入指纹与库内指纹,显示匹配结果和相关信息;
(4)通过GUI界面进行指纹采集、处理、识别及结果展示;
所用模块
本设计基于MATLAB平台,采用软件仿真与数据处理技术,旨在实现一个虚拟的办公室指纹打卡系统。通过MATLAB的图像处理工具箱,设计了指纹图像的采集、预处理、特征提取和比对算法,模拟指纹识别过程。系统通过构建指纹模板库,利用匹配算法进行身份验证。通过这一技术方案,本设计能够有效地实现虚拟指纹打卡系统的功能,提供一种低成本、易于实现的指纹识别方案。
数据库表设计(供参考)
1. 用户表(t_user)
- 描述: 存储用户的基本信息
- 字段:
字段名 数据类型 主键 是否为空 描述 user_id BIGINT 是 否 用户ID(唯一标识) username VARCHAR(50) 否 否 用户名 password VARCHAR(255) 否 否 密码 email VARCHAR(100) 否 否 邮箱 phone VARCHAR(20) 否 是 电话号码 status TINYINT 否 否 状态(0-禁用,1-启用) create_time DATETIME 否 否 创建时间 update_time DATETIME 否 否 更新时间
2. 角色表(t_role)
- 描述: 存储角色信息
- 字段:
字段名 数据类型 主键 是否为空 描述 role_id BIGINT 是 否 角色ID(唯一标识) role_name VARCHAR(50) 否 否 角色名称 description VARCHAR(255) 否 是 角色描述 create_time DATETIME 否 否 创建时间 update_time DATETIME 否 否 更新时间
核心代码展示
/**
* 商家
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/shangjia")
public class ShangjiaController {
private static final Logger logger = LoggerFactory.getLogger(ShangjiaController.class);
@Autowired
private ShangjiaService shangjiaService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private YonghuService yonghuService;
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.notIn("id",shangjia.getId())
.andNew()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if("".equals(shangjia.getShangjiaPhoto()) || "null".equals(shangjia.getShangjiaPhoto())){
shangjia.setShangjiaPhoto(null);
}
if(shangjiaEntity==null){
shangjiaService.updateById(shangjia);//根据id更新
return R.ok();
}else {
return R.error(511,"账户或者联系方式已经被使用");
}
}
/**
* 审核
*/
@RequestMapping("/shenhe")
public R shenhe(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
logger.debug("shenhe方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
// if(shangjia.getShangjiaYesnoTypes() == 2){//通过
// shangjia.setShangjiaTypes();
// }else if(shangjia.getShangjiaYesnoTypes() == 3){//拒绝
// shangjia.setShangjiaTypes();
// }
shangjia.setShangjiaShenheTime(new Date());//审核时间
shangjiaService.updateById(shangjia);//审核
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
ArrayList<ShangjiaEntity> list = new ArrayList<>();
for(Integer id:ids){
ShangjiaEntity shangjiaEntity = new ShangjiaEntity();
shangjiaEntity.setId(id);
shangjiaEntity.setShangjiaDelete(2);
list.add(shangjiaEntity);
}
if(list != null && list.size() >0){
shangjiaService.updateBatchById(list);
}
return R.ok();
}
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
if(shangjia==null || !shangjia.getPassword().equals(password))
return R.error("账号或密码不正确");
else if(shangjia.getShangjiaDelete() != 1)
return R.error("账户已被删除");
else if(shangjia.getShangjiaYesnoTypes() == 1)
return R.error("请等待审核结果");
else if(shangjia.getShangjiaYesnoTypes() == 3)
return R.error("账户审核已被拒绝,有疑问请联系服务人员");
// // 获取监听器中的字典表
String token = tokenService.generateToken(shangjia.getId(),username, "shangjia", "商家");
R r = R.ok();
r.put("token", token);
r.put("role","商家");
r.put("username",shangjia.getShangjiaName());
r.put("tableName","shangjia");
r.put("userId",shangjia.getId());
return r;
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody ShangjiaEntity shangjia){
// ValidatorUtils.validateEntity(user);
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if(shangjiaEntity != null)
return R.error("账户或者联系方式已经被使用");
shangjia.setShangjiaXingjiTypes(1);
shangjia.setNewMoney(0.0);
shangjia.setShangjiaYesnoTypes(1);
shangjia.setShangjiaDelete(1);
shangjia.setCreateTime(new Date());
shangjiaService.insert(shangjia);
return R.ok();
}
/**
* 重置密码
*/
@GetMapping(value = "/resetPassword")
public R resetPassword(Integer id){
ShangjiaEntity shangjia = new ShangjiaEntity();
shangjia.setPassword("123456");
shangjia.setId(id);
shangjiaService.updateById(shangjia);
return R.ok();
}
/**
* 忘记密码
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request) {
ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
if(shangjia!=null){
shangjia.setPassword("123456");
boolean b = shangjiaService.updateById(shangjia);
if(!b){
return R.error();
}
}else{
return R.error("账号不存在");
}
return R.ok();
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrShangjia(HttpServletRequest request){
Integer id = (Integer)request.getSession().getAttribute("userId");
ShangjiaEntity shangjia = shangjiaService.selectById(id);
if(shangjia !=null){
//entity转view
ShangjiaView view = new ShangjiaView();
BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
}
数据库脚本
CREATE TABLE `yonghu` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`yonghuming` varchar(200) NOT NULL COMMENT '用户名',
`mima` varchar(200) NOT NULL COMMENT '密码',
`xingming` varchar(200) DEFAULT NULL COMMENT '姓名',
`xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
`touxiang` varchar(200) DEFAULT NULL COMMENT '头像',
`shouji` varchar(200) DEFAULT NULL COMMENT '手机',
`shenfenzheng` varchar(200) DEFAULT NULL COMMENT '身份证',
PRIMARY KEY (`id`),
UNIQUE KEY `yonghuming` (`yonghuming`)
) ENGINE=InnoDB AUTO_INCREMENT=1616222324596 DEFAULT CHARSET=utf8mb3 COMMENT='用户';
CREATE TABLE `messages` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`userid` bigint NOT NULL COMMENT '留言人id',
`username` varchar(200) DEFAULT NULL COMMENT '用户名',
`content` longtext NOT NULL COMMENT '留言内容',
`reply` longtext COMMENT '回复内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1616222424131 DEFAULT CHARSET=utf8mb3 COMMENT='留言板';
CREATE TABLE `token` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`userid` bigint NOT NULL COMMENT '用户id',
`username` varchar(100) NOT NULL COMMENT '用户名',
`tablename` varchar(100) DEFAULT NULL COMMENT '表名',
`role` varchar(100) DEFAULT NULL COMMENT '角色',
`token` varchar(200) NOT NULL COMMENT '密码',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
`expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COMMENT='token表';
找我做程序,有什么保障?
我本人就是科技工作室负责人,程序大部分由博主亲自带领主导开发完成,页面设计、接口设计多由博主个人为广大需求者定制开发,如果需要其他功能,也可以联系我进行定制开发,找我们做的程序项目,都享有代码讲解服务,会议博主亲自讲解,可以全程录音录屏!这就是我们的保障,团队开发让您更省心省力,得到更大的保障!!!
联系我们
大家点赞、收藏、关注、评论 啦
查看👇🏻文章下方名片联系我即可~👇🏻
精彩专栏推荐订阅:在下方专栏
Python精品毕设案例《500套》
PHP精品毕设案例《500套》
Java精品实战案例《2600套》
微信小程序项目精品案例《500套》
基于大数据、数据分析大屏、爬虫精品毕设案例
2108

被折叠的 条评论
为什么被折叠?



