更新记录
1.0.3(2023-12-11)
- android兼容arm64-v8a
1.0.2(2023-07-19)
1、添加无动作人脸采集 2、iOS优化权限判断
1.0.1(2023-06-25)
- 初始版
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:11 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
特别提醒
- 购买本插件前,请先试用,并充分自测确认满足需求之后再行购买。虚拟物品一旦购买之后无法退款。
- 一定要使用正式版的License文件,不要使用测试版的License, 否则造成不可逆的后果自行负责;
- 如有使用上的疑问、bug,可以QQ群(345533496)反馈;
- 请在合法范围内使用,若使用本插件做非法开发,本方概不负责;
准备工作
- 进入百度人脸智能云申请、下载License(下载后的文件名字一定不要修改,否则SDK将无法正常使用),官网:https://console.bce.baidu.com/ai/#/ai/face/overview/index下图是已创建授权,没有的需先创建授权。(新建授权需要的资料iOS:bundle id 、 Android:包名,签名MD5)。
- 官方文档:https://ai.baidu.com/ai-doc/FACE/Mk37c1pue
插件接入
1.创建文件夹
在项目根目录下创建nativeplugins文件夹购买或试用插件将下载的授权文件License 放入Android:nativeplugins/LY-BDFace/android/assets/idl-license.face-android,iOS:nativeplugins/LY-BDFace/ios/idl-license.face-ios,文件夹和License名称必须和这里的一致。(没有对应的文件夹自行创建)
2.选择插件打包(打自定义基座或云打包)
购买或试用该插件然后选中购买该插件项目的manifest.json 文件,选择App原生插件配置,选中云端插件,勾选对应的插件,配置相应的权限(见最下面”隐私、权限声明“)
3.引入插件
const bdFace = uni.requireNativePlugin('LY-BDFace');
4.调用
let licenseID = "";
if (plus.os.name == "Android") {
licenseID = "换成自己的Android授权ID";
}else if(plus.os.name == "iOS"){
licenseID = "换成自己的iOS授权ID";
}
console.log(licenseID)
// 原图
var imagePath = plus.io.convertLocalFileSystemURL("_doc/ImagePath");
// 抠图
var cropImagePath = plus.io.convertLocalFileSystemURL("_doc/CropImagePath");
let time = new Date().getTime();
var name = time + ".jpg"
bdFace.gatherFaceInfo({
licenseID: licenseID,
noActionAcquisition:false,//无动作采集--默认false
actions: ["Eye", "Mouth", "HeadRight", "HeadLeft"],//采集动作组 --noActionAcquisition=true无效
isRandom: true, //采集动作随机 默认按顺序--noActionAcquisition=true无效
qualityLevel: 0, //质量等级 0、默认 1、宽松 2、严格
timeOut: "15", //单个动作采集时间 --noActionAcquisition=true无效
maxResultSize: 0.2, //压缩期望值 0.2M
imagePath:imagePath,//存放原图
cropImagePath:cropImagePath,//存放抠图
imageName:name,
camera: "front", //摄像头 front back 默认前置(目前后置摄像头仅iOS有效)
isSound: true, //语音
tipsTextColor: "#6450a4", //提示文字色值
tipSubTextColor: "#ff00ff", //副标题提示语
progressBackgroundColor: "#666666", //刻度线背景色
progressScaleColor: "#0000ff", //刻度线背色
backgroundColor: "#FFFFFF", //背景色
bottomCopyright: "人脸识别uniapp原生插件", //底部版权文案
copyrightColor: "#00ff00", //版权文字色值
showBottomImage: false, //显示底部logo图
returnResultImage: true, //返回采集图片,默认返回
switchCamera: true, //是否可切换摄像头 右上角多个切换摄像头按钮
tips: { //提示文案不传使用默认值
face_in_rect: "把你的脸移入框内",
head_right:"头向右缓慢转"
}
}, res => {
if(res.code == "100"){//licenseID为空
}else if(res.code == "200"){//鉴权成功,初始化成功
}else if(res.code == "201"){//采集成功
// res={
// code:"201",
// msg:"采集成功",
// originalImage:"原图base64",
// originalCropImage:"人脸抠图Base64",
// originalImagePath:"原图路径",
// originalCropImagePath:"人脸抠图路径"
// }
//this.collectionImage = res.originalImage
//原始图
this.collectionImage = res.originalImagePath;
//抠图
this.originalCropImage = res.originalCropImagePath;
console.log("原图:"+res.originalImagePath);
console.log("抠图:"+res.originalCropImagePath);
}else{//失败
}
uni.showToast({
title:res.msg,
icon:'none',
duration:1500
})
});
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
licenseID | String | 授权ID必传 |
actions | array | 动作组(默认["Eye","Mouth","HeadUp"]) |
isRandom | bool | 采集动作随机 默认(false)不随机 |
qualityLevel | int | 采集等级(0:默认1:宽松2:严格)默认0 |
timeOut | int | 采集超时 |
maxResultSize | float | 返回图片期望大小 默认0.2M |
imagePath | string | 原图存储路径 |
cropImagePath | String | 人脸抠图存储路径 |
imageName | String | 图片名称 |
camera | String | 前后摄像头 front back默认:"front"(仅iOS后置摄像头有效) |
isSound | bool | 是否显示右上角喇叭 默认:true |
tipsTextColor | String | 提示文字色值 |
tipSubTextColor | String | 副标题提示文字色值 |
progressBackgroundColor | String | 刻度线背景色 |
progressScaleColor | String | 选中刻度线色值 |
backgroundColor | String | 背景色 |
bottomCopyright | String | 底部版权 |
copyrightColor | String | 版权色值 |
showBottomImage | true | 是否底部logo |
switchCamera | true | 是否可切换摄像头 右上角多个切换摄像头按钮 |
tips | objc | 提示语不传使用默认值 |
- 动作组说明
参数 | 说明 |
---|---|
Eye | 眨眨眼 |
Mouth | 张张嘴 |
HeadLeft | 向左缓慢转头 |
HeadRight | 向右缓慢转头 |
HeadUp | 缓慢抬头 |
HeadDown | 缓慢低头 |
- tips说明
参数 | 默认 |
---|---|
face_in_rect | 请把脸移入框内 |
face_zoom_in | 请将脸部靠近一点 |
face_zoom_out | 请将脸部离远一点 |
occ_left_eye_shutdown | 左眼未睁开 |
occ_right_eye_shutdown | 右眼未睁开 |
occ_head_up | 请略微抬头 |
occ_head_down | 请略微低头 |
occ_head_left | 请略微向左转头 |
occ_head_right | 请略微向右转头 |
occ_left_eye | 左眼有遮挡 |
occ_right_eye | 右眼有遮挡 |
occ_nose | 鼻子有遮挡 |
occ_mouth | 嘴部有遮挡 |
occ_left_check | 左脸颊有遮挡 |
occ_right_check | 右脸颊有遮挡 |
occ_chin | 下颚有遮挡 |
low_light | 请使环境光线再亮些 |
keep | 请握稳手机 |
timeout | 检测超时 |
left_eye_close | 左眼未睁开 |
right_eye_close | 右眼未睁开 |
eye | 眨眨眼 |
mouth | 张张嘴 |
head_right | 向右缓慢转头 |
head_left | 向左缓慢转头 |
head_up | 缓慢抬头 |
head_down | 缓慢低头 |
good | 非常好 |
- 回调说明
状态码 | 说明 |
---|---|
res.code == 100 | LicenseID为空 |
res.code == 200 | 鉴权成功 |
res.code == 201 | 采集成功(返回采集图片base64已拼接data:image/png;base64,)res.originalImage |
- 清除缓存图片
bdFace.clearCacheWithFilePath(type == 0 ? this.collectionImage : this.originalCropImage,res=>{
if(res.result == true){
uni.showToast({
title:"删除成功",
icon:'none',
duration:1500
})
}else{
uni.showToast({
title:"删除失败",
icon:'none',
duration:1500
})
}
});
完整示例
<template>
<view class="content">
<view class="btn" @click="btnAction">
点击采集
</view>
<image :src="collectionImage" mode="widthFix"
style="width: 200rpx;margin-top: 30rpx;background-color: aquamarine;" />
<text @click="clearCacheWithFilePath(0)">删除缓存原图</text>
<image :src="originalCropImage" mode="widthFix"
style="width: 200rpx;margin-top: 30rpx;background-color: aquamarine;" />
<text @click="clearCacheWithFilePath(1)">删除缓存抠图</text>
</view>
</template>
<script>
const bdFace = uni.requireNativePlugin('LY-BDFace');
export default {
data() {
return {
collectionImage: '', //采集成功图像
originalCropImage: '',
silentliveScore: '' //离线RGB 静默活体得分
}
},
methods: {
/**
* Eye: 眨眨眼
* Mouth: 张张嘴
* HeadLeft: 向左缓慢转头
* HeadRight:向右缓慢转头
* HeadUp:缓慢抬头
* HeadDown:缓慢低头
*/
btnAction() {
// LicenseId
let licenseID = "";
if (plus.os.name == "Android") {
licenseID = "******";
} else if (plus.os.name == "iOS") {
licenseID = "*******";
}
console.log(licenseID)
// 原图
var imagePath = plus.io.convertLocalFileSystemURL("_doc/ImagePath");
// 抠图
var cropImagePath = plus.io.convertLocalFileSystemURL("_doc/CropImagePath");
let time = new Date().getTime();
var name = time + ".jpg"
bdFace.gatherFaceInfo({
licenseID: licenseID,
noActionAcquisition:false,//无动作采集--默认false
actions: ["Eye", "Mouth", "HeadRight", "HeadLeft"],//采集动作组 --noActionAcquisition=true无效
isRandom: true, //采集动作随机 默认按顺序--noActionAcquisition=true无效
qualityLevel: 0, //质量等级 0、默认 1、宽松 2、严格
timeOut: "15", //单个动作采集时间 --noActionAcquisition=true无效
maxResultSize: 0.2, //压缩期望值 0.2M
imagePath: imagePath, //存放原图
cropImagePath: cropImagePath, //存放抠图
imageName: name,
camera: "front", //摄像头 front back 默认前置(目前仅iOS后置摄像头有效)
isSound: true, //语音
tipsTextColor: "#6450a4", //提示文字色值
tipSubTextColor: "#ff00ff", //副标题提示语
progressBackgroundColor: "#666666", //刻度线背景色
progressScaleColor: "#0000ff", //刻度线背色
backgroundColor: "#FFFFFF", //背景色
bottomCopyright: "人脸识别uniapp原生插件", //底部版权文案
copyrightColor: "#00ff00", //版权文字色值
showBottomImage: false, //显示底部logo图
returnResultImage: true, //返回采集图片,默认返回
switchCamera: true, //是否可切换摄像头 右上角多个切换摄像头按钮
tips: { //提示语
face_in_rect: "把你的脸移入框内",
head_right: "头向右缓慢转"
}
}, res => {
if (res.code == "100") { //licenseID为空
} else if (res.code == "200") { //鉴权成功,初始化成功
} else if (res.code == "201") { //采集成功
// res={
// code:"201",
// msg:"采集成功",
// originalImage:"原图base64",
// originalCropImage:"人脸抠图Base64",
// originalImagePath:"原图路径",
// originalCropImagePath:"人脸抠图路径"
// }
//原始图
this.collectionImage = res.originalImagePath;
//抠图
this.originalCropImage = res.originalCropImagePath;
console.log("原图:" + res.originalImagePath);
console.log("抠图:" + res.originalCropImagePath);
} else { //失败
}
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1500
})
});
},
filterBase64(codeImages) {
return codeImages.replace(/[\r\n]/g, "");
},
//清除图片
clearCacheWithFilePath(type) {
bdFace.clearCacheWithFilePath(type == 0 ? this.collectionImage : this.originalCropImage, res => {
if (res.result == true) {
uni.showToast({
title: "删除成功",
icon: 'none',
duration: 1500
})
} else {
uni.showToast({
title: "删除失败",
icon: 'none',
duration: 1500
})
}
});
}
}
}
</script>
<style>
.content {
width: 750rpx;
flex: 1;
flex-direction: column;
align-items: center;
display: flex;
flex-direction: column;
}
.btn {
display: flex;
align-items: center;
justify-content: center;
width: 750rpx;
height: 80rpx;
margin-top: 20rpx;
background-color: chocolate;
color: #ff8700;
}
</style>
超好用插件推荐
百度OCR识别:https://ext.dcloud.net.cn/plugin?id=12971
华为扫描:https://ext.dcloud.net.cn/plugin?id=11645
海康威视:https://ext.dcloud.net.cn/plugin?id=12648
高德定位后台定位、应用保活:https://ext.dcloud.net.cn/plugin?id=12620
加斜体水印:https://ext.dcloud.net.cn/plugin?id=12651