SpringBoot人脸识别登录注册,附源码
腾讯云 2023-03-19 13:15:00

想自己搞一个人脸识别玩玩,随着开始查找资料来研究这方面的信息,还好有好几家公司都有提供这方面的免费API,也是省下来很多功夫。一开始采用的是face++,但是在执行到最后一步人脸搜索时出现问题,一直提示INVALID_OUTER_ID,跟着官方文档,一步步抽离再封装,最终还是以失败告终,无奈只能选择放弃。接着辗转第二家 百度AI ,这次还是比较顺利的,中间只出现过一次错误 ❌ ,而且官方大大还给出了解决方案,很是贴心,最终还是实现了开始的预想:成功使用人脸来实现注册和登录功能。

难度分析

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


(资料图片)

face++

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

百度云AI

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

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

项目回顾(百度云AI)

最终效果演示:

技术选型:

SpringBootBootStrapThymeleaf百度云AI / Face++

项目需求分析

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

项目搭建

1. 前期准备

①进入百度云的人脸识别控制台

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

https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F%3F_%3D1652174073259%26fromai%3D1#/ai/face/overview/index

②创建人脸识别应用

【1】创建应用

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

【3】获取秘钥

2. 测试百度云API

①导入依赖

  com.baidu.aip  java-sdk  4.9.0

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

人脸注册

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

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

测试代码

//人脸注册@Testpublic void testFaceRegister() throws IOException {  //1. 创建Java代码和百度云交互的Client对象  AipFace client = new AipFace("AppId","Api_key","Api_secret");  //2. 参数设置(示例下表格对参数进行介绍)  HashMap 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的值

人脸检测

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

测试代码

@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));    }

测试结果:

人脸搜索

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

返回值(数据,只需要第一条,相似度最高的数据)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=BASE64ai.groupId="自定义组"server.max-http-header-size=1000KBspring.thymeleaf.cache=false

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

private AipFace client;    private HashMap map = new HashMap<>();    private BaiduAiUtils(){        map.put("quality_control","NORMAL");//图片质量        map.put("liveness_control","LOW");//活体检测    }    @PostConstruct    public void init(){        client = new AipFace(APP_ID,API_KEY,SECRET_KEY);    }    /**     * 人脸注册,将用户照片存入人脸库中     * @param userId     * @param image     * @return     */    public Boolean faceRegister(String userId,String image){        //人脸注册        JSONObject res = client.addUser(image, IMAGE_TYPE, groupId, userId, map);        Integer errorCode = res.getInt("error_code");        return errorCode == 0? true : false;    }    /**     * 人脸更新,更新人脸库中的用户照片     * @param userId     * @param image     * @return     */    public Boolean faceUpdate(String userId,String image){        //人脸更新        JSONObject res = client.updateUser(image, IMAGE_TYPE, groupId, userId, map);        Integer errorCode = res.getInt("error_code");        return errorCode == 0 ? true : false;    }

想要了解全部封装代码请移步Gittee仓库

④编写Controller前端控制器代码

首选创建一个FaceLoginController类

跳转到人脸登录页面的控制器
@RequestMapping("/")public String toLogin(){  return "index";}
实现人脸登录逻辑
/** * 人脸登录 * @return * @throws Exception */@RequestMapping("/face-login")@ResponseBodypublic  String searchface(@RequestBody @RequestParam(name = "imagebast64") StringBuffer imagebast64, HttpServletRequest request) throws Exception {    String userId = faceLoginService.loginByFace(imagebast64);    request.getSession().setAttribute("userId",userId);    request.getSession().setAttribute("username","派大星");    return userId;}
实现人脸登录业务逻辑层

由于在封装接口时设定的imageType为Base64,所以在实现前端拍照时使用的是Canvas Api提供了toDataURL()方法将画布中的图形转换为图片,而默认情况下,toDataURL()方法把图形转变成Base64编码格式的png,其格式为data:image/png;base64,xxxxx,而,后面的内容才是接口中需要的部分,所以需要对字符串进行切割处理。前端部分具体见下图:

注意事项(项目搭建前了解)

①出现qps不足如何解决

Open api qps request limit reached

这个问题官方也给出了具体的解决方案,在百度云控制台可以免费领取测试额度,也是对开发者的一个福利。

此处贴上免费资源领取地址:https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F%3F_%3D1652277767387%26fromai%3D1#/ai/face/overview/resource/getFree

②oauth 获取错误

0 [main] WARN com.baidu.aip.client.BaseClient  - oauth get error, current state: STATE_TRUE_CLOUD_USER{  "error_msg": "IAM Certification failed",  "error_code": 14}

具体原因:

仔细检查:APP_ID、API_KEY、SECRET_KEY字符串中是否有空格

项目总结

使用百度云AI把项目整体搭建下来,可以很完美的实现最终的效果,人脸的识别速度也是相当迅速的,一些细节处理的特别到位,比如:在进行人脸识别的过程中眼睛必须对准摄像头,当你的眼睛有所阻碍时,会提示的某眼处有阻碍等等。但是在并发方面支持的并不是很到位!

新鲜出炉的代码将会及时更新到Gitee仓库

以上代码属于部分实现,想要了解完整版请移步Gitee仓库:

https://gitee.com/gao-wumao/ai-face-login

SpringBoot人脸识别登录注册,附源码

2023-03-19 13:15:00

朱李思朱小龙_朱李思

2023-03-19 10:00:02

良性肿瘤要做化疗吗能治好吗_良性肿瘤要做化疗吗|世界球精选

2023-03-19 05:49:05

当恩比德MVP评选反超约基奇时,你才会发现姚明的伟大之处

2023-03-19 00:16:39

北京人力资源和社会保障局_北京最帅交警

2023-03-18 20:13:09

【天天报资讯】英国雅皮士特技飞行表演队_关于英国雅皮士特技飞行表演队的简介

2023-03-18 16:44:11

2023永川马拉松26日开赛

2023-03-18 13:15:04

天天日报丨【环球财经】紧张情绪重回市场 纽约股市三大股指17日显著下跌

2023-03-18 10:10:36

3000万美元的Behemoth最富有的新房地产上市

2023-03-18 06:57:23

《最后的生还者》第二季不会因游戏差评而改剧情

2023-03-18 02:03:35

全球热推荐:【防弹少年团/闵玧其】当有人让你用美人计勾引他 a

2023-03-17 22:13:51

焦点简讯:西媒:阿根廷vs巴拿马友谊赛球票已被抢购一空

2023-03-17 19:20:38

名侦探柯南道具制作_名侦探柯南589_全球报资讯

2023-03-17 17:18:43

动态:唯美的词组三字_唯美三字词语

2023-03-17 15:02:24

焦点资讯:电脑硬件有哪些组成_电脑硬件有哪些

2023-03-17 12:43:40

昌红科技3月17日盘中涨幅达5%

2023-03-17 10:24:45

英集芯:3月16日融资买入1533.08万元,融资融券余额8265.32万元

2023-03-17 08:45:54

南宁市2023年春季新兵入伍欢送仪式圆满举办

2023-03-17 05:14:13

今日关注:杨烁代驾是哪一部电视剧我们都要好好的_杨烁代驾是哪一部电视剧

2023-03-17 00:49:24

报道:比强更强,森蓝ES5快充版发布:售价24980元起

2023-03-16 21:05:57

玉溪红塔区:抢抓电商直播红利 打造经济发展新引擎 全球热门

2023-03-16 18:22:13

真包含符号下面是一横还是两横(真包含符号怎么打)

2023-03-16 16:22:01

拔罐器品牌排行榜前十

2023-03-16 14:26:26

佳能3680打印机驱动官方下载_佳能3680打印机驱动

2023-03-16 12:18:06

天天速看:卖房筹款为地贫儿博新生 治疗费告罄待援手

2023-03-16 10:04:01

冰岛普洱茶多少钱一斤_普洱茶多少钱一斤-每日简讯

2023-03-16 06:40:10

加拿大签证照片尺寸多少_加拿大签证照片尺寸

2023-03-16 01:42:38

今日为你唱首歌歌词是什么歌_为你唱首歌歌词_环球快消息

2023-03-15 21:59:19

最佳投顾如何养成?广发高阶投顾笔记重磅分享|焦点热文

2023-03-15 19:13:44

汉中兴汉胜境景区门票价格_汉中兴汉胜境景区-每日热讯

2023-03-15 16:57:00

反诈宣传进校园 世界简讯

2023-03-15 14:51:50

市卫健局开展义务植树活动

2023-03-15 12:23:31

普洱市春茶大面积开采 春茶干毛茶价格在60至200元/千克_全球聚看点

2023-03-15 10:01:13

沪深股通|中源协和3月14日获外资买入0.01%股份 天天快报

2023-03-15 08:36:13

当前动态:高速超速罚款怎么处理

2023-03-15 04:50:22

速看:国产SUV巅峰对决,传祺GS8 PK 长安CS95PLUS,你站谁?

2023-03-14 23:54:22

环球热议:包钢股份: 包钢股份2023年第一次临时股东大会法律意见书

2023-03-14 20:20:33

环球热头条丨今日如何查询淘宝小号信誉

2023-03-14 18:04:07

环球速读:立方制药抗抑郁药盐酸文拉法辛缓释片获批

2023-03-14 15:53:57

火刺眼蜥蜴厉害吗_火刺眼蜥蜴

2023-03-14 14:00:05

温州市“金融知识进高校·防范风险保平安”系列活动启动 全球聚焦

2023-03-14 11:18:56

神剑股份:3月13日融资净买入412.17万元,连续3日累计净买入510.95万元

2023-03-14 09:09:13

光伏切割设备景气度上行 宇晶股份2022年业绩扭亏为盈

2023-03-14 06:19:02

个人说明模板_个人说明 幸福 精选

2023-03-14 00:53:49

华立股份股东户数下降1.52%,户均持股18万元

2023-03-13 20:44:03

环球视讯!黔西南州公安:“连心卡”搭起平安守护“连心桥”

2023-03-13 18:00:30

党徽怎么画简单又好看_国徽怎么画_环球速看料

2023-03-13 15:57:17

全球微资讯!个人账户养老金领完了怎么办?统筹养老金和个人账户养老金的区别是什么?

2023-03-13 13:06:57

法英两国决定加强合作打击非法移民 视点

2023-03-13 11:02:51

当前速看:安徽省外商投资促进中心

2023-03-13 08:48:35

每日速递:玄关挂黄色画好不好 玄关挂黄色画行吗

2023-03-13 04:40:10

咬耳朵是什么暗示(咬耳朵是什么意思)

2023-03-12 22:32:17

当前讯息:北京汽车交易下降明显,降幅高于全国24%!

2023-03-12 18:14:59

内饰科技感有大幅提升,全新一代福特Mustang野马大量实拍图发布-要闻速递

2023-03-12 14:52:30

2月广义货币增长12.9%,人民币贷款增加1.81万亿元

2023-03-12 11:04:05

观热点:茭白笋做法步骤_怎样炒茭白笋

2023-03-12 06:50:49

2022年离婚没财产还欠债应该怎么判

2023-03-12 01:02:28

饺子需要提前一晚解冻? 环球信息

2023-03-11 20:02:32

全球热推荐:大象象征什么含义_大象象征着什么意义_寓意

2023-03-11 15:51:50

24的因数有哪些最大是几最小是几_24的因数有哪些是质数

2023-03-11 12:12:07

12分,正负值+23队内最高!76人悍将稳健发挥 登哥大帝好帮手-天天快讯

2023-03-11 12:14:55

梅花扳手型号规格_梅花扳手型号规格

2023-03-11 08:52:00

德昂族的民族风俗

2023-03-11 06:55:58

【环球新要闻】新车价格暴降之后,合资车的二手车行情天塌了

2023-03-11 06:41:13

在强基固本之下,一汽丰田的下一个千万销量目标或将不再遥远

2023-03-11 00:57:05

2023年中山横栏镇积分入学预约方式

2023-03-10 21:03:37

qq飞车飞跃现在怎么样_qq飞车飞跃改左还是右

2023-03-10 20:50:20

三星GalaxyFold特别版可能很快推出

2023-03-10 18:02:38

浦东最小街道将现精品社区花园

2023-03-10 16:09:48

腌酸菜的腌制方法最简单_腌酸菜的腌制方法

2023-03-10 15:29:07

国海证券资管石雨萌:全面实施注册制对量化策略是一大利好|全球球精选

2023-03-10 14:11:36

贵州:巡审联动 提升监督效能

2023-03-10 11:01:46

12345678数字大写怎么写_数字1234567890的中文大小写是什么

2023-03-10 09:49:15

其他应收款的核算方法_其他应收款的核算内容

2023-03-10 09:47:46

津琴科任意球踢葡体后卫脸遭调侃:绝对故意的,此前2人冲突

2023-03-10 06:56:32

dnf满级戒指满级婚房属性_婚房属性

2023-03-10 03:50:42

青春期头发一天长多少_头发一天长多少

2023-03-10 02:07:34

官方:小西蒙尼被补招进入阿根廷国家队大名单

2023-03-09 22:05:25

floor函数用法及例子_floor函数

2023-03-09 20:03:12

门禁ic卡和id卡_门禁卡是ic卡还是id卡

2023-03-09 18:34:22

新日股份接待海通证券等多家机构调研|即时

2023-03-09 17:31:43

环球热资讯!师生文案短句干净治愈阳光_师生文

2023-03-09 15:43:54

徐四的二人转正戏大全_xusiduo 天天日报

2023-03-09 14:04:32

每日头条!55寸液晶电视尺寸多大的_55寸液晶电视尺寸多大

2023-03-09 12:54:20

笔记本电脑连接wifi上不了网_笔记本电脑连接wifi

2023-03-09 11:45:47

世界今亮点!2023年全球及中国公有云行业现状及前景分析

2023-03-09 09:52:46

“空中造楼机”首次亮相海南 全球热点评

2023-03-09 07:36:05

全球今日报丨云南快乐十分前三组今天、开奖结果_云南快乐十分出奖结果

2023-03-09 07:12:21

队报透露巴黎首发:梅西搭档姆巴佩,532阵型对决拜仁

2023-03-09 02:11:14

全球微速讯:一直娱官网下载苹果_一直娱官网

2023-03-08 21:50:51

人力资源公司账务处理实务_人力资源公司账务处理 实时焦点

2023-03-08 21:35:11

数列_说一说数列的简介|焦点滚动

2023-03-08 18:55:00

球星孙继海在英超踢进几个球

2023-03-08 17:56:01

港股收评|恒指跌2.35%险守两万点大关 在线教育、汽车板块跌幅居前

2023-03-08 16:48:52

要闻:嵌入式开发

2023-03-08 14:50:20

win7查看电脑配置参数_win7查看电脑配置 天天要闻

2023-03-08 14:48:51

碧桂园服务跌6% 机构指公司经营面临挑战 下调今明两年盈利预测和评级|环球最新

2023-03-08 11:46:00

神座

2023-03-08 11:49:41

沪指低开0.4%,数据确权板块逆市飘红

2023-03-08 10:01:50

加油吧实习生结局

2023-03-08 08:15:25