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