如何基于SpringBoot實(shí)現(xiàn)人臉識(shí)別功能_第1頁(yè)
如何基于SpringBoot實(shí)現(xiàn)人臉識(shí)別功能_第2頁(yè)
如何基于SpringBoot實(shí)現(xiàn)人臉識(shí)別功能_第3頁(yè)
如何基于SpringBoot實(shí)現(xiàn)人臉識(shí)別功能_第4頁(yè)
如何基于SpringBoot實(shí)現(xiàn)人臉識(shí)別功能_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第如何基于SpringBoot實(shí)現(xiàn)人臉識(shí)別功能目錄前言需求分析一、人臉注冊(cè)二、人臉登錄具體實(shí)現(xiàn)一、人臉注冊(cè)二、刷臉登錄總結(jié)

前言

去年在公司參與了一個(gè)某某機(jī)場(chǎng)建設(shè)智能機(jī)場(chǎng)的一個(gè)項(xiàng)目,人臉登機(jī)是其中的一個(gè)功能模塊,當(dāng)時(shí)只是寫(xiě)了后臺(tái)的接口,調(diào)用人臉識(shí)別設(shè)備的api,給閘機(jī)回傳數(shù)據(jù)信號(hào),以保障該功能的正常使用。

當(dāng)時(shí)因?yàn)轫?xiàng)目進(jìn)度緊張,手里還有其他項(xiàng)目趕進(jìn)度,也就沒(méi)時(shí)間去分享這個(gè)功能的實(shí)現(xiàn)。前幾天刷臉進(jìn)公司大樓的時(shí)候,突然想起來(lái)應(yīng)該寫(xiě)一個(gè)功能類(lèi)似的demo分享個(gè)人的一些小小的經(jīng)驗(yàn)。在當(dāng)時(shí)項(xiàng)目中刷臉的設(shè)備終端是采購(gòu)某某AI公司,當(dāng)然咱們?cè)赿emo里面也不可能買(mǎi)一臺(tái)那東西來(lái)瞎搞,于是乎就拿系統(tǒng)刷臉登錄來(lái)練練手,人臉識(shí)別解決方案就用百度云的吧,當(dāng)然騰訊、阿里這方面也很牛逼的。

需求分析

一、人臉注冊(cè)

step1:人像采集。在注冊(cè)頁(yè)面上用html中video組件和js調(diào)用筆記本攝像頭,并抓取人像圖片。沒(méi)有攝像頭的筆記本、臺(tái)式機(jī)的童鞋告辭吧,走好不送。。。

step2:人像上傳至項(xiàng)目文件夾。將在頁(yè)面采集到的人像數(shù)據(jù)轉(zhuǎn)換成bash64字符傳輸?shù)絯eb后臺(tái),在后臺(tái)將bash64轉(zhuǎn)換成圖片上傳至項(xiàng)目文件夾。

step3:將用戶的注冊(cè)信息寫(xiě)入數(shù)據(jù)庫(kù),用戶的照片使用路徑存儲(chǔ)。

step4:將采集到的人像信息(bash64)上傳至百度云的人臉識(shí)別云端服務(wù)器。ps這塊實(shí)現(xiàn)也可離線私有化處理方案,有興趣的童鞋可自行研究。

二、人臉登錄

step1:人像采集。在登錄頁(yè)面上用html中video組件和js調(diào)用筆記本攝像頭,并抓取人像圖片。

step2:人像數(shù)據(jù)傳輸。抓取的人臉圖片信息回傳至web后臺(tái)。

step3:人像比對(duì)。在web后臺(tái)實(shí)例化并調(diào)用百度云人臉識(shí)別的sdk,將登錄頁(yè)面采集到的圖像數(shù)據(jù)和注冊(cè)的圖像信息相比對(duì)(這塊是百度云人臉識(shí)別解決方案實(shí)現(xiàn)的,也是最牛B的地方),返回的比分大于95分即可實(shí)現(xiàn)登錄。

具體實(shí)現(xiàn)

好了,前言和需求分析也嗶嗶了這么久了,接下來(lái)是實(shí)現(xiàn)和上代碼了。

一、人臉注冊(cè)

前端頁(yè)面代碼

!DOCTYPEhtml

html

head

metacharset="UTF-8"

titleInserttitlehere/title

styletype="text/css"

/**解決瀏覽器兼容性問(wèn)題**/

*{margin:0;padding:0;}

html,body{width:100%;height:100%;}/**/

body{background:url(img/bg03.jpg)no-repeatcenter;}

h1{color:#fff;text-align:center;line-height:80px;}

.media{width:534px;height:400px;margin:40pxauto0;

#register{width:200px;height:50px;background-color:#2196f3;margin:60pxauto0;

text-align:center;line-height:50px;color:#fff;border-radius:10px;}

#canvas{display:none;}

#shuru{width:200px;height:50px;background-color:#2196f3;margin:20pxauto0;}

/style

/head

body

h1百度云人臉注冊(cè)/h1

divid="shuru"

用戶名:

inputtype="text"name="username"id="username"/

/div

div

videoid="video"width="450"height="300"src=""autoplay/video

canvasid="canvas"width="450"height="300"/canvas

/div

buttonid="register"確定注冊(cè)/button

scripttype="text/javascript"src="js/jquery-3.3.1.js"/script

scripttype="text/javascript"

/**調(diào)用攝像頭,獲取媒體視頻流**/

varvideo=document.getElementById('video');

//返回畫(huà)布二維畫(huà)圖環(huán)境

varuserContext=canvas.getContext("2d");

vargetUserMedia=

//瀏覽器兼容,表示在火狐、Google、IE等瀏覽器都可正常支持

(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia)

//getUserMedia.call(要調(diào)用的對(duì)象,約束條件,調(diào)用成功的函數(shù),調(diào)用失敗的函數(shù))

getUserMedia.call(navigator,{video:true,audio:false},function(localMediaStream){

//獲取攝像頭捕捉的視頻流

video.srcObject=localMediaStream;

},function(e){

console.log("獲取攝像頭失?。。?)

//點(diǎn)擊按鈕注冊(cè)事件

varbtn=document.getElementById("register");

btn.onclick=function(){

varusername=$("#username").val();

alert($("#username").val());

if(username!=null){

//點(diǎn)擊按鈕時(shí)拿到登陸者面部信息

userContext.drawImage(video,0,0,450,300);

varuserImgSrc=document.getElementById("canvas").toDataURL("img/png");

//拿到bash64格式的照片信息

varfaceBase=userImgSrc.split(",")[1];

//ajax異步請(qǐng)求

$.ajax({

url:"register",

type:"post",

data:{"faceBase":faceBase,

"userName":username

success:function(result){

if(result==='1'){

alert("注冊(cè)成功??!,點(diǎn)擊確認(rèn)跳轉(zhuǎn)至登錄頁(yè)面");

window.location.href="toLogin"rel="externalnofollow";

}elseif(result==='2'){

alert("您已經(jīng)注冊(cè)過(guò)啦!!");

}else{

alert("系統(tǒng)錯(cuò)誤??!");

}else{

alert("用戶名不能為空");

/script

/body

/html

頁(yè)面截圖,本人太帥,先行打碼,嘿嘿

后臺(tái)具體代碼如下:

privatestaticfinalStringAPP_ID="****";

privatestaticfinalStringAPI_KEY="*******";

privatestaticfinalStringSECRET_KEY="*******";

@Autowired

privateIUserServiceuserService;

@RequestMapping(value="register",method=RequestMethod.POST)

publicStringregister(StringuserName,StringfaceBase)throwsIOException{

if(!StringUtils.isEmpty(userName)!StringUtils.isEmpty(faceBase)){

//文件上傳的地址

StringupPath=ResourceUtils.getURL("classpath:").getPath()+"static\photo";

//用于查看路徑是否正確

System.out.println(upPath);

//圖片名稱(chēng)

StringfileName=userName+System.currentTimeMillis()+".png";

System.out.println(upPath+"\"+fileName);

Filefile=newFile(upPath+"\"+fileName);

//初始化百度云的AipFace

AipFaceclient=newAipFace(APP_ID,API_KEY,SECRET_KEY);

//往自己demo數(shù)據(jù)庫(kù)里插入一條用戶數(shù)據(jù)

Usersuser=newUsers();

user.setUserName(userName);

user.setUserPhoto(upPath+"\"+fileName);

UsersexitUser=userService.selectUserByName(user);

if(exitUser!=null){

return"2";

userService.addUsers(user);

//往自己demo服務(wù)器里面上傳攝像頭捕獲的圖片

GenerateImage(faceBase,file);

//向百度云人臉庫(kù)插入一張人臉

facesetAddUser(client,faceBase,userName);

return"1";

}

APP_ID、API_KEY、SECRET_KEY三個(gè)參數(shù)分別為百度云人臉識(shí)別上面的三個(gè)數(shù)據(jù)項(xiàng),如下圖

點(diǎn)擊完注冊(cè)按鈕后,就會(huì)發(fā)現(xiàn)。。。

1

2

3

4

到這就算一個(gè)用戶注冊(cè)成功了,個(gè)人這張大帥臉也算是錄進(jìn)去了,下面就是刷臉登錄了。面試題推薦:面試前可以在這里刷刷題,很巴適!(Java版)

二、刷臉登錄

當(dāng)我注冊(cè)完后就會(huì)進(jìn)入登錄頁(yè)面

這時(shí)我點(diǎn)擊登錄按鈕,js觸發(fā)后臺(tái)方法,具體入下:

@RequestMapping(value="login",method=RequestMethod.POST)

publicStringlogin(StringfaceBase){

StringfaceData=faceBase;

//進(jìn)行人像數(shù)據(jù)對(duì)比

AipFaceclient=newAipFace(APP_ID,API_KEY,SECRET_KEY);

Doublenum=verifyUser(faceData,client);

if(num95){

return"1";

}else{

return"2";

*人臉比對(duì)

*@paramimgBash64照片轉(zhuǎn)bash64格式

*@paramimgType類(lèi)型

*@paramgroupList百度云人臉識(shí)別用戶組

*@return

publicDoubleverifyUser(StringimgBash64,AipFaceclient){

//傳入可選參數(shù)調(diào)用接口

HashMapString,Stringoptions=newHashMapString,String

JSONObjectres=client.search(imgBash64,"BASE64","user_01",options);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論