更新记录
1.0.2(2023-08-09)
- 增加重新识别接口
1.0.1(2023-04-11)
支持活体识别(单目/双目活体识别)、离线识别 摄像机录入人脸、本地图片/网络图片/本地图片目录等多种方式录入人脸 摄像机实时识别对比
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 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原生插件配置”->”云端插件“列表中删除该插件重新选择
前言
虹软-人脸识别增值版 Android平台
虹软SDK版本号: Android:V4.2
功能
- 支持活体识别(单目/双目活体识别)、离线识别
- 摄像机录入人脸、本地图片/网络图片/本地图片目录等多种方式录入人脸
- 摄像机实时识别对比
文档:https://www.jianshu.com/p/37496a316ddf?v=1679477389550
虹软开发者平台创建应用
-
注册登录虹软开发后台
-
创建应用后,点击“添加SDK”按钮,选择“人脸识别RK356X”(不要选择到其他版本),然后选择Android平台,java语言等,获取试用码
项目集成原生插件
-
插件市场的插件详情页面选择“试用”,绑定项目
-
HBuilderX项目里,在App原生插件配置的云插件选择插件
-
删除本地自定义基座,重新自定义基座
-
运行时选择自定义基座运行
这些步骤不熟悉的同学请参考: https://www.jianshu.com/p/830ccc503e29 或 https://blog.csdn.net/wenrisheng/article/details/124057700
联系方式:QQ(252797991)
如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!
使用插件
激活错误码查询:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/help
激活引擎
var arcFaceAppreciation = uni.requireNativePlugin("wrs-arcFaceAppreciationRK");
- 判断是否已经激活成功
arcFaceAppreciation.getActiveFileInfo((resp)=>{
var code = resp.code;
if(code != 0) {
this.showMsg("SDK未激活");
} else {
this.showMsg("SDK已激活");
}
});
- 在线激活-试用码激活
arcFaceAppreciation.activeOnline({
activeKey: this.activeKey,
appId: this.appId,
sdkKey: this.sdkKey
}, (resp)=>{
this.showMsg(JSON.stringify(resp));
var code = resp.code;
if(code == 0) { //激活成功
this.showMsg("激活成功");
} else if(code == 90114) { // 已经激活
this.showMsg("已经激活");
} else if(code == 98309) { // 该激活码已被其他设备使用
this.showMsg("该激活码已被其他设备使用");
} else { // 激活失败
// 在https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/help查询激活失败原因
var msg = resp.msg;
this.showMsg("激活失败, code:" + code + " msg:" + msg);
}
});
- 在线激活-读取本地配置文件激活
* activeConfig.txt配置文件名称,格式如下:
* APP_ID:XXXXXXXXXXXXX
* SDK_KEY:XXXXXXXXXXXXXXX
* ACTIVE_KEY:XXXX-XXXX-XXXX-XXXX
var params = {};
params.path = "/axxxx/activeConfig.txt";
arcFaceAppreciation.readLocalConfigAndActive(params, (resp)=>{
})
- 离线激活
var params = {};
params.path = "/axxxx/active_result.dat";
arcFaceAppreciation.activeOffline(params, (resp)=>{
})
- 获取指纹
arcFaceAppreciation.getActiveDeviceInfo((resp)=>{
var finger = resp.finger;
})
摄像机view
分为2中,一种是从摄像机录入人脸保存到本地人脸库,另一种是从摄像机机中识别出本地人脸库对应的人
- 第一种录入人脸到本地人脸库
<wrs-arcFaceAppreciationView ref='arcFaceAppreciationView' :style="'width:'+width+'px;height:'+height+'px;'"
@onRegisterFinished="onRegisterFinished" @onLoadView="onLoadView">
</wrs-arcFaceAppreciationView>
开始识别人脸,识别成功后自动保存到本地人脸库,注册后会回调onRegisterFinished
// 开启相机
this.$refs.arcFaceAppreciationView.resumeCamera();
// 当前时间戳作为用户名,从摄像头识别人脸来录入人脸库
var name = Date.parse(new Date()) + "";
var params = {
userName: name // 用户名
};
this.$refs.arcFaceAppreciationView.register(params);
onRegisterFinished: function(resp) {
console.log(JSON.stringify(resp));
var code = resp.detail.code;
var msg = "";
if (code == 0) { // 成功
msg = "人脸注册录入成功";
} else if (code == 2) { // 失败,带有口罩引起录入失败
msg = "注册照要求不戴口罩";
} else { // 失败,其他问题
msg = "人脸注册录入失败";
}
uni.showToast({
title: msg,
duration: 2000
});
// uni.navigateBack({
// delta: 1
// });
}
- 从摄像机机中识别出本地人脸库对应的人
<wrs-arcFaceAppreciationView ref='arcFaceAppreciationView' :style="'width:'+width+'px;height:'+height+'px;'"
@onRecognized="onRecognized" @onLoadView="onLoadView">
</wrs-arcFaceAppreciationView>
开始识别对比,识别到人后会回调@onRecognized
// 开启相机
this.$refs.arcFaceAppreciationView.resumeCamera();
// 开始对别识别
this.$refs.arcFaceAppreciationView.compare({});
onRecognized: function(resp) {
console.log(JSON.stringify(resp));
var detail = resp.detail;
var live = detail.live;
var similarPass = detail.similarPass;
var compareResult = detail.compareResult;
var similar = compareResult.similar;
var compareCode = compareResult.compareCode;
var cost = compareResult.cost;
var trackId = compareResult.trackId;
var faceEntity = compareResult.faceEntity;
var faceId = faceEntity.faceId;
var imagePath = faceEntity.imagePath;
var userName = faceEntity.userName;
var msg = "识别出:" + userName;
uni.showToast({
title: msg,
duration: 2000
});
// uni.navigateBack({
// delta: 1
// });
}
获取当前摄像机预览图片
var params = {};
// params.saveImageFilePath = "/adfa/asdfa/aa.png"; // 传了路径会保存到这个路径
params.needBase64Image = true; // 是否需要返回base64图片
this.$refs.arcFaceAppreciationView.getCurCameraImage(params, (resp)=>{
});
页面摧毁的时候需要释放资源
onUnload() {
// 释放资源
this.$refs.arcFaceAppreciationView.releaseResources();
},
- 重新识别已经识别到人脸
var params = {}
params.trackId = 222; // 重新识别的人脸trackId
this.$refs.arcFaceAppreciationView.clearTrack(params);
- 全部从新识别人脸
this.$refs.arcFaceAppreciationView.clearAllTrack();
- 暂停识别(只暂时还未开始识别的人脸,识别过程中的无法暂停)
this.$refs.arcFaceAppreciationView.pauseCompare();
参数设置
var arcFaceParamsSetting = uni.requireNativePlugin("wrs-arcFaceAppreciation-paramsSettingRK");
- 设置识别角度,一些外接到摄像头需要配置识别角度才能识别到人脸
var params = {};
params.videoAngle = "all"; // 取值范围: all、270、180、90、0
arcFaceParamsSetting.setVideoAngle(params);
- 切换前后摄像头
var params = {};
params.isFront = true; // 采用前摄像头
arcFaceParamsSetting.setCameraFront(params);
- 设置活体检测模式
arcFaceParamsSetting.canOpenDualCamera((resp)=>{
var canOpenDualCamera = resp.canOpenDualCamera;
var params = {};
if(canOpenDualCamera) { // 可以打开双目摄像机
params.livenessDetectType = "rgb_liveness"; // rgb_liveness(单目活体检测)、disable_liveness(不启用活体检测)
} else { // 不可以打开双目摄像机
params.livenessDetectType = "rgb_liveness";// rgb_liveness(单目活体检测)、ir_liveness(双目活体检测)、disable_liveness(不启用活体检测)
}
arcFaceParamsSetting.setLivenessDetectType(params);
});
- 是否可以打开双目摄像机
arcFaceParamsSetting.canOpenDualCamera((resp)=>{
var canOpenDualCamera = resp.canOpenDualCamera;
if(canOpenDualCamera) { // 可以打开双目摄像机
} else { // 不可以打开双目摄像机
}
});
- 设置识别阈值
var params = {};
params.recognizeThreshold = 0.8; // 一般识别大于0.8,就认为是同一个人
arcFaceParamsSetting.setRecognizeThreshold(params);
- 设置分辨率
// getCommonSupportedPreviewSize接口需要有相机权限才能调用
// 先获取设备支持的分辨率,然后再选择一个来设置
arcFaceParamsSetting.getCommonSupportedPreviewSize((resp) => {
if (resp.commonSupportedPreviewSize) {
uni.showActionSheet({
itemList: resp.commonSupportedPreviewSize,
success: function(res) {
// 设置分辨率
var params = {};
params.previewSize = resp.commonSupportedPreviewSize[res.tapIndex];
arcFaceParamsSetting.setPreviewSize(params);
},
fail: function(res) {
}
});
}
});
人脸库管理
var arcFaceMgr = uni.requireNativePlugin("wrs-arcFaceAppreciation-arcFaceMgrRK");
- 初始化查询
// 初始化
var params = {}
params.pageSize = 20; // 分页查询,每页20条数据
arcFaceMgr.initData(params);
- 查询本地人脸库数据
// 分页加载数据
var loadDataParams = {};
loadDataParams.reload = true; // true: 重新加载 false:分页加载
arcFaceMgr.loadData(loadDataParams, (resp) => {
if (loadDataParams.reload) {
this.dataArray.length = 0;
}
this.dataArray.push(resp.faceEntities);
});
- 根据用户名userName查询
var params = {};
params.userName = "xxxx";
arcFaceMgr.queryByUserName(params, (resp) => {
var faceEntity = resp.faceEntity;
});
- 根据faceId查询
var params = {};
params.faceId = 10;
arcFaceMgr.queryByFaceId(params, (resp) => {
var faceEntity = resp.faceEntity;
});
- 注册单张图片到人脸库
var params = {};
params.userName = Date.parse(new Date()) + "";
params.url = path; // 源图片路径,支持绝对路径,如:/afa/ss/aa.png或远程网络路径,如:https://ssss/ss.png
arcFaceMgr.registerFace(params, (resp) => {
console.log(JSON.stringify(resp));
var code = resp.code;
if (code == 0) { // 注册成功
var faceEntity = resp.faceEntity;
} else { // 注册失败
}
});
- 删除人脸库
arcFaceMgr.clearAllFaces((resp)=>{
});
- 获取人脸库总数
arcFaceMgr.getTotalCount((resp)=>{
var totalCount = resp.totalCount;
});
- 本地批量注册
var params = {};
params.path = "/asdfasdf/asdfaf"; // 图片文件夹目录,userName为图片名
arcFaceMgr.registerFromFile(params, (resp)=>{
// code: 0 成功 其他:失败
var code = resp.code;
var current = resp.current;
var failed = resp.failed;
var total = resp.total;
});
- 删除人脸
faceId、userName传一个就可以
var params = {};
// params.faceId = "xxxx";
params.userName = "xxxx";
arcFaceMgr.deleteFace(params, (resp)=>{
});
- 修改更新用户名
var params = {};
params.faceId = "xxxx";
params.userName = "newName";
arcFaceMgr.update(params, (resp)=>{
});
- 释放资源
// 不用的时候释放资源
arcFaceMgr.releaseResource();