Java实现人脸登录、注册等功能【完整版】,2024年最新java面试app推荐

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

      • ① 出现qps不足如何解决
  • ② oauth 获取错误

  • ⭐️ 项目总结

🍓 难度分析:


由于使用的是百度云AI/face++这两个平台的现有的Api接口,所以分别对二者的难度进行分析介绍:

  • face++

旷视face++的难度在于需要自己对官方提供的代码段进行独立封装,这就比较考验开发者的代码抽取能力和 自我独立封装的技能,如果不能很好地进行抽取封装,就会造成代码的冗余以及内存的浪费,这样封装的效 果并不能达到最佳。比较耗费时间,在抽取face++平台的代码段时需要对IO流有着比较好的理解,从而读取 读取配置文件中的内容,这里就不多做介绍。

  • 百度云AI

百度云AI可以让开发者对开发难度有所选择,因为该平台提供了两种方式:第一种方式类似于face++需要抽 取代码然后进行代码封装,难度分析见上述face++对分析;第二种方式则是百度云提供了Maven仓库,可以 直接导入依赖,直接调用相应的Api进行开发即可!有较好的选择性!

  • 前端使用JQuery调用本地摄像头进行拍摄(自我感觉这是❗️❗️最难❗️❗️的部分)

🍒 项目回顾(百度云AI)


🍇 最终效果演示:

在这里插入图片描述

🍌 技术选型:

  • 🍀 SpringBoot

  • 🌾 BootStrap

  • 🌴 Thymeleaf

  • 🌻 百度云AI / Face++

🥝 项目需求分析

为了用户登录的便捷,不再输入账号密码进行手动登录与注册,而是使用JQuery调用本机的摄像头进行拍摄照片,然后调用人脸识别接口将人脸信息自动注册进所使用的平台(百度云/Face++)后,用户即可进行人脸扫描实现登录操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DMRfhF6Z-1652173334791)(/Users/wumao/Documents/Typora笔记/typora-user-images/image-20220510155115622.png)]

🌽 项目搭建

1. 前期准备
① 进入百度云的人脸识别控制台

如果没有百度账号可以使用手机号快速进行注册进入百度云AI控制台

②创建人脸识别应用

【1】创建应用

在这里插入图片描述

【2】可以选择自己想要使用的接口:比如人脸识别、语音技术等,本次项目采用的是人脸识别,官方也默认选择了人脸识别的全部接口,所以也不需要做改动,只需要填写应用名称即可!

在这里插入图片描述

【3】获取秘钥

在这里插入图片描述

2. 测试百度云API
① 导入依赖

com.baidu.aip

java-sdk

4.9.0

② 测试部分API(人脸注册、人脸检测、人脸搜索等)
  • 人脸注册

用于从人脸库中新增用户,可以设定多个用户所在组及组内用户的人脸图片

典型应用场景:构建属于自己人脸库,比如:会员人脸注册、已有用户补全人脸信息

测试代码

//人脸注册

@Test

public void testFaceRegister() throws IOException {

//1. 创建Java代码和百度云交互的Client对象

AipFace client = new AipFace(“AppId”,“Api_key”,“Api_secret”);

//2. 参数设置(示例下表格对参数进行介绍)

HashMap<String,String> map = new HashMap<>();

map.put(“quality_control”,“NORMAL”);//图片质量

map.put(“liveness_control”,“LOW”);//活体检测

//3. 构造图片

String path = “本地图片路径”;

//上传的图片 两种格式:url地址 Base64字符串形式

byte[] bytes = Files.readAllBytes(Paths.get(path));

String encode = Base64Util.encode(bytes);

//4.调用api方法完成人脸注册

/**

  • 参数1:图片的url或者base64字符串

  • 参数2:图片形式(URL,BASE64)

  • 参数3:组Id(固定一个字符串)

  • 参数4:用户Id

  • 参数5:hashMap基本参数配置

*/

JSONObject res = client.addUser(encode, “BASE64”, “pdx”, “1000”, map);

System.out.println(res.toString());

}

测试结果:只要最后error_code为0则表示测试成功,后续封装代码也是需要判断error_code的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-noSP5q2r-1652173334793)(/Users/wumao/Documents/Typora笔记/typora-user-images/image-20220510141916574.png)]

参数介绍:

| 参数名称 | 是否必选 | 类型 | 默认值 | 说明 |

| — | — | — | — | — |

| image | 是 | String | | 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断 |

| image_type | 是 | String | | 图片类型BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |

| face_field | 否 | string | | 包age,expression,face_shape,gender,glasses,landmark,landmark150,quality,eye_status,emotion,face_type,mask,spoofing信息逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度 |

| max_face_num | 否 | uint32 | | 最多处理人脸的数目,默认值为1,根据人脸检测排序类型检测图片中排序第一的人脸(默认为人脸面积最大的人脸),最大值120 |

| face_type | 否 | string | | 人脸的类型LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等

IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片默认LIVE |

  • 人脸检测

判断图片是否具有面部信息

测试代码

@Test

public void testFaceCheck() throws IOException {

//1. 创建Java代码和百度云交互的Client对象

AipFace client = new AipFace(“AppId”,“Api_key”,“Api_secret”);

//2. 构造图片

String path = “本地图片路径”;

//上传的图片 两种格式:url地址 Base64字符串形式

byte[] bytes = Files.readAllBytes(Paths.get(path));

String encode = Base64Util.encode(bytes);

//调用Api方法进行人脸检测

/**

  • 参数1:图片的url或者base64字符串

  • 参数2:图片形式(URL,BASE64)

  • 参数3:hashMap中的基本参数配置(null:使用默认配置)

*/

JSONObject res = client.detect(encode, “BASE64”, null);

System.out.println(res.toString(2));

}

测试结果:

在这里插入图片描述

参数介绍:

| 参数名称 | 是否必选 | 类型 | 默认值 | 说明 |

| — | — | — | — | — |

| image | 是 | String | | 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断 |

| image_type | 是 | String | | 图片类型BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |

| face_field | 否 | string | | 包age,expression,face_shape,gender,glasses,landmark,landmark150,quality,eye_status,emotion,face_type,mask,spoofing信息逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度 |

| max_face_num | 否 | uint32 | | 最多处理人脸的数目,默认值为1,根据人脸检测排序类型检测图片中排序第一的人脸(默认为人脸面积最大的人脸),最大值120 |

| face_type | 否 | string | | 人脸的类型LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等

IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片默认LIVE |

  • 人脸搜索

根据用户上传的图片和指定人脸库中的所有人脸进行比较,获取相似度最高的一个或者某几个的评分

返回值(数据,只需要第一条,相似度最高的数据)score:相似度评分(80分以上可以认为是同一个人

测试代码:

@Test

public void testFaceSearch() throws IOException {

//1. 创建Java代码和百度云交互的Client对象

AipFace client = new AipFace(“AppId”,“Api_key”,“Api_secret”);

//2. 构造图片

String path = “本地图片路径”;

//上传的图片 两种格式:url地址 Base64字符串形式

byte[] bytes = Files.readAllBytes(Paths.get(path));

String encode = Base64Util.encode(bytes);

//人脸搜索

JSONObject res = client.search(encode, “BASE64”, “pdx”, null);

System.out.println(res.toString(2));

}

测试结果:

在这里插入图片描述

小结:

整体测试下来,和平常对数据库的操作类似,都是增删改查的操作,除了这些Api,还有其他的就不再赘述了,操作类似!所有测试代码也会同项目案例一并上传到Gitee仓库中

3. 搭建项目(使用Thymeleaf模板引擎)
① 创建Maven项目

引入相关依赖,构建所需文件目录

在这里插入图片描述

② 编写properties配置文件

ai.appId=“api_id”

ai.apiKey=“api_key”

ai.secretKey=“api_secret”

ai.imageType=BASE64

ai.groupId=“自定义组”

server.max-http-header-size=1000KB

spring.thymeleaf.cache=false

③ 展示对上述部分Api接口进行二次封装

private AipFace client;

private HashMap<String,String> map = new HashMap<>();

private BaiduAiUtils(){

map.put(“quality_control”,“NORMAL”);//图片质量

map.put(“liveness_control”,“LOW”);//活体检测

}

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

[外链图片转存中…(img-4KU91wH8-1713622054804)]

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

[外链图片转存中…(img-MpidN7pd-1713622054805)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-BX7Mgpnn-1713622054805)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值