更新记录
1.0.8(2024-06-24)
更新sdk内核
1.0.7(2023-12-18)
- 增加只识别人脸,不对别人脸接口
1.0.6(2023-08-07)
替换识别内核
查看更多平台兼容性
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最高支持Android 10
功能
- 支持活体识别、离线识别
- 识别角度设置
- 人脸库管理,增删查
- 摄像机录入人脸、本地图片/网络图片/本地图片目录等多种方式录入人脸
- 摄像机实时识别对比
- 支持1:N识别
虹软开发者平台创建应用
- 注册登录虹软开发后台
- 创建应用后,点击“添加SDK”按钮,选择“(免费)人脸识别”(不要选择到其他版本)
- 获取App_ID、SDK_KEY
项目集成原生插件
-
插件市场的插件详情页面选择“试用”,绑定项目
-
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 arcFaceEngine = uni.requireNativePlugin("wrs-arcFaceEngineFree");
- 激活引擎
Android激活引擎需要用到android.permission.READ_PHONE_STATE权限
// 一般放到app启动的时候
arcFaceEngine.activeEngine({
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);
}
});
摄像机view
分为2中,一种是从摄像机录入人脸保存到本地人脸库,另一种是从摄像机机中识别出本地人脸库对应的人
- 第一种是从摄像机录入人脸到本地人脸库
<wrs-arcfaceView ref='arcfaceView' :style="'width:'+width+'px;height:'+height+'px;'"
@onRegisterFinished="onRegisterFinished" @onLoadView="onLoadView">
</wrs-arcfaceView>
- 开始识别人脸,识别成功后自动保存到本地人脸库,注册后会回调onRegisterFinished
// 当前时间戳作为用户名,从摄像头识别人脸来录入人脸库
this.userName = Date.parse(new Date()) + "";
var params = {
userName: this.userName, // 用户名
livenessDetect: true, // 是否开启活体识别
isFrontCamera: true // 是否用前摄像头
};
this.$refs.arcfaceView.register(params);
onRegisterFinished: function(resp) {
console.log(JSON.stringify(resp));
var code = resp.detail.code;
var msg = "";
if (code == 0) { // 成功
msg = "人脸注册录入成功";
this.queryFaceData();
} else { // 失败
msg = "人脸注册录入失败";
}
uni.showToast({
title: msg,
duration: 2000
});
uni.navigateBack({
delta: 1
});
},
- 从摄像机机中识别出本地人脸库对应的人
<wrs-arcfaceView ref='arcfaceView' :style="'width:'+width+'px;height:'+height+'px;'"
@onRecognized="onRecognized" @onLoadView="onLoadView">
</wrs-arcfaceView>
- 开始识别对比,识别到人后会回调@onRecognized,如果需要获取识别的图片,可以采用getCurCameraImage接口获取当前摄像机图片
// 开始对别识别
this.$refs.arcfaceView.compare({
similarThreshold: 0.8, // 识别阈值,一般相似度大于等于0.8就认为是同一个人
livenessDetect: true, // 是否开启活体识别
isFrontCamera: true, // 是否用前摄像头
doCompareOnce: false // 是否只识别对比一次 true:识别对比成功后不在识别 false: 识别对比成功后继续识别
});
onRecognized: function(resp) {
console.log(JSON.stringify(resp));
var userName = resp.detail.compareResult.userName;
var msg = "识别出:" + userName;
uni.showToast({
title: msg,
duration: 2000
});
// uni.navigateBack({
// delta: 1
// });
}
- 只做人脸检测,不做录入和识别对别
// 开始对别识别
this.$refs.arcfaceView.onlyRecognizeFace({
livenessDetect: true, // 是否开启活体识别
isFrontCamera: true // 是否用前摄像头
});
回调:
onOnlyRecognizeFace(resp){
let trackId = resp.detail.trackId
console.log("onOnlyRecognizeFace:" + JSON.stringify(resp));
},
- 页面摧毁的时候需要释放资源
// 释放资源
this.$refs.arcfaceView.releaseResources();
- 切换摄像头
this.$refs.arcfaceView.switchCamera()
- 获取当前摄像机预览图片
var params = {};
// params.saveImageFilePath = "/adfa/asdfa/aa.png"; // 传了路径会保存到这个路径
params.needBase64Image = true; // 是否需要返回base64图片
this.$refs.arcfaceView.getCurCameraImage(params, (resp)=>{
});
- 修复旋转相机画面,某些定制的Android系统或外接摄像头会出现相机画面被旋转了90/180/270等,可以采用此接口修复旋转画面
var params = {}
// params.displayOrientation = 90;
this.$refs.arcfaceView.setCameraDisplayOrientation(params)
- 重新识别已经识别到人脸
var params = {}
params.trackId = 222; // 重新识别的人脸trackId
this.$refs.arcFaceAppreciationView.clearTrack(params);
- 全部从新识别人脸
this.$refs.arcFaceAppreciationView.clearAllTrack();
参数设置
var paramsSetting = uni.requireNativePlugin("wrs-arcFaceEngineFree-paramsSetting");
- 识别角度设置,如果无法识别到人脸,可以修改识别角度后再试下,一些外接到摄像头需要配置识别角度才能识别到人脸
var itemList = ["all", "270", "180", "90", "0"];
uni.showActionSheet({
itemList: itemList,
success: function(res) {
var params = {};
params.videoAngle = itemList[res.tapIndex]; // 取值范围: all、270、180、90、0
paramsSetting.setVideoAngle(params);
},
fail: function(res) {
}
});
人脸库管理
var arcFaceMgr = uni.requireNativePlugin("wrs-arcFaceEngineFree-faceMgr");
- 初始化
// 初始化
var params = {}
arcFaceMgr.initData(params);
- 释放资源
// 不用的时候释放资源
arcFaceMgr.releaseResources();
- 注册本地或网络图片到人脸库
var params = {};
params.userName = this.userName;
params.url = path; // 源图片路径,支持绝对路径,如:/afa/ss/aa.png(如以file://开头需要去掉这个前缀)或远程网络路径,如: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 { // 注册失败
}
});
- 根据用户名查询人脸库
var params = {};
params.userName = this.userName;
// params.needFeatureData = false;
arcFaceMgr.queryByUserName(params, (resp) => {
this.showMsg(JSON.stringify(resp));
});
- 根据用户名删除人脸库
var params = {};
params.userName = this.userName;
// params.needFeatureData = false;
arcFaceMgr.deleteByUserName(params, (resp) => {
this.showMsg(JSON.stringify(resp));
});
- 删除人脸库
arcFaceMgr.clearAllFaces((resp)=>{
});
- 获取人脸库总数
arcFaceMgr.getFaceNumber((resp)=>{
var num = resp.num;
});
- 本地批量注册
图片格式为jpg,用户名为图片名
var params = {};
params.path = "/asdfasdf/asdfaf"; // 图片文件夹目录,userName为图片名
arcFaceMgr.registerFromFile(params, (resp)=>{
// code: 0 成功 其他:失败
var code = resp.code;
var registerFailDir = resp.registerFailDir;
var finalSuccessCount = resp.finalSuccessCount;
var totalCount = resp.totalCount;
});
- 获取本地人脸库路径
arcFaceMgr.getFaceDir((resp)=>{
// 特征值保存路径
var featureDir = resp.featureDir;
// 人脸图片保存路径
var imageDir = resp.imageDir
});
- 判断人脸图片是否已经录入本地人脸库
let url = "/xafasf/test.png";
arcFaceMgr.checkRegisterFace({url: url}, (checkResp)=>{
var similar = 0;
if(checkResp.compareResult) {
similar = checkResp.compareResult.similar;
}
if(similar >= 0.8) {
// 人脸库已经录入了这张照片
} else {
}
});