说明:
(1)本篇博客内容:介绍人脸入库流程,人脸登录流程;人脸入库流程;Chrome开启视频调试模式,以便能够在本机的不安全域名的情况下,也能去开启摄像头;
目录
在人脸登录之前,首先要人脸入库;
(1)首先,在创建管理员账号的时候,勾选"人脸登录";
(2)点击"获取人脸"后,会捕捉人脸在画面中的动态图,获得人脸数据;(其实,获得的是一个人脸的Base64的数据)
(3)然后,在添加新的管理员时,其会判断是否有人脸数据;
● 如果没有人脸,会使用前面我们在【51:第五章:开发admin管理服务:4:开发【新增admin账号,接口】;】中编写的逻辑;
● 如果有人脸,需要做一个人脸入库的操作(即,把人脸的Base64数据,保存到MongoDB的GridFS中);保存完毕后,会得到FaceId;然后,FaceId和其他信息一起,传到后端逻辑,去创建新管理员账号;
(4)这样以后,我们这次创建的管理员账号,后续就可以使用人脸去登录了;
(1)管理员在登录的时候,要想使用人脸登录;需要勾选"使用人脸登录";
(2)点击登录后,会获得人脸数据;并携带人脸数据到后端(即把此时捕捉的人脸的Base64的数据,带到后端);
(3)然后,在后端会做一个校验:其实就是用【在(2)中捕捉的人脸数据】和【之前人脸入库时,保存在MongoDB的GridFS中的人脸数据】进行对比和匹配;
● 这个匹配是一个相似度匹配;比如,我们可以在后台设置;比如,我们可以设置,只要两张人脸相似度>=90%,就认为其OK;
(4)如果人脸校验成功,直接就是登录成功;如果校验失败,可以返回登录页,让用户再试试;
(1)课程中,使用的是旧版浏览器,其报的错是:
……………………………………………………
(2)而自己的浏览器是最新版本;自己在勾选"人脸登录"时,报的错是: 【TypeError: Cannot read properties of undefined (reading 'getUserMedia')】;
● 可以参考【解决 “TypeError: Cannot read properties of undefined (reading ‘xxx‘)“】;
● 其错误逻辑应该是:【因为我们的域名是非https的,即非安全的】→【所以,前端的getUserMedia()这个方法是不能工作的】→【因此,调用摄像头,获取人脸头像的逻辑,就G了】;
……………………………………………………
(3)解决策略:
● 策略1:把本地的自己设置的那个域名,改为https;
● 策略2:在谷歌浏览器【chrome://flags/#unsafely-treat-insecure-origin-as-secure】中,进行如下设置:
………………………………………………
(4)效果;
● 要保证自己PC的摄像头是OK的,而且是unlock的状态;
● 在新增admin管理员账号那儿,是OK的;
● 在admin管理员登录那儿,也是OK的;
……………………………………………………
(5)声明:
● 我们每次重启电脑后,都需要按照(3)中的策略,重新设置一下;
● 在生产环境中,我们在部署项目的时候,会把项目的域名设置为https;所以,在实际生产环境,是没有这儿说的问题的;