欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人工智能 > ChatGpt >内容正文

ChatGpt

SSM+ajax使用百度AI人脸识别(人脸对比)功能心得

发布时间:2024/5/8 ChatGpt 86 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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人脸识别(人脸对比)功能心得的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。