SSM+ajax使用百度AI人脸识别(人脸对比)功能心得
最近做畢業(yè)設(shè)計(jì),算是自己第一次獨(dú)立完成一個(gè)系統(tǒng),使用了百度ai的接口,查詢了大部分網(wǎng)絡(luò)上的博客,也來分享一下自己的經(jīng)驗(yàn)。
1.首先,使用之前先注冊(cè)一個(gè)百度AI開放平臺(tái)的賬號(hào)
2.登錄之后,創(chuàng)建屬于自己的項(xiàng)目
3.找到自己應(yīng)用的AppID,API Key(AK),Secret Key(SK).
好了,到這里就算完成了準(zhǔn)備工作。
接下來要開始編寫代碼了。
因?yàn)槲沂褂玫氖侨四樧R(shí)別來完成登錄工作,所以我需要調(diào)用電腦的攝像頭,完成攝像,圖片上傳的工作。
這部分可以借鑒這個(gè)網(wǎng)址
> https://www.cnblogs.com/imwtr/p/6413595.html
注:使用畫布的toDataURL方法獲取到的就是base64編碼格式,是一個(gè)String類型的,所以后臺(tái)需要用string類型獲取。
注:base64編碼是有編碼頭部的,所以base64前面一部分是可以去掉的,可以在網(wǎng)上找一下相關(guān)的方法。
前臺(tái)完成之后,開始后臺(tái)的相關(guān)編碼。
我使用了SSM框架進(jìn)行開發(fā),所以在Controller使用string來獲取的。不過在傳數(shù)據(jù)之前,還需要做一個(gè)事,就是將需要識(shí)別的人臉上傳到百度ai的人臉庫中。
在這里,一般都是調(diào)用它的接口,將照片上傳。前臺(tái)可以像上面的前臺(tái)一樣,也可以使用的file屬性,來上傳圖片。具體選擇看自己。
然后正式開始百度ai的調(diào)用。
1.在pom.xml中加入依賴
或者直接下載jar包,導(dǎo)入。
2.下載百度ai提供的四個(gè)工具類
/**
* 重要提示代碼中所需工具類
* FileUtil,Base64Util,HttpUtil,GsonUtils請(qǐng)從
* https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
* https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
* https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
* https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
* 下載
*/
3.新建一個(gè)工具類FaceSpot,獲取token和實(shí)現(xiàn)其他接口
//在這里填寫自己的AK,SK public static String getAuth() {// 官網(wǎng)獲取的 API Key 更新為你注冊(cè)的String clientId = "你的AK";// 官網(wǎng)獲取的 Secret Key 更新為你注冊(cè)的String clientSecret = "你的SK";return getAuth(clientId, clientSecret);}//獲取自己的token_access 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;}4.調(diào)用人臉庫接口
//人臉庫注冊(cè)public static String add(String img, String u_id, String user_info) {// 請(qǐng)求urlString url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";try {String imgParam = URLEncoder.encode(img, "UTF-8");Map<String, Object> map = new HashMap<>();map.put("image", img);//活體檢測map.put("liveness_control", "NORMAL");//搜索的組map.put("group_id", "Graduate");//圖片格式map.put("image_type", "BASE64");//圖片質(zhì)量要求map.put("quality_control", "LOW");//人物idmap.put("user_id", u_id);//人物信息map.put("user_info", user_info);String param = GsonUtils.toJson(map);// 注意Param格式的編寫,此處是最核心的內(nèi)容,注意uid、user_info、group_id以及images的含義,詳細(xì)信息看下圖參數(shù)表,這里添加的圖片數(shù)量可以自己權(quán)衡String accessToken = FaceSpot.getAuth();String result = HttpUtil.post(url, accessToken, "application/json", param);System.out.println(result);return result;} catch (Exception e) {e.printStackTrace();}return null;}5.人臉識(shí)別接口
//人臉?biāo)阉?/span>public static String faceSearch(String img) {// 請(qǐng)求urlString url = "https://aip.baidubce.com/rest/2.0/face/v3/search";try {Map<String, Object> map = new HashMap<>();//圖片map.put("image", img);//活體檢測map.put("liveness_control", "NORMAL");//搜索的組map.put("group_id_list", "Graduate");//圖片格式map.put("image_type", "BASE64");//圖片質(zhì)量要求map.put("quality_control", "LOW");String param = GsonUtils.toJson(map);// 注意這里僅為了簡化編碼每一次請(qǐng)求都去獲取access_token,線上環(huán)境access_token有過期時(shí)間, 客戶端可自行緩存,過期后重新獲取。String accessToken = FaceSpot.getAuth();String result = HttpUtil.post(url, accessToken, "application/json", param);System.out.println(result);return result;} catch (Exception e) {e.printStackTrace();}return null;}6.先上傳了圖片,然后調(diào)用前臺(tái)攝像頭,截取圖片,上傳圖片后進(jìn)行搜索,確認(rèn)是哪一個(gè)用戶。獲取他的id和信息,并跳轉(zhuǎn)到頁面。
package com.etc.graduate.Controller;import com.etc.graduate.bean.user; import com.etc.graduate.bean.usermessage; import com.etc.graduate.services.UserMessageService; import com.etc.graduate.services.UserService; import com.etc.graduate.utils.FaceSpot; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpSession; import java.util.List;@Controller public class FaceLoginCheck {@Autowiredprivate UserMessageService userMessageService;@Autowiredprivate UserService userService;@RequestMapping(value = "/FaceLoginCheck",method = RequestMethod.POST)@ResponseBodypublic String LoginCheck(@RequestParam("src")String src, HttpSession session){String score = null;String username = null;String userid=null;if (src == "" || src == null){return "false";}//先執(zhí)行搜索人臉,獲取到人臉對(duì)應(yīng)的String result = FaceSpot.faceSearch(src);if (result != null) {//將result的uid取出來JSONObject jsonObject = new JSONObject(result);String result1 = jsonObject.optString("result");JSONObject jsonObject1 = new JSONObject(result1);String result2 = jsonObject1.optString("user_list");/*Arrya和Object是不同的,Object個(gè)適用于{}里的數(shù)據(jù),Array適用[]的數(shù)據(jù)可以去看一下https://blog.csdn.net/qq_44807642/article/details/97767696*/JSONArray jsonArray = new JSONArray(result2);int length = jsonArray.length();for (int i = 0; i <length ; i++) {String string = jsonArray.optString(i);JSONObject jsonObject2 = new JSONObject(string);score = jsonObject2.optString("score");userid = jsonObject2.optString("user_id");}}else {return "false";}//使用userscore判斷,超過95以上才能通過Double score1 = Double.valueOf(score);if(score1>95){int uid = Integer.parseInt(userid);//接著使用username獲取數(shù)據(jù),傳入到session,傳到前臺(tái)user user = new user();usermessage usermessage = new usermessage();//使用id獲取用戶信息List<user> userList = userService.selsetUserById(uid);for (user anUserList : userList) {user = anUserList;}username = user.getUsername();List<usermessage> usermessageList = userMessageService.selectUserMessage(username);for (usermessage anUsermessageList : usermessageList) {usermessage = anUsermessageList;}String password = user.getUserpassword();String usersex = usermessage.getUsersex();String useremail = usermessage.getUseremail();String userphone = usermessage.getUserphone();int usercourse = usermessage.getUsercourse();//將獲取到的數(shù)據(jù)存進(jìn)sessionsession.setAttribute("uid", uid);session.setAttribute("username", username);session.setAttribute("pwd", password);session.setAttribute("usersex", usersex);session.setAttribute("useremail", useremail);session.setAttribute("userphone", userphone);session.setAttribute("usercourse", usercourse);return "true";}else {return "false";}} }參考:https://blog.csdn.net/qq_44807642/article/details/97767696
https://www.cnblogs.com/imwtr/p/6413595.html
總結(jié)
以上是生活随笔為你收集整理的SSM+ajax使用百度AI人脸识别(人脸对比)功能心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红帽linux授权,红帽开发者可得到一套
- 下一篇: 【人工智能生成内容AIGC】AIGC来了