毕业设计 - 基于JAVA人脸识别管理系统(人脸搜索与人脸库管理)

article/2025/10/9 20:12:00

文章目录

  • 【背景/简介】
  • 【技术框架】
  • 【核心开发】
  • 【功能展示】
    • 一、人脸库管理
    • 二、人脸识别记录管理
  • 【核心代码】
  • 【总结】

基于JAVA的人脸识别管理系统作品分享一下,希望能帮助到有需要的同学们。

【背景/简介】

人脸搜索与人脸库管理主要用在人脸通用场景,采集照片与底库照片主要为生活照,通常通过手机、电脑、面板机等设备采集。常用于考勤、登录人脸认证等场景。

基于JAVA的人脸识别管理系统由人脸库、人脸识别认证记录两大模块组成,整体简单实用,构成了人脸识别管理系统的核心功能。本篇文章采用百度API为大家展示基于JAVA实现的人脸识别管理系统功能,有需者可参考。

【技术框架】

系统采用的技术是基于JAVA语言开发的后台管理系统,前后端不分离,数据库采用mysql。技术栈如下:
一、后端技术:SpringBoot2.0 + mybatis + Shiro
二、前端技术:Bootstrap + thymeleaf

【核心开发】

一、数据库设计
核心表包括人脸库管理表、人脸识别记录表、人脸识别匹配明细表。因为人脸识别可能有多张图片匹配成功,故需要使用人脸识别记录匹配明细表。具体字段如下:

在这里插入图片描述
其中,人脸库结构由人脸库、用户组、用户、用户下的人脸组成,层级关系如下所示:


|- 人脸库(appid)|- 用户组一(group_id)|- 用户01(uid)|- 人脸(faceid)|- 用户02(uid)|- 人脸(faceid)|- 人脸(faceid)........|- 用户组二(group_id)|- 用户组三(group_id)....

设计的库表详细字段如下:

(1)人脸库表(sys_faceLibrary)

create table sys_faceLibrary
(id       bigint(20)      not null auto_increment    comment 'yID',group_id  varchar(50)     not null                   comment '用户组id',user_id     varchar(50)     not null                   comment '用户id',url    varchar(2000)     not null                   comment '图片',user_info     varchar(50)     not null                   comment '用户资料',status        char(1)         default '0'                  comment '状态(0正常 1停用)',create_by     varchar(64)     default ''                 comment '创建者',create_time   datetime                                   comment '创建时间',update_by     varchar(64)     default ''             comment '更新者',update_time   datetime                                   comment '更新时间',remark        varchar(500)    default null               comment '备注',primary key (id)
) engine=innodb comment = '人脸库';

(2)人脸识别记录表(sys_faceRecord)

create table sys_faceRecord
(id       bigint(20)      not null auto_increment    comment 'yID',url    varchar(2000)     not null                   comment '上传图片',face_token     varchar(250)     default null                   comment '人脸标志',result     varchar(250)     default null                   comment '识别结果(成功、失败)',status        char(1)         default '0'                  comment '状态(0正常 1停用)',create_by     varchar(64)     default ''                 comment '创建者',create_time   datetime                                   comment '创建时间',update_by     varchar(64)     default ''             comment '更新者',update_time   datetime                                   comment '更新时间',remark        varchar(500)    default null               comment '备注',primary key (id)
) engine=innodb comment = '人脸识别记录';

(3)人脸识别记录匹配明细(sys_faceRecordDetail)

create table sys_faceRecordDetail
(id       bigint(20)      not null auto_increment    comment 'yID',recordId  bigint(20)     not null                   comment '识别记录id',group_id  varchar(50)     not null                   comment '识别的用户组id',user_id     varchar(50)     not null                   comment '识别的用户id',url    varchar(2000)     default null                   comment '识别的图片',score    varchar(250)     not null                   comment '识别的用户匹配得分',user_info     varchar(50)     not null                   comment '用户资料',status        char(1)         default '0'                  comment '状态(0正常 1停用)',create_by     varchar(64)     default ''                 comment '创建者',create_time   datetime                                   comment '创建时间',update_by     varchar(64)     default ''             comment '更新者',update_time   datetime                                   comment '更新时间',remark        varchar(500)    default null               comment '备注',primary key (id)
) engine=innodb comment = '人脸识别记录匹配明细';

【功能展示】

一、人脸库管理

人脸库管理主要调用百度API的人脸注册接口:功能为向人脸库中添加人脸,并在本地库表 - 人脸库表(sys_faceLibrary)存储对应的相关资料,包括新增、修改、删除功能。

(1)新增/修改功能,上传人脸库图片后可以新增到人脸库里面

在这里插入图片描述
在这里插入图片描述

如果上传的是人脸图片,则上传成功。如果不是人脸图片,则会提示图片没有人脸,如下:

在这里插入图片描述

(2)人脸库列表展示功能

在这里插入图片描述

上传成功后,可以到百度api后台查看数据,可以发现也有对应的数据了,如下:

在这里插入图片描述

点击进去后可以看到上传的明细图片:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

二、人脸识别记录管理

人脸库管理主要调用百度API的人脸搜索接口:也称为1:N识别,在指定人脸集合中,找到最相似的人脸,并在本地库表 - 人脸识别记录表(sys_faceRecord)、人脸识别记录匹配明细表(sys_faceRecordDetail)存储对应的相关资料。因为人脸识别可能有多张图片匹配成功,故需要使用人脸识别记录匹配明细表(sys_faceRecordDetail)。

(1)上传功能:上传人脸图片后与人脸库的图片集合进行对比,搜索出最相似的人脸返回,如果有多张图片匹配,则返回多张。

在这里插入图片描述

(2)人脸识别匹配列表展示:记录上传的图片、返回的人脸标志、创建时间以及识别结果,结果分为识别成功、未找到匹配用户两种结果。

在这里插入图片描述

针对识别成功的记录,可以点击每行前面的+号展开查看匹配的库表图片明细,包括匹配库表的用户组id、用户id、识别的用户图片、识别的用户匹配得分,具体如下:

在这里插入图片描述
在这里插入图片描述

可以看到上面匹配的用户分数都是100分,说明是识别成功了。

【核心代码】

(1)获取API访问token

 /*** 获取API访问token* 该token有一定的有效期,需要自行管理,当失效时需重新获取.* @param ak - 百度云官网获取的 API Key* @param sk - 百度云官网获取的 Securet Key* @return assess_token 示例:* "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"*/public static String getAuth(String ak, String sk) {// 获取token地址String authHost = "https://aip.baidubce.com/oauth/2.0/token?";String getAccessTokenUrl = authHost// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + ak// 3. 官网获取的 Secret Key+ "&client_secret=" + sk;try {URL realUrl = new URL(getAccessTokenUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.err.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/System.err.println("result:" + result);JSONObject jsonObject = (JSONObject) JSON.parse(result);//JSONObject jsonObject = new JSONObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {System.err.printf("获取token失败!");e.printStackTrace(System.err);}return null;}

(2)人脸注册功能(含api+本地接口)

/***  人脸注册*/public String add(SysFacelibrary sysFacelibrary) {// 请求urlString url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";try {Map<String, Object> map = new HashMap<>();map.put("image",sysFacelibrary.getUrl());map.put("group_id", sysFacelibrary.getGroupId());map.put("user_id", sysFacelibrary.getUserId());map.put("user_info", sysFacelibrary.getUserInfo());map.put("liveness_control", "NONE");map.put("image_type", "BASE64");map.put("quality_control", "LOW");map.put("action_type", "REPLACE");String param = GsonUtils.toJson(map);// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。String accessToken = getAuth();String result = HttpUtil.post(url, accessToken, "application/json", param);System.out.println(result);return result;} catch (Exception e) {e.printStackTrace();}return null;}
/*** 新增保存人脸库*/@RequiresPermissions("system:faceLibrary:add")@Log(title = "人脸库", businessType = BusinessType.INSERT)@PostMapping("/add")@ResponseBodypublic AjaxResult addSave(SysFacelibrary sysFacelibrary) throws Exception{String picUrl = sysFacelibrary.getUrl();// 上传文件路径,需要处理成本地能下载的String filePath = RuoYiConfig.getUploadPath();String upload = picUrl.substring(picUrl.indexOf("upload")+6);String downFilePath = filePath + upload;//人脸注册String image = Base64Util.encode(FileUtil.readFileByBytes(downFilePath));sysFacelibrary.setUrl(image);String result = sysFaceService.add(sysFacelibrary);System.out.println("返回结果="+result);sysFacelibrary.setUrl(picUrl);//判断结果,填写JSONObject jsonObject =  JSON.parseObject(result);Integer code = (Integer)jsonObject.get("error_code");String error_msg = (String)jsonObject.get("error_msg");if(code == 0){sysFacelibraryService.insertSysFacelibrary(sysFacelibrary);}else {return AjaxResult.error(code+": "+error_msg);}return AjaxResult.success();}

(3)人脸搜索功能(含api+本地接口)

public  String faceSearch(String image) {// 请求urlString url = "https://aip.baidubce.com/rest/2.0/face/v3/search";try {Map<String, Object> map = new HashMap<>();map.put("image_type", "URL");*/map.put("image", image);map.put("image_type", "BASE64");map.put("liveness_control", "NONE");//默认是A_1先map.put("group_id_list", "A_1");map.put("quality_control", "LOW");map.put("match_threshold", "80");String param = GsonUtils.toJson(map);// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。String accessToken = getAuth();String result = HttpUtil.post(url, accessToken, "application/json", param);System.out.println(result);return result;} catch (Exception e) {e.printStackTrace();}return null;}
/*** 新增保存人脸识别记录*/@RequiresPermissions("system:faceRecord:add")@Log(title = "人脸识别记录", businessType = BusinessType.INSERT)@PostMapping("/add")@ResponseBodypublic AjaxResult addSave(SysFacerecord sysFacerecord) throws Exception{String picUrl = sysFacerecord.getUrl();// 上传文件路径,需要处理成本地能下载的String filePath = RuoYiConfig.getUploadPath();String upload = picUrl.substring(picUrl.indexOf("upload")+6);String downFilePath = filePath + upload;String image = Base64Util.encode(FileUtil.readFileByBytes(downFilePath));String faceSearch = sysFaceService.faceSearch(image);//判断结果,填写JSONObject jsonObject =  JSON.parseObject(faceSearch);Integer code = (Integer)jsonObject.get("error_code");String error_msg = (String)jsonObject.get("error_msg");if(code == 0){sysFacerecord.setResult("识别成功");}else if(code == 222207){sysFacerecord.setResult("未找到匹配的用户");  }else {sysFacerecord.setResult(code+": "+error_msg);}sysFacerecordService.insertSysFacerecord(sysFacerecord);return AjaxResult.success();}

【总结】

人脸识别管理系统主要是围绕人脸库管理和人脸识别认证两个核心功能进行拓展,并进行一系列的校验控制,可以容易上手,值得采取。


http://chatgpt.dhexx.cn/article/Nb9Byh1f.shtml

相关文章

定位基本方法 3

节点定位方法 3. 基于移动 BS 的定位 在基于静态信标节点的定位方法中&#xff0c;定位系统的定位精度与静态信标节点的部署密度和质量直接相关。为了获得好的定位精度&#xff0c;就需要在部署区域中放置大量的静态信标节点&#xff0c;这势必会导致定位成本的大幅上升。为此…

定位基本方法 1

节点定位方法 1. 节点定位的计算 在 WSNs 的定位中&#xff0c;未知节点通过一定的技术和方法能够获得定位自身所需的坐标、角度或距离信息&#xff0c;从而利用节点位置的计算方法计算自身位置。下面我们将介绍几种较为典型的位置计算方法&#xff1a;三边测量法、三角测量法…

浅谈自适应滤波器---(快速RLS算法)

在上一篇博客中&#xff08;浅谈自适应滤波器&#xff09;我给大家介绍了关于自适应滤波器的一些入门级的知识&#xff0c;并分析了常规RLS算法单次迭代的计算量级为O[N2]&#xff0c;当阶数N增大时相应的计算量显著增大&#xff0c;为了将计算量级降低到O[N]&#xff0c;人们提…

图像处理自适应滤波

图像处理基础(2)&#xff1a;自适应中值滤波器(基于OpenCV实现) 标签&#xff1a; opencv滤波器 2017-02-08 19:44 986人阅读 评论(0) 收藏 举报 分类&#xff1a; DIP&#xff08;8&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载…

自适应滤波器及其应用 - 自适应噪声抵消器

传统IIR和FIR滤波器在处理输入信号的过程中滤波器参数固定&#xff0c;当环境发生变化时&#xff0c;滤波器无法实现原先设定的目标。自适应滤波器根据当前自身的状态和环境调整滤波器权系数。 1 自适应滤波器理论 其中&#xff0c;x(n)是输入信号&#xff0c;y(n)是输出信号&…

自适应数字滤波器

文章目录 前言一、自适应滤波器的特点和构成二、最陡下降法三、最小均方算法(LMS)总结 前言 本文的主要内容是自适应数字滤波器的介绍&#xff0c;包含其特点与构成、最陡下降法、最小均方算法以及最小二乘算法等内容。 一、自适应滤波器的特点和构成 自适应滤波器的特点&…

浅谈自适应滤波器---(自适应陷波器)

陷波器顾名思义就是对特定频率的信号有着很强的衰减的滤波器&#xff0c;也即阻带带宽极窄的带阻滤波器。在传统的数字陷波器设计中&#xff0c;为了能使某一频率信号得到足够大的衰减&#xff0c;通常的做法就是把阶数选的足够高来达到很大的衰减&#xff1b;但同时计算量也变…

自适应滤波器及LMS自适应算法的理解

分享一篇以前写现代信号处理的课程论文。 ————————————————————

自适应中值滤波器和自适应局部(均值)滤波器的设计 python+matlab各实现

要求是&#xff1a;自适应中值滤波器和自适应均值滤波器的设计&#xff0c;分别使用python和matlab去实现 一.原理 1.自适应中值滤波器 2.自适应局部滤波器&#xff0c;也叫自适应均值滤波器 二.设计流程 1.自适应中值滤波器 ①生成椒盐噪声 利用rand()函数生成[0,1]的随…

自适应滤波去噪

自适应滤波器具有在未知环境下良好的运作并跟踪输入统计量随时间变化的能力。尽管对于不同的应用有不同的实现结构&#xff0c;但是他们都有一个基本的特征&#xff1a;输入向量X(n)和期望响应d(n)被用来计算估计误差e(n)&#xff0c;即e(n)d(n)-X(n)&#xff0c;并利用此误差信…

自适应滤波(LMS,RLS)

1.背景及相关知识介绍 自适应滤波存在于信号处理、控制、图像处理等许多不同领域&#xff0c;它是一种智能更有针对性的滤波方法&#xff0c;通常用于去噪。 图中x&#xff08;j&#xff09;表示 j 时刻的输入信号值&#xff0c;y&#xff08;j&#xff09;表示 j 时刻的输出信…

自适应滤波

自适应阵列处理是一种空间滤波技术&#xff0c;它包含空间阵列和自通应处理两个部分。根据空时等效性原理&#xff0c;从理论上来讲&#xff0c;时域的各种统计自适应信号处理技术均可应用于空域的自适应阵列处理 自适应滤波已在时域处理中广为应用&#xff0c;其实现可以来用…

matlab编程实现自适应均值滤波和自适应中值滤波

matlab编程实现自适应滤波器 一、自适应均值滤波器1. 原理部分&#xff1a;2. 程序代码3. 结果对比 二、自适应中值滤波1. 原理部分2.程序代码3. 结果对比 一、自适应均值滤波器 1. 原理部分&#xff1a; 加入噪声&#xff1a; 原理&#xff1a; 将图片灰度化&#xff0c;然后…

自适应滤波器之横向滤波器

本文对横向滤波器作以介绍&#xff0c;如有表述不当之处欢迎批评指正。欢迎任何形式的转载&#xff0c;但请务必注明出处。 目录 1. 横向滤波器1.1. 概念1.2. 举例 2. 参考文献 1. 横向滤波器 1.1. 概念 横向滤波器&#xff08;transversal filter&#xff09;&#xff0c;也…

自适应中值滤波及实现

前言 无意中看到了一篇比较老的论文&#xff0c;Adaptive median filters: new algorithms and results。感兴趣的可以下载下来看看。主要就是提出了一种自适应中值滤波算法&#xff0c;这个算法是很经典的中值滤波算法的改进版本&#xff0c;自动选择滤波器的大小&#xff0c…

浅谈自适应滤波器

在通常的滤波场合中&#xff0c;从频域的角度进行滤波&#xff0c;其相关的理论已经相当的成熟&#xff0c;只要给出相应的设计指标就可以很方便的设计出满足要求的滤波器。然而在更一般的情况下&#xff0c;人们所需要的滤波器工作的环境是时变的&#xff0c;这就导致事先已经…

自适应滤波原理

在网上&#xff0c;看到一篇不错的自适应滤波原理讲解的文章&#xff0c;原文网址为&#xff1a;自适应滤波原理简介 全文包括&#xff1a; 1. 自适应滤波器简介 2. 自适应干扰抵消原理 3. 自适应滤波原理 4. 最小均方&#xff08;LMS&#xff09;算法 5. Matlab实现 一、自适…

自适应滤波算法综述

我要讲的几种方法 绪论自适应滤波的基本原理自适应滤波算法自适应滤波算法种类最小均方误差算法&#xff08;LMS&#xff09;递推最小二乘算法&#xff08;RLS&#xff09;变换域自适应滤波算法仿射投影算法其他 自适应滤波算法性能评价 自适应滤波的Matlab仿真正弦信号加噪的L…

Java反射机制你还不会?那你怎么看Spring源码

文章目录 1.Java代码在计算机中经历的阶段&#xff1a;三个阶段2.Java识别类和对象信息的两种方式3.什么是反射4.获取Class对象的方式5.Class对象的功能6.通过反射操作类中的成员变量、构造函数、方法7.案例8.反射的优缺点 1.Java代码在计算机中经历的阶段&#xff1a;三个阶段…

Java 反射 理解

Java 反射 定义 Java的反射&#xff08;reflection&#xff09;机制是指在程序的运行状态中&#xff0c;可以构造任意一个类的对象&#xff0c;可以了解任意一个对象所属的类&#xff0c;可以了解任意一个类的成员变量和方法&#xff0c;可以调用任意一个对象的属性和方法。 简…