更新记录

1.0.8(2024-06-24)

更新sdk内核

1.0.7(2023-12-18)

  1. 增加只识别人脸,不对别人脸接口

1.0.6(2023-08-07)

替换识别内核

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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识别

虹软开发者平台创建应用

  1. 注册登录虹软开发后台
  2. 创建应用后,点击“添加SDK”按钮,选择“(免费)人脸识别”(不要选择到其他版本)
  3. 获取App_ID、SDK_KEY

项目集成原生插件

  1. 插件市场的插件详情页面选择“试用”,绑定项目

  2. HBuilderX项目里,在App原生插件配置的云插件选择插件

  3. 删除本地自定义基座,重新自定义基座

  4. 运行时选择自定义基座运行

这些步骤不熟悉的同学请参考: https://www.jianshu.com/p/830ccc503e29https://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中,一种是从摄像机录入人脸保存到本地人脸库,另一种是从摄像机机中识别出本地人脸库对应的人

  1. 第一种是从摄像机录入人脸到本地人脸库

        <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
                });
            },
  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
                // });
            }
  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 {

                    }
                });

隐私、权限声明

1. 本插件需要申请的系统权限列表:

androifd: <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件使用的 虹软 SDK会采集数据,详情可参考:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/index

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问