zoukankan      html  css  js  c++  java
  • 基于虹软人证核验 2.0 Android SDK开发集成入门

    一、功能介绍
    虹软人证核验 2.0 SDK(以下简称SDK)包含人脸检测、人脸跟踪、人证核验等能力,主要实现人证的1:1比对。
    其中暴露对外的功能方法有:
    active 引擎激活
    init 引擎初始化
    inputIdCardData 输入身份证图片进行人脸检测
    onPreviewData 输入视频或图片数据进行人脸检测
    compareFeature 人证特征比对
    getVersion 获取sdk版本信息
    unInit 销毁引擎
    二、获取SDK
    1. 进入SDK的申请地址
    https://ai.arcsoft.com.cn/product/verification.html
    2. 填写信息申请并提交
    申请通过后即可下载SDK,查看APP_ID和SDK_KEY

    三、使用SDK
    1. 创建工程,并将下载解压出的jar和so添加到工程
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190311160209222.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDUxOTYz,size_16,color_FFFFFF,t_70)
    2. 激活引擎

    //激活方法首次调用有网络和文件操作,后续只有文件操作,建议不要放在主线程中进行
    int activeCode = IdCardVerifyManager.getInstance().active(MainActivity.this, Constants.APP_ID, Constants.SDK_KEY);
    if (activeCode == IdCardVerifyError.OK || activeCode == IdCardVerifyError.MERR_ASF_ALREADY_ACTIVATED) {
    //激活成功或者已激活过的情况
    } else {
    //激活失败的情况
    }
    

      

    3. 创建人脸特征提取结果回调对象

    //需要注意回调的结果位于子线程,compareFeature接口需要在主线程中调用
    private IdCardVerifyListener idCardVerifyListener = new IdCardVerifyListener() {
    @Override
    public void onPreviewResult(DetectFaceResult detectFaceResult, byte[] bytes, int i, int i1) {
    runOnUiThread(() -> {
    if (detectFaceResult.getErrCode() == IdCardVerifyError.OK) {
    //预览人脸特征提取成功, 若身份证人脸特征提取也成功,则可调用人证特征比对接口进行人证比对
    }
    });
    }
    
    @Override
    public void onIdCardResult(DetectFaceResult detectFaceResult, byte[] bytes, int i, int i1) {
    runOnUiThread(() -> {
    if (detectFaceResult.getErrCode() == IdCardVerifyError.OK) {
    //身份证人脸特征提取成功, 若预览人脸特征提取也成功,则可调用人证特征比对接口进行人证比对
    }
    });
    }
    };
    

    4. 初始化引擎,推荐在onCreate中执行

    int initCode = IdCardVerifyManager.getInstance().init(MainActivity.this, idCardVerifyListener);
    if (initCode != IdCardVerifyError.OK) {
    //初始化成功
    } else {
    //初始化失败
    }

    5. 传入身份证图像数据

    //需要转化为nv21格式的数据,且需保证宽为4的倍数,高为2的倍数
    DetectFaceResult result = IdCardVerifyManager.getInstance().inputIdCardData(nv21Data, width, height);
    if (result.getErrCode() == IdCardVerifyError.OK) {
    //身份证人脸检测成功
    } else {
    //身份证人脸检测失败
    }

    6. 传入预览图像数据,在传入身份证图像数据后才会进行预览图像数据的特征提取

    //需要转化为nv21格式的数据,且需保证宽为4的倍数,高为2的倍数
    DetectFaceResult result = IdCardVerifyManager.getInstance().onPreviewData(nv21Data, width, height, true);
    if (result.getErrCode() == IdCardVerifyError.OK) {
    //预览人脸检测成功
    } else {
    //预览人脸检测失败
    } 

    7. 人证特征比对,身份证数据与预览数据都特征提取成功后调用

    CompareResult compareResult = IdCardVerifyManager.getInstance().compareFeature(0.82d);
    if (compareResult.getErrCode() == IdCardVerifyError.OK) {
    //人证特征比对成功
    } else {
    //人证特征比对失败
    }

    8. 销毁引擎,推荐在onDestroy中执行

    IdCardVerifyManager.getInstance().unInit();

    四、注意事项
    1. 线程安全
    除了激活接口,SDK的接口都需要在主线程中进行调用,SDK内部对耗时操作进行了异步处理,不用担心主线程阻塞的问题。
    2. 数据格式
    SDK目前只支持NV21格式的数据,且需保证数据的宽为4的倍数,高为2的倍数。
    3. 调用流程
    需要注意的是,由于人脸特征提取比较耗时,所以SDK在调用inputIdCardData接口传入身份证数据后,onPreviewData接口才会进行预览数据的人脸特征提取。
    4. so库名冲突
    SDK与Arcface 2.0 SDK及活体检测SDK存在so库名冲突问题,无法同时使用,建议单一使用SDK实现人证核验需求,若有其他更加复杂需求,也可使用Arcface 2.0 SDK进行人证核验业务逻辑的实现。
    五、SDK参考文档:
    Android平台开发指南:
    http://ai.arcsoft.com.cn/manual/idcard_android_guide_v2.html
    API接口说明
    https://ai.arcsoft.com.cn/statics/mannual/idcardveri/2.0/android/index.html

  • 相关阅读:
    bobobrowse为Lucene添加分组统计
    实现lucene检索结果排序
    facets in lucene
    lucene3.5 example
    Lucene聚类分组统计功能(grouping)
    Eclipse开发struts完全指南(三)实战
    缓存是什么?占内存吗?
    []利用memcached在多台服务器之间共享PHP的session数据
    HTML meta refresh 刷新与跳转(重定向)页面
    [置顶] 微信开发出现“该公众号暂时无法提供服务,请稍后再试”的坑
  • 原文地址:https://www.cnblogs.com/Zzz-/p/10511480.html
Copyright © 2011-2022 走看看