更新记录

1.0.8(2024-03-13)

支持Android14平台

1.0.7(2023-08-09)

  1. 增加从新识别接口

1.0.6(2023-06-08)

适配Android 13

查看更多

平台兼容性

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:V4.2

功能

  • 支持活体识别(单目/双目活体识别)、离线识别
  • 摄像机录入人脸、本地图片/网络图片/本地图片目录等多种方式录入人脸
  • 摄像机实时识别对比

文档:https://www.jianshu.com/p/37496a316ddf?v=1679477389550

虹软开发者平台创建应用

  1. 注册登录虹软开发后台

  2. 创建应用后,点击“添加SDK”按钮,选择“人脸识别 增值版”(不要选择到其他版本),然后选择Android平台,java语言等,获取试用码

QQ20230322-152455.png

QQ20230322-152603.png

项目集成原生插件

  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 arcFaceAppreciation = uni.requireNativePlugin("wrs-arcFaceAppreciation");
  • 判断是否已经激活成功

            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中,一种是从摄像机录入人脸保存到本地人脸库,另一种是从摄像机机中识别出本地人脸库对应的人

  1. 第一种录入人脸到本地人脸库

        <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
                // });
            }
  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-paramsSetting");
  • 设置识别角度,一些外接到摄像头需要配置识别角度才能识别到人脸

    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-arcFaceMgr");
  • 初始化查询

            // 初始化
            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();

隐私、权限声明

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

<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <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" />

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

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

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

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