人脸登录注册
毕设的要求,骚包的加了一个人脸注册登录的功能,提升一下自己的逼格,下面就详细的说说吧。
首先,人脸识别登录是基于百度ai平台的(感谢百度ai)你就需要注册一个百度ai的号了
百度搜索 百度ai 没错第一个就是
需要的就是我标红的三个,使用之前呢,还是好好读读人间官方的api文档,帮助相当的大
++++++++++++++++++++++
++++++++++++++++++++++
++++++++++++++++++++++
大概说一下实现的基本流程:
浏览器获取摄像头权限,将图片传入后台(base64格式,至于这个,自己百度),这时候想把base64格式的存入数据库,可以是可以但是就是特别的麻烦,先将base64转化为图片,图片存本地,数据库保存路径,美滋滋
至于怎么将base64转化为图片,嘿嘿嘿,说了让你好好看官方的api文档,实在不行就自己百度
String img = imgbase64;
String fileName = System.currentTimeMillis() + ".png";
// 不能放在这里会出错,重启tomcate 会将照片删除 设置一个据对的路径
String basePath = "D:\\picture";
// F:\apache-tomcat-8.5.13\webapps\archives\picture\
String path = basePath + "/" + fileName;
GenerateImage(img, basePath + "\\" + fileName);
private boolean GenerateImage(String imgStr, String imgFilePath) {
if (imgStr == null) // 图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] bytes = decoder.decodeBuffer(imgStr);
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {// 调整异常数据
bytes[i] += 256;
}
}
// 生成jpeg图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(bytes);
out.flush();
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
注册完成了,那么就剩登录了
原理其实是很简单的,获取人脸和注册没啥区别,然后从数据库中找到用户名对应的path,将图片转化成base64(百度ai提供的人脸对比他需要的是base64格式的)然后传到百度ai平台,返回一个结果,结果的样子是下图
贴一下代码:
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(path);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 加密
// 将图片转化为base64格式
BASE64Encoder encoder = new BASE64Encoder();
String encode = encoder.encode(data);
// 将两张图片上传到百度ai对比 获得result值
// 获取accessToken
/*
* accessToken一个月需要更换一次,为了优化,直接贴出 AuthService as=new AuthService(); String
* accessToken = as.getAuth();
* System.out.println("accessToken=============="+accessToken);
*/
String accessToken = "24.25cb3cc8f426eca98ec96b7d87fe09d2.2592000.1558407514.282335-16023092";
String url = "https://aip.baidubce.com/rest/2.0/face/v3/match";
List<Map<String, Object>> images = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("image", imgbase64);
map1.put("image_type", "BASE64");
map1.put("face_type", "LIVE");
map1.put("quality_control", "LOW");
map1.put("liveness_control", "NORMAL");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("image", encode);
map2.put("image_type", "BASE64");
map2.put("face_type", "LIVE");
map2.put("quality_control", "LOW");
map2.put("liveness_control", "NORMAL");
images.add(map1);
images.add(map2);
String param = GsonUtils.toJson(images);
double p = 0;
String result = HttpUtil.post(url, accessToken, "application/json", param);
根据result返回的结果判定是不是一个人
说一下注意事项吧:
1.参数必须是base64格式的
2.先获得accessToken,而且好像是一个月跟换一次
3.先看官方文档,看官方文档,看官方文档
写的不是很详细,想要源码的或者
有不会的qq问我:
源码地址:https://download.csdn.net/download/luodong1501/11256704
2498414290
来源:CSDN
作者:飞翔的山药蛋子
链接:https://blog.csdn.net/luodong1501/article/details/89683963