更新记录
2.4.0-1.0.2(2024-03-26) 下载此版本
旷世人脸算法的插件,
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.1 - 12.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
uni-app 旷世算法 SDK 文档
1.概述
此文档是给基于我们硬件开发自己 uni-app 的开发人员阅读的,描述了 uni-app 旷世人脸算法 sdk 插件的集成和使用。
1.1 授权说明:
旷世算法授权和应用数据绑定,如果把我们的 demo 卸载或者在系统设置里面把 demo 的数据清除了会导致算法丢失。
1.2 uniapp 打包说明:
由于算法是绑定包名的,所以需要使用我们授权后的算法时要使用我们指定的包名和指定的自有证书: 包名为:iot.facereco.smart.terminal 自有证书请联系商务获取
1.3 uniapp 基座安装说明
需要手动安装基座,不能使用 HBuilder 自动运行来安装基座,HBuilder 自动运行安装基座会先卸载在安装,这样会导致算法授权丢失。
2.历史版本
版本号 | 日期 | 修订说明 | 修订人 |
---|---|---|---|
2.4.1-1.0.0 | 2023-10-10 | 初稿 | Jimmy |
2.4.1-1.0.1 | 2023-10-13 | 新增单机录入功能 | Jimmy |
2.4.1-1.0.2 | 2024-03-16 | 支持高通主板 | Jimmy |
3.插件使用
3.1 算法插件
3.1.1 算法插件获取
const facePassModule = uni.requireNativePlugin('ES-FacePass-ESFacePassModule');
3.1.2 算法初始化
算法只需要全局初始化一次 参数说明: 第一个 JsonObject 表示人脸识别和检测的参数配置,只有符合参数配置的人脸才会被检测到 第二个 JsonObject 表示人脸入库的参数配置,只有符合参数配置的人脸才能入库成功 返回值 ret 是一个 JsonObject 只有 code 为 0 才表示初始化成功了
const ret = facePassModule.initFacePass({
"faceMinThreshold": 150,
"poseThreshold": {
"roll": 40,
"pitch": 40,
"yaw": 40
},
"blurThreshold": 0.5,
"lowBrightnessThreshold": 30,
"highBrightnessThreshold": 230,
"brightnessSTDThreshold": 230,
"searchThreshold": 60,
"livenessThreshold": 60,
"livenessEnabled": false,
"rgbIrLivenessEnabled": false
}, {
"faceMinThreshold": 80,
"poseThreshold": {
"roll": 40,
"pitch": 40,
"yaw": 40
},
"blurThreshold": 0.7,
"lowBrightnessThreshold": 30,
"highBrightnessThreshold": 230,
"brightnessSTDThreshold": 230
});
const json = JSON.parse(JSON.stringify(ret));
const code = json["code"];
const msg = json["msg"];
if (code != 0) {
console.error(`算法初始化失败,code:${code} msg:${msg}`)
return
}
console.error("算法初始化成功")
3.1.3 算法资源释放
不需要算法时使用
facePassModule.releaseFacePass()
3.1.4 通过照片添加人脸到算法库
功能和参数说明:此方法添加一张 base64 的图片到算法库 返回通用的 JsonObject 对象:code 为 0 表示添加成功,其它 code 参考全局错误 code 表 成功状态下的 data ,JsonObject 参数说明:data 中一个为 faceToken 的 key,这个 key 表示人脸的唯一标识,需要作为用户关系和算法绑定的标识,算法识别成功后也会返回一个 faceToken。
const addResult = facePassModule.addFaceByBase64("base64图片")
3.1.5 通过特征值添加人脸到算法库
返回的结果参考 3.1.4 的结果
const addResult = facePassModule.addFaceByFeature("特征值xx")
3.1.6 删除人脸
删除算法库中的人脸,参数为添加人脸时返回的 faceToken
const deleteResult = facePassModule.deleteFace("faceToekn")
3.1.7 删除全部人脸
删除算法库中的所有人脸
const deleteResult = facePassModule.deleteAllFace()
3.1.8 获取算法库中的人脸数量
const countResult = facePassModule.getFaceCount()
3.1.9 照片管理
通过回调函数中的 photoKey 的值来获取对应的照片,返回的内容为一个 String 的是照片的Base64 内容。每个 key 只能获取一次,获取过后就会被删除。 在识别流程或者录入流程结束后,确定不需要获取照片之后,应该调用删除所有照片接口释放资源。
识别成照片获取
facePassModule.getRecognitionSuccessPhoto(this.successPhotoKey);
获取识别失败照片
facePassModule.getRecognitionFailurePhoto(this.failurePhotoKey);
获取活体失败照片
facePassModule.getLivingFailurePhoto(this.livingPhotoKey);
获取录入成功照片
facePassModule.getEnrollSuccessPhoto(this.enrollSuccessPhotoKey);
获取人脸检测成功的照片
facePassModule.getFaceDetectSuccessPhoto();
删除所有照片
facePassModule.clearRecognitionPhoto();
3.2 识别和单机录入插件
3.2.1 插件使用
识别和单机录入插件是以 Component 的方式提供的,提供了相机预览和识别功能。如果不想显示相机画面,可以把它的大小设置为 1px 用其它控件遮挡住。
<ES-FacePass-ESRecognitionComponent ref="faceRecognition" style="width:800;height:1280" />
3.2.2 打开相机
回调参数说明:ret 为 int 类型,401 表示相机打开成功,402 表示相机打开失败
// 打开相机
this.$refs.faceRecognition.openCamera(ret => {});
3.2.3 预览相机
一般调用打开相机后,就可以立即调用相机预览,为了解耦和所以分开了两个方法
// 开始预览
this.$refs.faceRecognition.startPreview()
3.2.4 关闭相机
在不需要相机时,关闭相机。也可以单独调用 stopPreview 关闭预览
// 关闭相机
this.$refs.faceRecognition.closeCamera();
// 只关闭预览
// this.$refs.faceRecognition.stopPreview();
3.2.5 开始人脸检测
参数说明: 第一个 JsonObject 参数为预留参数,可以先传空对象 第二个回调表示人脸检测的状态:ret 为 201 表示无人脸,ret 为 202 表示存在人脸 第三个回调在需要获取检测到的人脸图片时才需要传,一般不需要,这个回调可能会消耗系统资源,因为检测到人脸就实时回传图片了。回调的 ret 表示人脸图片的 base64
this.$refs.faceRecognition.startFaceDetect({}, ret => {}, null);
3.2.6 停止人脸检测
页面销毁,或者不需要人脸检测时调用
this.$refs.faceRecognition.stopFaceDetect()
3.2.7 开始人脸识别
this.$refs.faceRecognition.startFaceRecognition({},ret => {})
参数说明: 回调的 ret 为一个 JsonObject 对象,分为下面三种情况 code:有三个值 301 表示识别成功,302 表示失败失败,303 表示活体验证不通过 photoKey: 表示识别的照片 key,使用 3.1.9 照片获取方法获取 targetId:表示人脸 id is1V1:表示是否为 1:1 比对
识别成功: faceToken:表示识别出来的人脸唯一标识,入库的时候也会返回这个 faceToken,根据 faceToken 找出关联的用户信息 searchScore:表示得出的相似度分值
{
"code": 301,
"faceToken": "xxx",
"searchScore": 99.9999,
"photoKey": "xxx",
"targetId": 1,
"is1V1": false
}
识别失败:
{
"code": 302,
"searchScore": 33.11,
"photoKey": "xxx",
"targetId": 1,
"is1V1": false
}
活体不通过: livennessScore:表示活体得分
{
"code": 303,
"livenessScore": 33.11,
"photoKey": "xxx",
"targetId": 1,
"is1V1": false
}
识别结果回调特别说明: sdk 人脸识别会连续识别,可能会出现成功后,人脸晃动一下又失败的情况,使用者应该在收到失败回调时加上时间判断,例如连续 3s 失败才提示失败
3.2.8 开始 1:1 识别
功能说明:传入一张照片和设备摄像头面前的图像进行比对,超过 searchThreshold 就算通过。
参数说明: 第一个 JsonObject 有两个必传参数 searchThreshold:表示比对通过的分值,相似度超过这个值表示通过。 photo:表示需要比对的图片,格式为 base64
ret 回调参考 3.2.5 人脸识别回调说明
this.$refs.faceRecognition.start1V1Recognition({
"searchThreshold": 65,
"photo": base64
}, ret => {});
3.2.9 停止识别
在页面销毁,或者不需要人脸识别时使用
this.$refs.faceRecognition.stopFaceRecognition()
3.2.10 开始单机录入
用于实现使用设备相机录入人脸的功能 参数说明:timeout 表示录入超时时间,单位毫秒。如果这个时间内没有录入成功就会响应录入失败,停止录入流程。 回调返回通用的 JsonObject 对象:code 为 0 表示录入成功,其它 code 参考全局错误 code 表 成功状态下的 data ,JsonObject 参数说明: faceToken:这个 key 表示人脸的唯一标识,需要作为用户关系和算法绑定的标识,算法识别成功后也会返回一个 faceToken。 photoKey:这个 key 表示录入成功照片的 key,使用 3.1.9 照片获取方法获取录入成功照片
this.$refs.faceRecognition.startFaceEnroll({"timeout":15000}, ret=> {})
3.2.11 停止单机录入
this.$refs.faceRecognition.stopFaceEnroll()