虹软人脸识别 SDK 使用 Unity Android C# Java多语言开发 2021-09-06

Unity接入虹软人脸识别Android版SDK

== 自改aar包开发Android应用 下方有下载链接所有 demo aar 包==


在这里插入图片描述

虹软开发者中心

简叙:

基于工作项目中需要使用到人脸识别功能,借此机会发表下使用sdk的经过,踩坑。使用虹软人脸识别2.0开发demo测试使用,后升级3.1升级,这里只有3.1版本的使用。可注册企业开发者账号进行短期的试用码使用很人性化。
Unity 调用 Android Studio aar 包的方法可以在CSDN搜索,其中的坑以及注意事项本文会有说明
具体细节不做介绍,自行参考Demo内容,本文只做过程介绍,以及注意事项。
具体功能可查阅SDK PDF 官网下载SDK中均有Demo和PDF文件进行查阅,但只涉及到单版本,未涉及多软多语开发

Tip:本文携带Demo展示,需要的同学请随意使用学习,转载请注明出处,谢谢。


Demo 详细介绍 到实机使用

  1. 获取安卓机器唯一识别码

使用arr包里面的getDeciveInfo获取机器识别码
打包时候的 unity的 keystroe 自己创建一个 从头到尾只是用这一个keystroe 因为机器唯一识别码会把你的 软件信息 也录制进去

  1. 生成的txt 文件 大概 1k 左右 去官网上传 离线激活使用
    在这里插入图片描述
    在这里插入图片描述
    后续的步骤就不贴了 按照步骤执行即可,文件名叫什么无所谓,下载下来的 .dat 激活文件只能用在你刚才获取激活码的设备上

  2. Dmeo工程
    在这里插入图片描述
    一开始打算搞活体检测,考虑到只是登录时候搞一下算了吧还是直接一个 图片引擎 人脸特征码比对简单又快捷。就很舒服

按钮名称 就可以看出是什么功能,除了视频引擎激活没有搞活体检测

这一段说实话没什么看头 因为主要逻辑都在aar 包里 Unity里面只是在调用


   /// <summary>
    /// 初始化图片引擎
    /// </summary>
    private void InitImageFunc()
    {
        object[] objs = new object[] { FaceEngineConst.ASF_DETECT_MODE_IMAGE, FaceEngineConst.ASF_OP_ALL_OUT, 32, 1, FaceEngineConst.ASF_FACE_DETECT | FaceEngineConst.ASF_FACE_RECOGNITION };
        currentActivity.Call("initEngine", objs);
        InitFace_All.interactable = true;
    }

    /// <summary>
    /// 激活离线引擎
    /// </summary>
    private void ActiveFunc()
    {
        if (currentActivity != null)
        {
            return;
        }
        AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        currentActivity = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
        currentActivity.Call("initCurrentActivity");
        object[] objs = new object[] { "unityAppCode.dat" };
        bool isOk = currentActivity.Call<bool>("activeFaceEngine", objs);
        if (isOk)
        {
            InitImage.interactable = isOk;
            InitVideo.interactable = isOk;
        }
        else
        {
            Debug.LogError("离线激活有问题了");
        }
    }
  1. 工程打包后在设备指定路径下 放置 官网 .dat 设备离线激活文件
    aar包里的路径是这样的 Unity 传入 “文件名称.dat” aar包里做逻辑处理
 public boolean activeFaceEngine(String fileFullPath) throws IOException {

        havePermission();
		// .dat 离线激活文件 读取路径
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Dat/" + fileFullPath;
        Log.i(TAG, "activeFaceEngine: " + path);

        File file = new File(path);
        if (file.exists()) {
            Log.i(TAG, "activeFaceEngine: " + file.getAbsolutePath());
        }


        int activeOfflineError = FaceEngine.activeOffline(thisContext, path);

        boolean isActive = false;
        String notice = null;
        switch (activeOfflineError) {
            case ErrorInfo.MOK:
                notice = "引擎激活成功";
                isActive = true;
                break;
            case ErrorInfo.MERR_ASF_ALREADY_ACTIVATED:
                notice = "已激活";
                isActive = true;
                break;
            case ErrorInfo.MERR_ASF_ACTIVEKEY_ACTIVEKEY_ACTIVATED:
                notice = "该激活码已被其他设备使用";
                break;
            default:
                notice = "引擎激活失败,错误代码  errorInfo:" + activeOfflineError;
                break;
        }
        DialogShow("提示", notice);

        return isActive;
    }
  1. 演示的话不太方便演示
    基本操作步骤大概贴出了,基本无大碍。

1.软件工具版本介绍

  1. Unity 版本 2017.4.1f , 2018.4.35f
  2. Android 版本 4.2.2
  3. 虹软SDK 版本 3.1
  4. Android SDK 21-29 api
  5. JDK版本 jdk1.8.0_181
  6. 实测机型 Android 10 , CPU Arm-v8a

2.人脸SDK核心功能使用简介

  1. 引擎
    线上激活,离线激活具体操作根据Api 调用即可,具体官方说明文档中均有更加详细的使用文档
Java代码 官方SDKjar包内容
//线上激活 传入 上下文 激活密钥 密钥id sdk密钥  官网获取
 public static int activeOnline(Context context, String activeKey, String appId, String sdkKey) {/*代码Demo里面看吧*/}

//离线激活 使用此接口获取机器码唯一ID标识字符串 生成txt文本申请,安卓10以下的机型可直接下载官网的app获取没有就自己写一个小工具吧
 public static int getActiveFileInfo(Context context, ActiveFileInfo activeFileInfo) {/*代码Demo里面看吧*/}
 
//离线激活 使用从官网申请下载来的dat二进制激活文件进行引擎激活
 public static int activeOffline(Context context, String filePath) {/*代码Demo里面看吧*/}

C#代码 调用的aar包是自己改的
//离线激活 unity 直调 android aar 包里的方法  所有人脸相关的操作全部由 aar包中的内容完成 C#仅做调用
//减少相互之间的参数传递
AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
      
currentActivity = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");

currentActivity.Call("initCurrentActivity");

object[] objs = new object[] { "unityAppCode.dat" };

bool isOk = currentActivity.Call<bool>("activeFaceEngine", objs);
  1. 引擎初始化
java 代码
//引擎初始化 在低级版本里 某些参数都是 long 类型,后有封装的枚举类型不过都一个样 具体API介绍看 SDK文档
init(Context context, DetectMode detectMode, DetectFaceOrientPriority detectFaceOrientPriority, int detectFaceScaleVal, int detectFaceMaxNum, int combinedMask)
  1. 人脸抓捕
//旧版升级用的名称还是这个实际上里面调用了下面的  添加了一个抓取模型枚举  RGB模式就这一种 不看so 库根本不知道做了什么
public int detectFaces(byte[] data, int width, int height, int format, List<FaceInfo> faceInfoList) {
	return this.detectFaces(data, width, height, format, DetectModel.RGB, faceInfoList);
}

//3.1 用的是这里
public int detectFaces(byte[] data, int width, int height, int format, DetectModel detectModel, List<FaceInfo> faceInfoList) { /*代码Demo里面看吧*/}

//也可以用最新的 数据封装类进行数据封装传输,以上以下都可以使用,看具体需求  
public int detectFaces(ArcSoftImageInfo arcSoftImageInfo, List<FaceInfo> faceInfoList) {
        return this.detectFaces(arcSoftImageInfo, DetectModel.RGB, faceInfoList);
}

public int detectFaces(ArcSoftImageInfo arcSoftImageInfo, DetectModel detectModel, List<FaceInfo> faceInfoList) {/*代码Demo里面看吧*/}

  1. 人脸特征码获取
    这里有一个很有意思的操作,把所有人脸库中的图片人脸特征码的二进制数据进行文文件永久化存储,这样运行起来好方便,需要做一个专门制作一个用来录入人脸信息数据的工具软件
//Java 代码  人脸特征码计算获取  
    public int extractFaceFeature(byte[] data, int width, int height, int format, FaceInfo faceInfo, int threadCount, FaceFeature feature) {}

//这是人脸特征码的封装类 具体数据是一堆二进制数据
public class FaceFeature {
    public static final int FEATURE_SIZE = 1032;
    byte[] featureData;

    public FaceFeature(FaceFeature obj) {
        if (obj == null) {
            this.featureData = new byte[1032];
        } else {
            this.featureData = (byte[])obj.getFeatureData().clone();
        }

    }

    public FaceFeature() {
        this.featureData = new byte[1032];
    }

    public FaceFeature(byte[] data) {
        this.featureData = data;
    }

    public byte[] getFeatureData() {
        return this.featureData;
    }

    public void setFeatureData(byte[] data) {
        this.featureData = data;
    }

    public FaceFeature clone() {
        return new FaceFeature(this);
    }
}

  1. 人脸特征码对比
//对比就更简单了  两个特征码比较  得出相似度结果   设定相似度  结果 大于 0.8f 就是同一个人  这个阀值是官网给的推荐
    public int compareFaceFeature(FaceFeature feature1, FaceFeature feature2, FaceSimilar faceSimilar) {
        return this.compareFaceFeature(feature1, feature2, CompareModel.LIFE_PHOTO, faceSimilar);
    }
//
public int compareFaceFeature(FaceFeature feature1, FaceFeature feature2, CompareModel compareModel, FaceSimilar faceSimilar) {}
  1. 人脸各种信息获取
//像这个样子的 没用过  看官方文档介绍会有
public int process(ArcSoftImageInfo arcSoftImageInfo, List<FaceInfo> faceInfoList, int combinedMask) {/*代码Demo里面看吧*/}
//这个是 人脸其他信息功能接口 调用后可以直接获取 当前图片中人脸的 年龄,性别等信息  前提必须是 combineMask 组合功能里面包含你要的功能
/*其他的 还有活体检测,都一个套路,代码看的懂一切使用都ok,java 也很好看懂跟 C# 孪生兄弟,相似相悖的地方太多了很好看的明白

3.Unity 注意事项

1.Unity 导入 arr 包值得注意的里外配置表的问题,以及要删除的地方

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes\classes.jar 在Unity中的jar包路径

2. Unity 导入 arr 包值得注意的问题
在这里插入图片描述

3. 打包与离线激活,值得注意的问题
在这里插入图片描述

4. Android 注意事项

1.Android 工程下的结构信息
在这里插入图片描述

2.Android 工程的构建信息

依照这个样子基本没有问题 值得注意的是有修改要点 同步按钮,点构建按钮重新对项目进行调整
在这里插入图片描述

5. Bug与Android adb logcat 实际机测试

在这里插入图片描述
开发者中心可以查阅使用返回的报错码,解决引擎使用过程中出现的问题。

在这里插入图片描述
在这里插入图片描述
使用cmd 跳转到你的 sdk platform tools 下面 使电脑连接到开发者模式下的android机器可以进行实机运行log查阅,打开android studio 可以在logcat 视图中查阅 。

文末

内容中有文字多打错打,不耽误阅读。
避开这些坑就是减少开发时间。
下面贴出下载链接

aar包下载路径

UnityFaceDemo

机器识别码获取Demo apk 需要自行使用unity.keystore 生成

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN虹软人脸识别SDK是一个用于人脸识别的软件开发工具包。搭建这个SDK的过程可以分为以下几个步骤: 首先,需要下载并安装CSDN虹软人脸识别SDK的相关软件包。可以在CSDN官网上找到这个SDK的下载链接,根据自己的操作系统选择对应的版本进行下载。下载完成后,按照安装向导进行安装。 接下来,需要创建一个新的项目,并将虹软人脸识别SDK添加到项目中。具体的添加方式可以参考虹软官方提供的文档或者教程。一般来说,需要将SDK的相关文件复制到项目的指定目录,并配置好项目的编译选项以便能够正确地链接和使用SDK。 然后,需要在项目中编写代码来调用SDK的功能。首先需要初始化SDK,并加载训练好的人脸模型。然后,可以使用SDK提供的函数来进行人脸检测、特征提取、人脸比对等操作。在编写代码的过程中,可以根据需求自定义一些参数,例如设置人脸检测的阈值、人脸比对的相似度阈值等。 最后,进行测试和调试。可以编写一些测试代码,输入一些样本人脸数据进行测试,观察SDK的识别结果是否准确。如果有需要,可以对代码进行一些优化和改进,以获得更好的人脸识别效果。 总的来说,搭建CSDN虹软人脸识别SDK主要包括下载安装、添加到项目、编写代码调用、测试和调试等步骤。在操作过程中,可以参考官方提供的文档和教程,以及根据实际需求进行适当的定制和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值