基于百度ai 实现人脸注册登录

帅比萌擦擦* 提交于 2019-12-05 17:39:15

人脸登录注册

毕设的要求,骚包的加了一个人脸注册登录的功能,提升一下自己的逼格,下面就详细的说说吧。

首先,人脸识别登录是基于百度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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!