当前位置:   article > 正文

百度AI实现Web端人脸识别登陆-Springboot-Vue/element-ui_百度离线人脸识别 web版本

百度离线人脸识别 web版本

3.8 人脸识别登陆Controller

1、效果图

 后台获取的数据

{"face_token":"efb5996c1707850f81e884ef190c984b","user_list":[{"score":91.080505371094,"group_id":"group1","user_id":"1","user_info":""}]}

2、注册百度ai

百度ai地址https://login.bce.baidu.com/?redirect=https%3A%2F%2Fconsole.bce.baidu.com%2F%3Ffromai%3D1#/aip/overviewhttps://login.bce.baidu.com/?redirect=https%3A%2F%2Fconsole.bce.baidu.com%2F%3Ffromai%3D1#/aip/overview

2.1 、使用免费百度ai步骤

1、点击人脸识别:跳转到服务

 2、其间会有一些验证,创建应用

3、查看人脸库

 4、新建组、用户

 5、添加人脸照片

 3、代码实现逻辑

  1. 基于Springboot框架搭建的,前端使用Vue,通过摄像机拍下照片后,请求后端人脸识别登陆服务,后台调用百度API人脸识别接口,进入百度
  2. 大脑搜索人脸识别即可获取官网的Secret Key,将前端获取的人脸信息的base64信息和你本地数据库里的人脸信息传到百度人脸识别的接口
  3. 进行人脸比对,返回一个json数据,result参数 带别人脸相似度, result可自己定义,从而实现人脸识别登录。

核心代码块

3.1、导入Maven依赖

  1. <dependency>
  2. <groupId>com.baidu.aip</groupId>
  3. <artifactId>java-sdk</artifactId>
  4. <version>4.15.1</version>
  5. </dependency>

 3.2、 创建FaceUtil,获取ApiFace【单例】

  1. package com.ruoyi.common.utils.face.utils;
  2. import com.baidu.aip.face.AipFace;
  3. import com.baidu.aip.util.Base64Util;
  4. /**
  5. * 人脸识别工具
  6. */
  7. public class FaceUtil {
  8. private static final String APP_ID = "25236971";
  9. private static final String APP_KEY = "zLIZGY15wiEQh2utjwAGGW9C";
  10. private static final String SECRET_KEY = "Pzi4Ew6eWfZPINBkshlCO22OqADa777I";
  11. private static volatile AipFace client = new AipFace(APP_ID, APP_KEY, SECRET_KEY);
  12. // 创建单例避免多次获取sdk
  13. public static AipFace getClient(){
  14. client.setConnectionTimeoutInMillis(2000);
  15. client.setSocketTimeoutInMillis(60000);
  16. return client;
  17. }
  18. /**
  19. * 编码
  20. * @param form
  21. * @return
  22. */
  23. public static String encodeBase64(byte[] form){
  24. return Base64Util.encode(form);
  25. }
  26. /**
  27. * 解码
  28. * @param data
  29. * @return
  30. */
  31. public static byte[] decodeBase64(String data){
  32. return Base64Util.decode(data);
  33. }
  34. }

3.3 创建FaceResultUtil,统一处理请求

  1. package com.ruoyi.common.utils.face.utils;
  2. import com.ruoyi.common.utils.face.BizException;
  3. import com.ruoyi.common.utils.face.constant.ErrorEnum;
  4. import com.ruoyi.common.utils.face.constant.FaceConstant;
  5. import com.ruoyi.common.utils.face.dto.FaceResult;
  6. import org.json.JSONObject;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. /**
  10. * 结果工具封装
  11. */
  12. public class FaceResultUtil {
  13. private static final Logger logger = LoggerFactory.getLogger("百度API接口请求结果解析");
  14. public static FaceResult isSuccess(JSONObject res){
  15. FaceResult result = parseJsonObject(res);
  16. if (!result.isSuccess()){
  17. // 对错误进行分类
  18. ErrorEnum errorEnum = ErrorEnum.getInstance(result.getErrorCode());
  19. if (errorEnum == null){
  20. throw new BizException("百度接口请求失败" + result.getErrorMsg());
  21. }else {
  22. throw new BizException(errorEnum.getCnDesc());
  23. }
  24. }
  25. return result;
  26. }
  27. /**
  28. * 解析JsonObject
  29. * @return
  30. */
  31. private static FaceResult parseJsonObject(JSONObject res){
  32. FaceResult faceResult = FaceResult.builder().build();
  33. try {
  34. String logId = res.has(FaceConstant.LOG_ID) ? res.get(FaceConstant.LOG_ID).toString() : "0";
  35. int errorCode = res.has(FaceConstant.ERROR_CODE) ? res.getInt(FaceConstant.ERROR_CODE) : -1;
  36. String errorMsg = res.has(FaceConstant.ERROR_MSG) ? res.getString(FaceConstant.ERROR_MSG) : "";
  37. int cached = res.has(FaceConstant.CACHED) ? res.getInt(FaceConstant.CACHED) : 0;
  38. long timestamp = res.has(FaceConstant.TIMESTAMP) ? res.getLong(FaceConstant.TIMESTAMP) : 0;
  39. Object dataString = res.has(FaceConstant.RESULT) ? res.get(FaceConstant.RESULT) : "";
  40. com.alibaba.fastjson.JSONObject data = null;
  41. if (dataString != null) {
  42. data = com.alibaba.fastjson.JSONObject.parseObject(dataString.toString());
  43. }
  44. faceResult.setLogId(logId);
  45. faceResult.setErrorCode(errorCode);
  46. faceResult.setErrorMsg(errorMsg);
  47. faceResult.setCached(cached);
  48. faceResult.setTimestamp(timestamp);
  49. faceResult.setData(data);
  50. }catch (Exception e){
  51. logger.error("JSONObject解析失败", e);
  52. }
  53. return faceResult;
  54. }
  55. }

3.4 创建FaceResult

  1. package com.ruoyi.common.utils.face.dto;
  2. import com.alibaba.fastjson.JSONObject;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Builder;
  5. import lombok.Data;
  6. import lombok.NoArgsConstructor;
  7. import java.io.Serializable;
  8. /**
  9. *请求百度API接口结果
  10. */
  11. @Data
  12. @Builder
  13. @AllArgsConstructor
  14. @NoArgsConstructor
  15. public class FaceResult implements Serializable {
  16. private String logId;
  17. private String errorMsg;
  18. private int cached;
  19. private int errorCode;
  20. private long timestamp;
  21. private JSONObject data;
  22. public boolean isSuccess(){
  23. return 0 == this.errorCode ? true : false;
  24. }
  25. }

3.5 创建ImageU

  1. package com.ruoyi.common.utils.face.dto;
  2. import com.ruoyi.common.utils.face.constant.ImageTypeEnum;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Builder;
  5. import lombok.Data;
  6. import lombok.NoArgsConstructor;
  7. import java.io.Serializable;
  8. /**
  9. * 图像对象
  10. */
  11. @Data
  12. @Builder
  13. @AllArgsConstructor
  14. @NoArgsConstructor
  15. public class ImageU implements Serializable {
  16. private ImageTypeEnum imageTypeEnum;
  17. private String data;
  18. }

3.6 创建FaceUserDTO

  1. package com.ruoyi.common.utils.face.dto;
  2. import com.ruoyi.common.utils.face.constant.FaceConstant;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Builder;
  5. import lombok.Data;
  6. import lombok.NoArgsConstructor;
  7. import java.io.Serializable;
  8. @Data
  9. @Builder
  10. @AllArgsConstructor
  11. @NoArgsConstructor
  12. public class FaceUserDTO<T> implements Serializable {
  13. private String userId;
  14. private String groupId = FaceConstant.DEFAULT_GROUP_ID;
  15. private String faceToken;
  16. private T user;
  17. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/701509
推荐阅读
相关标签
  

闽ICP备14008679号