项目里考勤打卡需要换成人脸识别,主要思路:超级管理员在员工管理处上传员工相对清晰的五官电子一寸照片。然后员工登录自己的账号,在考勤页面点击打卡,浏览器开启电脑摄像头,采集员工脸部信息照片,并且将这个照片与员工之前的电子照进行比对比。
演示视频:【学生考勤系统单人脸采集和多人脸识别和二维码扫描识别身份签到考勤系统展示-杰凡IT】 https://www.bilibili.com/video/BV1fq4y1L77p?p=2&share_source=copy_web&vd_source=ed0f04fbb713154db5cc611225d92156

先来看看实现的效果吧



首先需要百度申请接口,具体这里不在赘述,百度里申请个人开发,人工智能,人脸识别里新建一个应用,可以拿到三个参数, 项目只用到了两个 API Key 和clientSecret

在调用接口之前,需要获取AccessToke,AccessToke有效期是一个月,然后根据AccessToke去调用人脸匹配接口。

第一步:获取AccessToke,这个百度有api文档,里面也写得很轻清楚了,需要API Key 和clientSecret去获取得到,代码如下:

public class AuthService {public static String getAuth() {// 官网获取的 API Key 更新为你注册的String clientId = " ";// 官网获取的 Secret Key 更新为你注册的String clientSecret = " ";return getAuth(clientId, clientSecret);}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 = 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;}public static void main(String[] args) {System.out.println(getAuth());}

第二部,调用照片匹配的接口并封装,代码如下:
参数说明img1和img2都是base64的格式,把两张需要对比的照片穿进去,返回值大于80说明比配成功,否则不是同一个人哦

/**
* 人脸对比
*/
public class FaceMatch {public static String faceMatch(String img1,String img2) {// 请求urlString url = "https://aip.baidubce.com/rest/2.0/face/v3/match";try {List pli=new ArrayList();Map<String, Object> map = new HashMap<>();map.put("image", img1);map.put("image_type", "BASE64");map.put("face_type", "LIVE");map.put("quality_control", "LOW");map.put("liveness_control", "HIGH");pli.add(map);map = new HashMap<>();map.put("image", img2);map.put("image_type", "BASE64");map.put("face_type", "LIVE");map.put("quality_control", "LOW");map.put("liveness_control", "HIGH");pli.add(map);String param =  new org.json.JSONArray(pli).toString();String accessToken=AuthService.getAuth();//获取accessToken,有效期一个月,这里需要宁外做处理,我是直接调用了String result = HttpUtil.post(url, accessToken, "application/json", param);//  System.out.println(result);JSONObject jsonObject = new JSONObject(result);JSONObject obj=(JSONObject) jsonObject.get("result");return obj.get("score").toString();} catch (Exception e) {e.printStackTrace();return null;}}

第三部,写前端页面调用浏览器摄像头,并把摄像头采集到人脸照片以base64的方式传给后台,这个是我自己的jsp页面代码,直接复制应该是不可以用的,但是里面html5调用摄像头的可以参考使用哦。

注意:如果您的摄像头打开很黑,有可能是您的电脑摄像头坏掉了(脸都拍不清楚,肯定识别不了),这个不是代码的问题哦,我用的360和谷歌浏览器测试均可打开摄像头的。

代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html dir="ltr" lang="en"><head><%@ include file="common.jsp"%>
</head><body><!-- ============================================================== --><!-- Preloader - style you can find in spinners.css --><!-- ============================================================== --><div class="preloader"><div class="lds-ripple"><div class="lds-pos"></div><div class="lds-pos"></div></div></div><!-- ============================================================== --><!-- Main wrapper - style you can find in pages.scss --><!-- ============================================================== --><div id="main-wrapper" data-navbarbg="skin6" data-theme="light" data-layout="vertical" data-sidebartype="full" data-boxed-layout="full"><!-- ============================================================== --><!-- Topbar header - style you can find in pages.scss --><!-- ============================================================== --><%@ include file="leftmenu.jsp"%><!-- ============================================================== --><!-- ============================================================== --><!-- Page wrapper  --><!-- ============================================================== --><div class="page-wrapper"><!-- ============================================================== --><!-- Bread crumb and right sidebar toggle --><!-- ============================================================== --><!-- ============================================================== --><!-- End Bread crumb and right sidebar toggle --><!-- ============================================================== --><!-- ============================================================== --><!-- Container fluid  --><!-- ============================================================== --><div class="container-fluid"><!-- ============================================================== --><!-- Start Page Content --><!-- ============================================================== --><!-- Row --><div class="row"><div class="col-12"><div class="card"><div class="card-body"><h4 class="card-title" style="text-align: center;">上下班请记得打卡哦</h4></div><div class="container" style="text-align: center;"><span id="clockin" class="mdi mdi-cloud-print" style="font-size: 10em"></span>   <video id="video" width="480" height="320" style="display:none;">  </video><p id="video_tip" style="display:none;">脸部识别中,请正脸看向摄像头,<span id="ts"></span></p> <canvas id="canvas" width="480" height="320" style="display:none;"></canvas><p id="result"></p></div></div></div> </div><!-- Row --><!-- ============================================================== --><!-- End PAge Content --><!-- ============================================================== --><!-- ============================================================== --><!-- Right sidebar --><!-- ============================================================== --><!-- .right-sidebar --><!-- ============================================================== --><!-- End Right sidebar --><!-- ============================================================== --></div><!-- ============================================================== --><!-- End Container fluid  --><!-- ============================================================== --><!-- ============================================================== --></div><!-- ============================================================== --><!-- End Page wrapper  --><!-- ============================================================== --></div></body><script type="text/javascript">
var t=5;
$('#clockin').click(function(){$('#clockin').hide();$('#video,#video_tip').show();var inv=setInterval(function(){$('#ts').text(t+'s');if(t<0){t=5;context.drawImage(video, 0, 0, 480, 320);$('#canvas').show(); $('#clockin,#video,#video_tip').hide();clearInterval(inv);matchface();}t--;}, 1000);
})
function matchface(){$.ajax({type:"post",url:"${ctx}/clockin/faceadd",dataType:"json",data: {faceimg:getBase64()} , success:function(data){if(data.status==1){$('#result').text(data.msg).css('color','green');} else{alert(data.msg);window.location.reload();}},fail:function(data){alert('请检查网络');window.location.reload();}})
}
//访问用户媒体设备的兼容方法
function getUserMedi1;};</script>
</html>

第四部:调用后台照片匹配接口,给前端返回结果,代码如下:

@ResponseBody
@RequestMapping("/faceadd")
public Object faceadd(@RequestParam(value="pageNo",defaultValue="1")int pageNo,ScClockin o,Model model,HttpSession session,String faceimg,HttpServletRequest request) throws Exception {String isbenren=FaceMatch.faceMatch(faceimg(刚刚前端摄像头拍摄的照片的buse64格式数据),“该员工之前的一寸电子照片的base64格式数据”);if(isbenren==null){m.put("status", "0");m.put("msg","脸部信息匹配失败,重新签到");return  m;}double br=Double.parseDouble(isbenren);if(br<80){m.put("status", "0");m.put("msg","签到失败,不是本人");return  m;}return   m;}

java基于springboot的人脸识别企业排班考勤系统之人脸识别模块的设计和实现相关推荐

  1. Springboot毕设项目基于人脸识别的智能门禁及考勤系统11f4gjava+VUE+Mybatis+Maven+Mysql+sprnig)

    Springboot毕设项目基于人脸识别的智能门禁及考勤系统11f4gjava+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomcat8. ...

  2. 【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)

    [优秀毕设]基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发.可基于树莓派) 该系统利用Harr级联检测和LPBH进行人脸检测和训练.识别 利用Tkinter完成界面搭建 利用Fla ...

  3. java企业排班系统企业考勤人脸识别考勤系统源码企业批量排班网站

    java实现的企业批量排班系统,出差请假打卡统计,排班,设置部长,发布公告等功能.人脸识别考勤打卡. 新增角色:部长(管理员指定部长) ,由部长对自己部门的员工进行分组,然后按分组进行排班,比如:张三 ...

  4. java实现企业排班考勤管理系统项目源码设计与实现(一)

    运行环境:jdk7/8+tomcat7/8+mysql5-7 技术:springboot(spring+springMVC+myibats)+pegehelper+jq+css+bootscrap 用 ...

  5. java 基于虹软离线人脸识别SDK 2.0 最新版

    虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! JDK SDK Win release license status 前言 由于业务需求,最近跟人脸识别 ...

  6. 基于Flask的人脸识别企业系统

    开发工具: Anaconda Spyder 数据库: Mysql 功能模块: 人脸识别登录,信息管理,信息展示

  7. java基于springboot+vue的在线作业提交与批改系统nodejs

    在线作业提交与批改系统基于WEB开发, 本在线作业提交与批改系统是对高校教学管理应用的体现,在学生信息管理,课程信息和作业信息管理方面进行了分析设计和实现.通过在线作业提交与批改系统实现,规范的对作业 ...

  8. 智能排班考勤系统原型

    可应用于客服行业或工厂的智能排班系统. 可实现从业务预测,到工时预估,再到人员分配全流程自动智能排班. 能清单: 排班工作台 数据监控 班表日历 排班工具 班次表 登录页面 点击下载

  9. java基于安卓的人脸识别_基于android studio开发的 opencv关于android人脸识别的DEMO

    (2018年11月23日 在 链接 补充了一个新的BUG) 一个新项目的导入 可能会遇到多个问题,就这些问题 做个 解决集合,以便日后回顾, 版本 : android studio3.1.4 ,ope ...

最新文章

  1. 全面深度复盘:2020北京智源大会文集开放下载(1200页)
  2. 【跃迁之路】【707天】程序员高效学习方法论探索系列(实验阶段464-2019.1.28)...
  3. Effective Java之对可恢复的情况使用受检异常,对编程错误使用运行时异常(五十八)
  4. 《开源成长策略——Talend 成功模式》邀请函
  5. php 20分钟以前,php返回相对时间(如:20分钟前,3天前)的方法_PHP
  6. php截取3位数,使用php实现截取指定长度
  7. 数据随机丢失情况下多传感器多速率鲁棒融合估计
  8. php 同时登录怎么办,php 实现同一个账号同时只能一个人登录
  9. 火山视窗类库静态编译一览表,以及所需求的vs版本
  10. 安卓手机内存满了,4个方法教你释放空间
  11. select下拉复选
  12. Iphone8如何投屏到电脑 苹果手机投屏到电脑
  13. Ruff自主研发的NB-IoT智能网关获得联通实验室测试通过
  14. 替罪羊树[Scapegoat Tree]
  15. Win+E快速打开我的电脑方式设置方式
  16. 仓储控制系统(WCS)设计
  17. 实验一:贝叶斯神经网络及其如何用随机梯度马尔可夫链蒙特卡洛有效训练
  18. 终于鸿蒙微内核弄懂了-程序员和鼓励师的合作
  19. 蓝桥杯 基础练习(三)字母图形 C语言
  20. NOIP2015普及组复赛 解题分析

热门文章

  1. 弟中弟的Leetcode总结——数组类(五)
  2. 思科网计算机网络第一章测验,思科计算机网络课程设计——第一章路由概念测试答案...
  3. 织梦做ajax提交,织梦用ajax提交自定义表单的办法-不跳转
  4. 第一个项目:字符画神器——全程制作历程
  5. 据说是中国电信的java编程面试题
  6. 200瓦PFC方案200瓦pfc控制器方案,采用ucc28019a
  7. 电脑怎么录屏?如何开启录屏功能,试试这2个方法
  8. 语音业务VOIP开发之SIP协议篇(三) —— SIP报文解析
  9. FFmpeg把图像合成视频
  10. CentOS7.3 内网环境安装Ambari2.7.4+HDP3.1.4(阿里云服务器)