日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發(fā)布時間:2024/3/26 windows 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java基于springboot的人脸识别企业排班考勤系统之人脸识别模块的设计和实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項目里考勤打卡需要換成人臉識別,主要思路:超級管理員在員工管理處上傳員工相對清晰的五官電子一寸照片。然后員工登錄自己的賬號,在考勤頁面點擊打卡,瀏覽器開啟電腦攝像頭,采集員工臉部信息照片,并且將這個照片與員工之前的電子照進(jìn)行比對比。
演示視頻:【學(xué)生考勤系統(tǒng)單人臉采集和多人臉識別和二維碼掃描識別身份簽到考勤系統(tǒng)展示-杰凡IT】 https://www.bilibili.com/video/BV1fq4y1L77p?p=2&share_source=copy_web&vd_source=ed0f04fbb713154db5cc611225d92156

先來看看實現(xiàn)的效果吧



首先需要百度申請接口,具體這里不在贅述,百度里申請個人開發(fā),人工智能,人臉識別里新建一個應(yīng)用,可以拿到三個參數(shù), 項目只用到了兩個 API Key 和clientSecret

在調(diào)用接口之前,需要獲取AccessToke,AccessToke有效期是一個月,然后根據(jù)AccessToke去調(diào)用人臉匹配接口。

第一步:獲取AccessToke,這個百度有api文檔,里面也寫得很輕清楚了,需要API Key 和clientSecret去獲取得到,代碼如下:

public class AuthService {public static String getAuth() {// 官網(wǎng)獲取的 API Key 更新為你注冊的String clientId = " ";// 官網(wǎng)獲取的 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為固定參數(shù)+ "grant_type=client_credentials"// 2. 官網(wǎng)獲取的 API Key+ "&client_id=" + ak// 3. 官網(wǎng)獲取的 Secret Key+ "&client_secret=" + sk;try {URL realUrl = new URL(getAccessTokenUrl);// 打開和URL之間的連接HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();// 獲取所有響應(yīng)頭字段Map<String, List<String>> map = connection.getHeaderFields();// 遍歷所有的響應(yīng)頭字段for (String key : map.keySet()) {System.err.println(key + "--->" + map.get(key));}// 定義 BufferedReader輸入流來讀取URL的響應(yīng)BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回結(jié)果示例*/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());}

第二部,調(diào)用照片匹配的接口并封裝,代碼如下:
參數(shù)說明img1和img2都是base64的格式,把兩張需要對比的照片穿進(jìn)去,返回值大于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,有效期一個月,這里需要寧外做處理,我是直接調(diào)用了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;}}

第三部,寫前端頁面調(diào)用瀏覽器攝像頭,并把攝像頭采集到人臉照片以base64的方式傳給后臺,這個是我自己的jsp頁面代碼,直接復(fù)制應(yīng)該是不可以用的,但是里面html5調(diào)用攝像頭的可以參考使用哦。

注意:如果您的攝像頭打開很黑,有可能是您的電腦攝像頭壞掉了(臉都拍不清楚,肯定識別不了),這個不是代碼的問題哦,我用的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('請檢查網(wǎng)絡(luò)');window.location.reload();}}) } //訪問用戶媒體設(shè)備的兼容方法 function getUserMedi1;};</script> </html>

第四部:調(diào)用后臺照片匹配接口,給前端返回結(jié)果,代碼如下:

@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格式數(shù)據(jù)),“該員工之前的一寸電子照片的base64格式數(shù)據(jù)”);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;}

總結(jié)

以上是生活随笔為你收集整理的java基于springboot的人脸识别企业排班考勤系统之人脸识别模块的设计和实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品福利三区3d卡通动漫 | 免费在线观看av片 | 亚洲图片在线播放 | 黄色av网址在线 | 久久亚洲精 | 中文字幕免费中文 | yellow免费在线观看 | 秋霞在线一区 | 免费污片软件 | 男女无遮挡网站 | 欧美四虎 | 女女h百合无遮羞羞漫画软件 | 一区二区韩国 | 一区二区视频在线看 | www.日韩视频 | 国产成人精品在线 | 欧美日本激情 | 日本香蕉网 | 人人狠狠综合久久亚洲 | 天天网综合 | 手机免费在线观看av | 国产毛片视频 | 超碰在线免费观看97 | 激情婷婷网 | 在线免费观看av的网站 | 三日本三级少妇三级99 | 热玖玖 | 一区在线观看视频 | 自拍露脸高潮 | 天天想你在线观看完整版电影高清 | 亚洲天堂v | 男女啪啪软件 | 销魂奶水汁系列小说 | 女优中文字幕 | 最新欧美大片 | 手机在线看片你懂的 | 骚av在线 | 亚洲免费一二三区 | 欧美黑人巨大xxx极品 | zoo性欧美| 久久久男女 | 亚洲精品7777 | 一区二区在线观看免费视频 | 久久免费精彩视频 | 中文字幕一区电影 | 一本加勒比波多野结衣 | 国产美女喷水 | 欧美日韩国产精品一区二区三区 | 国产日韩欧美视频 | 国模吧一区二区三区 | 免费看av的网址 | 精品一区二区三区无码视频 | 亚洲av无码一区二区三区dv | 欧美三级网 | 国产chinasex麻豆videos | 强公把我次次高潮hd | 亚洲爱v| 成人免费av在线 | 国产中文字幕亚洲 | 免费在线看视频 | 亚洲一区二区三区精品视频 | 欧美爱爱网站 | 国产叼嘿视频 | 在线激情av | 色在线视频 | www夜插内射视频网站 | 成人影片在线免费观看 | 亚洲免费观看av | 国产一级片网址 | 综合天天色 | 黑人高潮一区二区三区在线看 | 黑人与日本少妇高潮 | 小视频免费在线观看 | 少妇黄色片 | 18色av| 中文字幕+乱码+中文乱码www | 国产精品拍拍 | 免费成人在线视频观看 | 网红福利视频 | 久久精品无码人妻 | 亚洲影视一区二区三区 | 视频一区二区在线播放 | 国产欧美精品一区二区三区app | 俄罗斯av片| 亚洲天堂手机在线观看 | 中文字幕一级 | 在线日韩一区二区 | 日本在线播放视频 | 在线亚洲色图 | 2025av在线播放 | 欧美日韩国产免费一区二区三区 | 青娱乐最新视频 | 国产精品夜夜 | 成人毛片在线 | 国产小精品 | 日日操日日 | 国产福利精品一区 | av免费观| 四虎影视www在线播放 |