SSM+ajax使用百度AI人脸识别(人脸对比)功能心得
最近做畢業設計,算是自己第一次獨立完成一個系統,使用了百度ai的接口,查詢了大部分網絡上的博客,也來分享一下自己的經驗。
1.首先,使用之前先注冊一個百度AI開放平臺的賬號
2.登錄之后,創建屬于自己的項目
3.找到自己應用的AppID,API Key(AK),Secret Key(SK).
好了,到這里就算完成了準備工作。
接下來要開始編寫代碼了。
因為我使用的是人臉識別來完成登錄工作,所以我需要調用電腦的攝像頭,完成攝像,圖片上傳的工作。
這部分可以借鑒這個網址
> https://www.cnblogs.com/imwtr/p/6413595.html
注:使用畫布的toDataURL方法獲取到的就是base64編碼格式,是一個String類型的,所以后臺需要用string類型獲取。
注:base64編碼是有編碼頭部的,所以base64前面一部分是可以去掉的,可以在網上找一下相關的方法。
前臺完成之后,開始后臺的相關編碼。
我使用了SSM框架進行開發,所以在Controller使用string來獲取的。不過在傳數據之前,還需要做一個事,就是將需要識別的人臉上傳到百度ai的人臉庫中。
在這里,一般都是調用它的接口,將照片上傳。前臺可以像上面的前臺一樣,也可以使用的file屬性,來上傳圖片。具體選擇看自己。
然后正式開始百度ai的調用。
1.在pom.xml中加入依賴
或者直接下載jar包,導入。
2.下載百度ai提供的四個工具類
/**
* 重要提示代碼中所需工具類
* FileUtil,Base64Util,HttpUtil,GsonUtils請從
* 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.新建一個工具類FaceSpot,獲取token和實現其他接口
//在這里填寫自己的AK,SK public static String getAuth() {// 官網獲取的 API Key 更新為你注冊的String clientId = "你的AK";// 官網獲取的 Secret Key 更新為你注冊的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為固定參數+ "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;}4.調用人臉庫接口
//人臉庫注冊public static String add(String img, String u_id, String user_info) {// 請求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");//圖片質量要求map.put("quality_control", "LOW");//人物idmap.put("user_id", u_id);//人物信息map.put("user_info", user_info);String param = GsonUtils.toJson(map);// 注意Param格式的編寫,此處是最核心的內容,注意uid、user_info、group_id以及images的含義,詳細信息看下圖參數表,這里添加的圖片數量可以自己權衡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.人臉識別接口
//人臉搜索public static String faceSearch(String img) {// 請求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");//圖片質量要求map.put("quality_control", "LOW");String param = GsonUtils.toJson(map);// 注意這里僅為了簡化編碼每一次請求都去獲取access_token,線上環境access_token有過期時間, 客戶端可自行緩存,過期后重新獲取。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.先上傳了圖片,然后調用前臺攝像頭,截取圖片,上傳圖片后進行搜索,確認是哪一個用戶。獲取他的id和信息,并跳轉到頁面。
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";}//先執行搜索人臉,獲取到人臉對應的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個適用于{}里的數據,Array適用[]的數據可以去看一下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獲取數據,傳入到session,傳到前臺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();//將獲取到的數據存進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
總結
以上是生活随笔為你收集整理的SSM+ajax使用百度AI人脸识别(人脸对比)功能心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红帽linux授权,红帽开发者可得到一套
- 下一篇: mysql 拼音首字母_MySQL 获取