上一篇介绍了NodeJS实现人脸识别中的人脸注册,搜索,检测功能。可以看到其实抛开用户量不说,其实任何想要实现的功能最终用NodeJS都是可以实现的。今天我们来看下SDK文档关于人脸识别其他的接口,我们可以来看看整套人脸识别具体有什么功能,我们可以怎么在实际应用中去进行应用呢?
人脸更新
我们上一篇讲到了人脸注册,每个人脸会绑定一个唯一的userId, 当然,既然注册了必须要有更新功能。人脸更新就是针对userId进行更新,这时候有两种可能性:
userId存在于用户组
userId不存在用户组
第一种情况很好理解,存在即更新。那如果第二种情况呢?我们可以先看看如果人脸库存在userId的情况:
我们跑下测试下效果:
可以看到userId存在的情况下会成功更新人脸并返回图片新的face_token以及人脸相对图片的位置信息。那如果userId不存在呢?
可以看到人脸不存在会报错user is not exist。这样的返回其实也是可以的,但是人脸识别本质就是为了提升用户体验,降低操作复杂性,所以其实还有一种方案可以在用户不存在的情况进行将该人脸静默注册到人脸库,就是添加参数action_type: REPLACE。
PS:文档中这里存在一个坑:relace文档小写,实际需要大写,且选传参数文档并没有action_type这参数。
我们现在给本接口添加action_type参数:
我们现在使用不存在的userId测试一下具体效果:
可以看到如果人脸不存在直接静默注册到人脸库,这样就可以大大提升用户体验。当然这个接口一样可以添加选传参数,我就不详细演示了。我直接贴上请求参数及接口返回参数:
人脸删除
人脸删除会将用户人脸信息从用户组中进行删除。这里同样存在两种情况:
用户人脸可能只存在于一个用户组。
用户人脸可能同时存在于多个用户组。
如果用户人脸信息只存在于一个用户组,那直接删除不会出问题。如果用户人脸存在于多个用户组,我们一般不能直接全部删除,因为不同用户组可能应用于不同场景的应用。groupId指定从什么用户组删除人脸信息,如果同时从多个用户组删除则用逗号隔开。
我们先看下测试效果:
可以看到如果在对应的用户组能够找到与userId和face_token匹配的人脸,就可以删除成功。
老规矩,我直接贴上请求参数以及返回参数:
用户信息查询
这个接口的用法看标题就可以知道了,可以查询用户信息,人脸注册以及人脸更新进行静默注册都是可以选传用户信息user_info,通过这个接口查询就可以查询到用户绑定的个人信息。本接口可以直接通过用户组id以及用户的userId进行查询指定人脸的信息:
我们先看下测试结果:
可以看到返回的user_info为空,因为我注册人脸未进行保存用户个人信息。接下来贴上请求参数和返回参数:
查询用户人脸列表
一个用户可以注册多个人脸。本接口可以通过用户组id以及用户userId进行查询指定用户组中该用户所有人脸信息:
我们先看下测试结果:
返回的结果只有一张人脸信息,因为该userId对应的人脸只有一张,会返回创建或更新时间。接下来贴上请求参数和返回参数:
查询用户列表
本接口可以通过用户组id进行查询指定用户组中所有用户信息:
我们先看下测试结果:
返回的结果会有该groupId中所有userId的信息接下来贴上请求参数和返回参数:
复制用户到新的用户组
如果用户人脸已存在一个用户组,使用本接口可以直接将用户人脸信息复制到新的用户组中。这个接口官方SDK文档是有问题的,我们可以先看看请求参数和返回参数:
接口文档只有用户userId是必传参数,实际经过测试,三个参数都为必传参数。复制与被复制的人脸组都必须已经存在。
我们先看下测试结果:
删除用户
本接口可以通过将用户从某个用户组中进行删除。这个接口与人脸删除接口最大的区别是人脸删除接口是将某个用户组中指定用户的指定人脸进行删除,本接口是删除某用户组指定用户。
我们先看下测试结果:
可以看到返回success,代表用户从指定的用户组中被删除成功。接下来贴上请求参数和返回参数:
创建用户组
本接口可以创建新的用户组,若用户组已存在则会返回错误信息
我们先看下测试结果:
可以看到返回success,代表新的用户组创建成功。接下来贴上请求参数和返回参数:
删除用户组
本接口可以删除用户组,若用户组不存在则会返回错误信息
我们先看下测试结果:
可以看到返回success,代表删除用户组成功。接下来贴上请求参数和返回参数:
查询用户组列表
本接口可以查询用户组列表
我们先看下测试结果:
可以看到存在用户组有1和5。接下来贴上请求参数和返回参数:
在线活体检测
本接口主要功能有:
人脸基础信息:包括人脸框位置,人脸空间旋转角度,人脸置信度等信息。人脸质量检测:判断人脸的遮挡、光照、模糊度、完整度等质量信息。可用于判断上传的人脸是否符合标准。基于图片的活体检测:基于单张图片,判断图片中的人脸是否为二次翻拍举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节)。此能力可用于H5场景下的一些人脸采集场景中,增加人脸注册的安全性和真实性。
我们先看下测试结果:
这里最重要的返回参数有:
face_liveness:活体分数值thresholds:由服务端返回最新的阈值数据,将此参数与返回的face_liveness进行比较,可以作为活体判断的依据。 frr_1e-4:万分之一误识率的阈值;frr_1e-3:千分之一误识率的阈值;frr_1e-2:百分之一误识率的阈值。误识率越低,准确率越高,相应的拒绝率也越高
可以看到返回的thresholds值为0.97.代表基本上不可能为同一个人。因为我选择的是两张不同的网络图片。其他参数不多进行解释,接下来贴上请求参数和返回参数可以自行理解:
返回参数过多我只对必返回参数进行截图:
人脸对比
本接口主要功能有:
两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值;多种图片类型:支持生活照、证件照、身份证芯片照、带网纹照四种类型的人脸对比;活体检测:基于图片中的破绽分析,判断其中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节。);质量检测:返回模糊、光照等质量检测信息,用于辅助判断图片是否符合识别要求;
我们先看下测试结果:
这里最重要的返回参数有:
score:人脸相似得分
可以看到返回的score值为7.644287109.代表基本上不可能为同一个人。因为我选择的是两张不同的网络图片。其他参数不多进行解释,接下来贴上请求参数和返回参数可以自行理解:
到这里其实SDK关于人脸识别的所有接口都介绍完毕了。其实还有几个接口,必须账户进行企业实名认证才有权限调用,在这里我就不介绍了。本篇内容到这里差不多结束了。如果喜欢我的文章请关注我的个人公众号:周先生自留地。