集成指南

1.SDK目录结构

目录1

2.将SDK集成到开发环境

使用SDK前,首先需要将其集成到您的开发环境中。

2.1 module集成方式

  1. 将LFLiveness下的module模块LFLivenessLibrary以module的方式导入工程,通过File->New>importModule->选中LFLiveness文件夹下的LFLivenessLibrary->连续点击Next完成导入。

  2. 在新建应用的builde.gradle下添加

    repositories { flatDir {

     dirs '../LFLivenessLibrary/libs'
    

    } }

    在build.gradle中的dependencies{}中添加

    compile project(':LFLivenessLibrary')

    如下

    repositories {
     flatDir {
         dirs '../LFLivenessLibrary/libs'
     }
    }
    
    dependencies {
         compile project(':LFLivenessLibrary')
    }
    
  3. 将LFLiveness工程中LFLivenessSample的assets目录下的所有文件拷贝到您的工程中的assets目录下。

2.2 aar集成方式

更灵活的集成方式,获取aar文件内容进行集成

1.将LFLivenessLibrary/libs下LFLivenessSDK.aar文件后缀重命名为.zip文件,解压。目录结构如图 目录

2.将解压目录中assets文件夹下的模型文件拷贝到 app/src/main/assets 目录中

3.将解压目录中jni文件夹下的so文件夹拷贝到 app/src/main/jniLibs 目录中

4.将 classes.jar 文件拷贝 app/libs 目录下。在builde.gradle添加依赖。注:可重命名该文件。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

3.SDK初始化

1 初始化SDK识别模型。在适当的时机执行以下代码,如在启动的Activity的生命周期onCreate中:

LFLivenessSDK.getInstance(getActivity());

并处理可能抛出的异常。可用try...catch...语句包裹。详情可参考Demo。

2 您可以设置动作序列,返回单图或多图,设置难易程度,以及是否打开语音提示。SDK会根据您的设置,来进行活体检测。

LFLivenessSample中启动活体检测配置如下:

private void startLiveness() {
        try {
            Bundle bundle = new Bundle();
            StringBuilder sBuilder = new StringBuilder();
            sBuilder.append(Constants.BLINK + " ");
            sBuilder.append(Constants.MOUTH + " ");
            sBuilder.append(Constants.NOD + " ");
            sBuilder.append(Constants.YAW + " ");
            /**
             * OUTPUT_TYPE 配置, 传入的outputType类型为singleImg (单图),multiImg (多图),video(低质量视频)
             */
            bundle.putString(LivenessActivity.OUTTYPE, Constants.MULTIIMG);
            /**
             * EXTRA_MOTION_SEQUENCE 动作检测序列配置,支持四种检测动作, BLINK(眨眼), MOUTH(张嘴), NOD(点头), YAW(摇头), 各个动作以空格隔开。 推荐第一个动作为BLINK。
             * 默认配置为"BLINK MOUTH NOD YAW"
             */
            bundle.putString(LivenessActivity.EXTRA_MOTION_SEQUENCE, sBuilder.toString());
            /**
             * SOUND_NOTICE 配置, 传入的soundNotice为boolean值,true为打开, false为关闭。
             */
            bundle.putBoolean(LivenessActivity.SOUND_NOTICE, true);
             /**
             * COMPLEXITY 配置, 传入的complexity类型为normal,支持四种难度,easy, normal, hard, hell.
             */
            bundle.putString(LivenessActivity.COMPLEXITY, Constants.NORMAL);

            Intent intent = new Intent();
            intent.putExtras(bundle);
            intent.setClass(MainTestActivity.this, LivenessActivity.class);
            intent.putExtras(bundle);
            //设置返回图片结果
            intent.putExtra(LivenessActivity.KEY_DETECT_IMAGE_RESULT, true);
            //设置返回video结果,video模式才会返回
            intent.putExtra(LivenessActivity.KEY_DETECT_VIDEO_RESULT, true);
            startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我们建议将 BLINK 放第一个检测,后面可以随意组合。

推荐的配置为:

动作序列为:"BLINK MOUTH NOD YAW",多图multiImg,难易程度为normal, 语音提示true。

4.License集成说明

4.1 License说明

我们的SDK是通过License进行包名绑定授权的。

注意:此版本后,我公司的license文件名统一更改成LinkfaceID.lic!

4.2 License使用指南

  1. 将Linkface返回的License(.lic结尾)重命名为 LinkfaceID.lic。
  2. 需要将LinkfaceID.lic 文件放在 LFLiveness/LFLivenessSample/src/main/assets目录下。
  3. 我们的License中绑定了App包名有效期等信息。当授权出错时,SDK会返回错误码及Sample显示相应的提示语:
错误码 Sample提示语 描述
ERROR_LICENSE_PACKAGE_NAME_MISMATCH 绑定包名错误 集成SDK的工程包名与license文件绑定的包名不符
ERROR_LICENSE_EXPIRE License过期 license过期
ERROR_LICENSE_FILE_NOT_FOUND License不存在 LinkfaceID.lic的文件名或者路径被修改,导致无法找到License
ERROR_LICENSE_INVALID License不合法 SDK无法解析LinkfaceID.lic的内容

5.License动态更新使用指南

5.1 说明

  • Liveness4.7版本开始支持动态传入License路径、检测license有效期、支持动态更新License;
  • License更新下载地址请联系market@linkface.cn;
  • 新版的License需向Linkface申请。
  • 5.2 使用指南

  • 备注:
    1. License下载后会保存到APP的私有目录下,此处的License路径是License保存的子目录。
    2. 若不使用SDK提供的证书动态更新机制,以下内容可忽略。
    3. 如果需要使用SDK提供的动态更新License机制,则需要打开LFLivenessSample module下面的Constants.java文件修改其中的
      public static final String LICENSE_INFO_URL = "https://cloud-license.linkface.cn/json/xxx.json";
      public static final int DAYS_BEFORE_LIC_EXPIRED = 5;
    

    将LICENSE_INFO_URL的值修改为在我公司申请的License动态更新的链接;

    将DAYS_BEFORE_LIC_EXPIRED的值修改为License需要动态更新下载提前的天数;

    5.2.1 传入License路径

    在APP的默认启动Activity中,调用SDK方法传入License路径。如在APP的MainTestActivity的onCreate中调用。

    String licPath = "/liveness_license/LinkfaceID.lic";
    String licName = "LinkfaceID.lic";
    //集成license动态更新机制,需传递licPath
    LFLivenessSDK.getInstance(MainTestActivity.this).initLicPath(licPath,licName);
    

    备注:

    licPath的值需要与动态更新下载License的存储路径保持一致,此路径是APP私有目录下的相对路径。 即,若APP私有目录为/data/user/0/<包名>/files,则License实际的存储路径为/data/user/0/<包名>/files/liveness_license/LinkfaceID.lic。

    5.2.2 获取License剩余有效天数

    返回license剩余有效天数

    int remainingDays = LFLivenessSDK.getInstance(MainTestActivity.this).getRemainingDays();
    

    5.2.3 根据定制的更新License链接下载新License

    下载新License到指定路径

    if (!LFLivenessSDK.getInstance().checkLicenseValid(this) || remainingDays < LFConstants.DAYS_BEFORE_LIC_EXPIRED) {
    LFLicDownloadManager.getInstance().downLoadLic(LFConstants.LICENSE_INFO_URL, downloadListener);
    }
    

    5.3 License下载说明

    5.3.1 获取下载License信息的链接

    该链接为客户定制链接,请联系market@linkface.cn。

    5.3.2 License下载时序图

    时序图

    5.3.3 License信息格式

    License信息格式为Json。

    各字段及其说明

    字段名 说明
    md5 由lic文件得到的MD5,32位小写
    start_time License有效期起始时间,Unix时间戳格式
    expired_time License有效期结束时间,Unix时间戳格式
    lic_url License下载地址

    json示例:

    { "md5": "qwertyhgfr567u8i987yt65rfghjkiuy", "start_time": 1517500800, "expired_time": 1546185600, "lic_url": "http://www.linkface.com/license_url" }

    5.3.4 License下载原理

    1. 根据定制链接请求License信息的Json数据;
    2. 根据Json数据中的lic_url下载License;
    3. 对该License做MD5得到32位小写字符串与License信息的json中md5字段的值进行比对,验证License;
    4. 将License放入初始化设置的路径中,替换原有License;
    5. 使用SDK提供的功能。

    5.4 同一应用同时集成Linkface的多个SDK的说明

    5.4.1 多个SDK使用同一License

    一般,同一应用的License是唯一的,所以集成不同SDK时只需要使用和管理一份License即可。 例如,先后集成了活体SDK和OCR SDK,集成活体SDK时,License路径为"/linkface/LinkfaceI.lic",该路径可以自定义。

    5.4.1.1 初始化时,使用同一License。

    活体SDK代码:

    String licPath = "/linkface/LinkfaceID.lic";
    String licName = "LinkfaceID.lic";
    //集成license动态更新机制,需传递licPath
    LFLivenessSDK.getInstance(MainTestActivity.this).initLicPath(licPath,licName);
    

    OCR SDK代码:

    String licPath = "/linkface/LinkfaceID.lic";
    LFBankCardScan.getInstance().initLicensePath(LFMainActivity.this, licPath, CardRecognizer.LICENSE_NAME);
    
    5.4.1.2 动态更新下载时,仅需要使用活体SDK或OCR SDK的一个SDK中判断License有效期并使用LFLicDownloadManager下载。

    详见5.2.3 根据定制的更新License链接下载新License

    5.4.2 多个SDK使用不同License

    5.4.2.1 初始化SDK

    需要将不同SDK初始化时的License路径设置为不同即可。如 活体SDK代码:

    String licPath = "/liveness/LinkfaceID.lic";
    String licName = "LinkfaceID.lic";
    //集成license动态更新机制,需传递licPath
    LFLivenessSDK.getInstance(MainTestActivity.this).initLicPath(licPath,licName);
    

    OCR SDK代码:

    String licPath = "/ocr/LinkfaceID.lic";
    LFBankCardScan.getInstance().initLicensePath(LFMainActivity.this, licPath, CardRecognizer.LICENSE_NAME);
    
    5.4.2.2 License动态更新

    因为License不同,所以需要分别动态更新License。详见5.2.3 根据定制的更新License链接下载新License

    results matching ""

      No results matching ""