一、功能介绍
虹软人证核验 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

基于虹软人证核验 2.0 Android SDK开发集成入门的更多相关文章

  1. 虹软人脸识别ArcFace2.0 Android SDK使用教程

    一.获取SDK 1.进入ArcFace2.0的申请地址 https://ai.arcsoft.com.cn/product/arcface.html 2.填写信息申请并提交 申请通过后即可下载SDK, ...

  2. Android SDK 开发指南

    Android SDK 开发指南 视频详解 以下视频是对融云 Android SDK 开发使用的详细讲解,您可以在阅读文档时配合学习.   更多视频教程如下: CSDN 融云 Android SDK ...

  3. Android SDK开发与使用的那些事儿

    前言 最近由于工作需要,将应用里的部分功能独立了出来,封装成 SDK 提供给合作伙伴使用.由于经验不足,网上也没多少写这方面内容的文章,遇到了不少的坑,决定记录下来. SDK 其实,刚说到要写SDK也 ...

  4. 蓝牙4.0——Android BLE开发官方文档翻译

    ble4.0开发整理资料_百度文库 http://wenku.baidu.com/link?url=ZYix8_obOT37JUQyFv-t9Y0Sv7SPCIfmc5QwjW-aifxA8WJ4iW ...

  5. Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询

    Android GIS开发系列-- 入门季(5),这篇文章中,我们知道如何去查找要素.现在有一个需求,查找某点5000米范围的要素,那如何来做呢?首先我们需要在地图上画个5000米半径的圆,然后根据Q ...

  6. Android SDK 开发——发布使用踩坑之路

    前言 在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的. 为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的. 背景 刚好最近自己遇到了类似需 ...

  7. 配置Android SDK 开发环境(转)

    1. 下载Eclipse 在前面我们配置好了JDK环境后,就可以开始配置Android的集成开发环境了,官方Google推荐的集成开发环境为Eclipse,所以我们就以Eclipse作为集成开发环境. ...

  8. Android SDK开发常用工具的使用及其异常处理

    由于以下操作都是命令操作,所以在执行以下操作之前确保环境变量 ANDROID_HOME 指向的是正确的Android SDK的路径: 一.启动Android SDK Manager: android ...

  9. 25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器

    https://www.cnblogs.com/yangfengwu/p/11324411.html 说个事情,现在SDK的版本已经出到3.0了,但是我还是使用2.0 如果只是为了学习研究   选择3 ...

随机推荐

  1. navicat mysql导出数据 批量插入的形式

    这里介绍的是mysql 相同服务器类型数据传输的高级设置 选中数据库后右键“ 转储SQL文件”默认导出的记录格式是一条条的,采用的是”完整插入语句”,格式如下 '); '); '); 这种格式保证了兼 ...

  2. 08: vue组件

    1.1 初识组件 1.什么是组件 1. Html中有组件,是一段可以被复用的结构代码 2. Css中有组件,是一段可以被复用的样式 3. Js中有组件,是一段可以被复用的功能 4. Vue中也有组件, ...

  3. Django文件存储(二)定制存储系统

    要自己写一个存储系统,可以依照以下步骤: 1.写一个继承自django.core.files.storage.Storage的子类. from django.core.files.storage im ...

  4. 4. 多重背包问题 I

    多重背包问题 I 描述 有 NN 种物品和一个容量是 VV 的背包. 第 ii 种物品最多有 sisi 件,每件体积是 vivi,价值是 wiwi. 求解将哪些物品装入背包,可使物品体积总和不超过背包 ...

  5. FJUT 聪明的商人(树上倍增)题解

    思路:求树上两点的距离,显然是dep[u] + dep[v] - 2 * dep[lca],用树上倍增去写. 参考:树上倍增的写法和应用(详细讲解,新手秒懂) 代码: #include<set& ...

  6. 【做题】51NOD1518 稳定多米诺覆盖——容斥&dp

    题意:求有多少种方案,用多米诺骨牌覆盖一个\(n\times m\)的棋盘,满足任意一对相邻行和列都至少有一个骨牌横跨.对\(10^9+7\)取模. \(n,m \leq 16\) 首先,这个问题的约 ...

  7. oracle单行函数 之 字符函数

    Upper(字符串 / 列):将输入的字符串变成大写 Lower(字符串 / 列):将输入的字符串变成小写 Initcap(字符串 / 列):开头首字母大写 Length(字符串 / 列):字符串长度 ...

  8. The issus in Age Progression/Regression by Conditional Adversarial Autoencoder (CAAE)

    The issus in Age Progression/Regression by Conditional Adversarial Autoencoder (CAAE) Today I tried ...

  9. 给大家分享两套WordPress收费主题

    主题一:No.7 – 极简 by 大当家 1.主题网址:http://qzhai.net/2016-03-546.html 2.主题预览:http://qzhai.net/000/?theme=No. ...

  10. @PathVariable与@RequestBody的区别,及前段请求接口的写法。

    @PathVariable 1:接受参数时,地址栏为:/{args1}/{args2} 2:用法:(@PathVariable(value = "args")Long  id) 3 ...