文章目录

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

基于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();}

【总结】

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

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

  1. [附源码]Nodejs计算机毕业设计基于Java的班主任管理系统的实现Express(程序+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...

  2. 人脸识别管理系统php源码,人脸识别系统源代码

    [实例简介] 人脸识别系统源代码,包含有.exe可执行文件,可以运行 . [实例截图] [核心代码] 13cb2a86b907 └── 第13章 人脸检测源码FaceDetection ├── Deb ...

  3. [附源码]Nodejs计算机毕业设计基于Java的健身房管理系统Express(程序+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...

  4. [附源码]Nodejs计算机毕业设计基于java学科竞赛管理系统Express(程序+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...

  5. [附源码]计算机毕业设计基于Java的员工管理系统Springboot程序

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  6. ssm+JSP计算机毕业设计基于java的信访管理系统64esx【源码、程序、数据库、部署】

    项目运行 项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...

  7. ssm+jsp计算机毕业设计基于java的信访管理系统64esx(程序+lw+源码+远程部署).

    项目运行 项目含有源码(见文末).文档.程序.数据库.配套开发软件.软件安装教程 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ E ...

  8. Python-Django毕业设计基于Java的班主任管理系统的实现(程序+Lw)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. [附源码]java+ssm计算机毕业设计基于java的信访管理系统64esx(源码+程序+数据库+部署)

    项目运行 项目含有源码(见文末).文档.程序.数据库.配套开发软件.软件安装教程 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ E ...

  10. Python-Django毕业设计基于Java家庭财务管理系统(程序+Lw)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...

最新文章

  1. Centos7上安装docker 详细教程
  2. 在SLES-11-SP1-i586上搭建apache+php环境
  3. synchronized不能锁静态变量_肝了一下午的 Synchronized 解析!
  4. 用C#写MSN机器人
  5. Thinkphp kindeditor 内容转义
  6. kafka + storm 错误 Async loop died
  7. 2021年中国再生纱市场趋势报告、技术动态创新及2027年市场预测
  8. Exchange 2016之用EMS配置全局OWA语言和时区设置
  9. 中查询每个班成绩前三_重磅 2020卫生资格中初级考试成绩今天公布了
  10. mysql 注入攻击与防御_防御SQL注入和XSS攻击
  11. 米家推出新款石头机器人,扫拖一体,指哪去哪!
  12. ie浏览器透明背景设置
  13. 无线网络经常掉线?默认网关不可用?试试这个办法
  14. excel表格操作之数据分级统计
  15. 用python监控互联网网速
  16. Dzz1.3测试,增加IM、桌面协作、多选等。修缮问题后发布下载
  17. 机器学习在重度抑郁症患者中的应用:从分类到治疗结果预测
  18. 建立团队信任的五种方法
  19. WebRTC IOS视频硬编码流程及其中传递的CVPixelBufferRef
  20. 课题申请的技术指标是什么

热门文章

  1. 常见c语言语法错误,C语言常见语法错误.doc
  2. 小乌龟与git配置使用
  3. 安卓system镜像分区_安卓9.0 VIVO X23手机解锁方案
  4. Matlab绘制曲线
  5. 软件方法上竞赛自测题答案
  6. C盘清理工具Dism++教程
  7. linux中备份mysql数据库命令_linux备份mysql数据库命令
  8. java hssfworkbook 乱码_java各种乱码汇总
  9. java语言程序设计第三版沈泽刚课后答案_Java语言程序设计 (第3版) 学习指导与习题解析...
  10. 平面设计中的网格系统pdf_哪些设计师必看平面设计书籍,写给设计师