SSM+ajax使用百度AI人脸识别(人脸对比)功能心得
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SSM+ajax使用百度AI人脸识别(人脸对比)功能心得,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7909字,纯文字阅读大概需要12分钟。
内容图文
最近做毕业设计,算是自己第一次独立完成一个系统,使用了百度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) {
// 请求url
String 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");
//人物id
map.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) {
// 请求url
String 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 {
@Autowired
private UserMessageService userMessageService;
@Autowired
private UserService userService;
@RequestMapping(value = "/FaceLoginCheck",method = RequestMethod.POST)
@ResponseBody
public 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();
//将获取到的数据存进session
session.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人脸识别(人脸对比)功能心得全部内容,希望文章能够帮你解决SSM+ajax使用百度AI人脸识别(人脸对比)功能心得所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。