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授权,红帽开发者可得到一套
- 下一篇: 【人工智能生成内容AIGC】AIGC来了