更新记录
1.0.0(2021-03-29)
初始版本 可以正常使用百度离线人脸采集
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.1 - 11.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 | 适用版本区间:9 - 14 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
使用步骤
-
注册百度在管理控制台中新建一个离线采集应用,并且请填写正确的包名
-
将百度授权文件aip.license放在如下文件夹中。
Android:nativeplugins/ChuJC-Baidu-Face-Collect/android/assets/aip.license IOS:nativeplugins/ChuJC-Baidu-Face-Collect/ios/aip.license。
注意文件夹名称与路径必须完全一致,没的对应的文件夹请创建,nativeplugins 文件夹必须放在项目根目录下
-
配置插件,路径:manifest.json
>
App原生插件配置>
选择云端插件 -
权限添加权限 路径:manifest.json
>
App权限配置
Android 需要添加如下权限
android.permission.READ_EXTERNAL_STORAGE 读取手机外部存储权限
android.permission.WRITE_EXTERNAL_STORAGE 写入手机外部存储权限
android.permission.CAMERA 拍照权限
IOS需要添加如下权限
NSPhotoLibraryUsageDescription (相册)
调用示例
可以参考示例工程
const Face = uni.requireNativePlugin('ChuJC-Baidu-Face-Collect');
...
// 需要先调用 init 方法初始化SDK
// 完整的 License ID
// iOS License ID: testplugin-face-ios
// 安卓 License ID: testplugin-face-android
initFaceSdk() {
Face.init({
appName: "testplugin" // appName 只需要填写前半部分
}, result => {
const msg = JSON.stringify(result);
console.log(msg)
if (result.code == 200) {
this.faceInitStatus = true
}
})
},
handelFaceCollect(random) {
if (!this.faceInitStatus) {
uni.showModal({
title: "SDK初始化失败",
content: "请检查初始化参数、授权文件",
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
return;
}
let livenessType = [ 'Eye', 'Mouth', 'HeadRight', 'HeadLeft', 'HeadUp', 'HeadDown' ];
const randomNum = parseInt(Math.random()*(5)) + 2;
let lelivenessTypeList = this.getRandomArrayElements(livenessType, randomNum);
Face.collect({
isActionLive: "true", // 是否活体检查 false
isLivenessRandom: random ? "true" : "false", // 活动检查有效,是否随机监测动作
livenessTypeList: lelivenessTypeList // 活动检查有效,检查动作列表
}, result => {
const msg = JSON.stringify(result);
console.log(msg)
uni.showModal({
title: "返回信息",
content: result.msg,
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
if(result.hasOwnProperty("image")) { // 识别成功后返回 image
this.status = true;
this.image = "data:image/png;base64," + result.image;
}
});
}
...
返回结构
{
"code": 200,
"msg" : "说明......",
"image": "" // 采集成功才返回
}
code | 说明 |
---|---|
200 | 识别成功 |
401 | 授权异常 |
400 | 错误 |
402 | 超时 |
可以设置动作
需要传递为数组 [ 'Eye', 'Mouth', 'HeadRight', 'HeadLeft', 'HeadUp', 'HeadDown' ]
- Eye 眨眨眼
- Mouth 张张嘴
- HeadRight 缓慢向右转头
- HeadLeft 缓慢向左转头
- HeadUp 缓慢抬头
- HeadDown 缓慢低头
其他
目前仅开发了如上调用方法,如果还有其他需求、问题可以发邮件到john1668@qq.com