共计 2465 个字符,预计需要花费 7 分钟才能阅读完成。
一、功能介绍虹软人证核验 2.0 SDK(以下简称 SDK)包含人脸检测、人脸跟踪、人证核验等能力,主要实现人证的 1:1 比对。其中暴露对外的功能方法有:active 引擎激活 init 引擎初始化 inputIdCardData 输入身份证图片进行人脸检测 onPreviewData 输入视频或图片数据进行人脸检测 compareFeature 人证特征比对 getVersion 获取 sdk 版本信息 unInit 销毁引擎二、获取 SDK
1. 进入 SDK 的申请地址 https://ai.arcsoft.com.cn/pro…
2. 填写信息申请并提交申请通过后即可下载 SDK,查看 APP_ID 和 SDK_KEY
三、使用 SDK
1. 创建工程,并将下载解压出的 jar 和 so 添加到工程
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/manu…API 接口说明 https://ai.arcsoft.com.cn/sta…