利用人脸识别SDK实现人证比对全过程

article/2025/9/18 11:25:08

人证比对在如今的社会中随处可见,如高铁、飞机、酒店入住、甚至景区入口都可以看到各种各样的人证应用,人脸识别SDK的也如雨后春笋一般层出不穷,如百度、商汤、Face++、虹软等。在尝试使用各家的SDK之后,最让我青睐的要数虹软科技的SDK了,最直接的一个原因就是虹软承诺永久免费。我从2.0版本开始就在使用了,实测效果确实不错,就在上个月收到消息ArcFace3.0更新了,作为一个白嫖党自然不会错过这次的更新,在上手了3.0 之后,发现ArcFace 3.0有以下新特性

  • 特征比对支持比对模型选择,有生活照比对模型人证比对模型

  • Android平台新增64位的SDK

  • 新增了一种图像数据传入方式

本文将根据以下几点对ArcFace3.0的人证场景使用进行介绍

  • ArcFace 3.0 SDK接口变动的得与失

  • 如何将人证 2.0 Demo程序改为搭载ArcFace
    3.0 SDK的程序

  • 如何直接把ArcFace 3.0的demo修改为人证程序

一、ArcFace 3.0 SDK接口变动的得与失

接口变动的优势:

1.业务自由度变高

  以人证 2.0为例,我们只能传入数据、传出结果,而一些中间产物,例如人脸特数据征就获取不到了。现在采用ArcFace 3.0之后,取消了固定的流程,检测、比对、提取等流程都可以由自己控制。

2.可以在同一个工程内实现生活照比对与人证比对

  人证 SDK与ArcFace
SDK 存在冲突,无法同时使用,若我们既想用人证又想用生活照,就要写两个工程,并且两个工程的流程还有些不同。而现在只需要接口内选择模型就可以实现模型的切换,完全可以在一个工程内实现人证与生活照程序的集成。

3.代码复用性

  ArcFace 3.0中人证与身份证区别只有compare接口中的模型选择,其他完全一致,因此大部分的代码都可以复用,大大提高了开发的效率。

接口变动的缺点:

1.接口变动

  万事有得必有失,由于ArcFace 3.0没有关于人证部分的封装,致使在升级过程中所有的接口都需要变更,相信也是所有程序员都不愿意看到的问题。

2.实现变困难

  同样由于ArcFace 3.0没有关于人证部分的封装,使得原本接口中自带的一些流程与回调需要自己来实现,这对于刚上手的人来说,不是十分友好。

小结:

  虽然上面说了一些ArcFace 3.0的缺点,但是我本人还是很赞成这次的升级,毕竟每个产品的革新总会带来一些冲击,但是相对于这些冲击来说,我相信接口、识别流程的统一为程序的适用性与业务的自由性都提高了,相信对于人证2.0来说这次“壮士断腕”的举措长远来看是值得的。

二、人证 2.0 Demo集成ArcFace 3.0

SDK

  在上面我们看到了由于接口的变动,致使人证2.0程序所有的接口都要修改,接下来我将以人证2.0
Demo为例,讲解一下我是如何使用ArcFace 3.0 SDK进行升级的。

1、人证 2.0 Demo工程配置

  考虑到可能有些用户对人证 2.0 Demo不太熟悉,先简单介绍一下官方Demo如何配置使用。

image

  首先,先将人证引擎如图所示放入demo内,接下来修改Constants内的APP_ID与SDK_KEY,APP_ID与SDK_KEY以及人证引擎均由官网的开放平台上进行获取。然后在设备的SDCard根目录下放置一张命名为“sample.jpg”的图片做为模拟人证输入的图片(图片路径可以在MainActivity下的SAMPLE_FACE变量内进行修改),下图为配置完毕后运行的截图。

image

2.ArcFace 3.0 SDK替换

  首先我们要先获取ArcFace3.0的SDK,同样可以在开放平台上进行获取。用新的SDK库替换掉原本的SDK,替换后的项目目录如下图所示

image

3.ArcFace3.0接口替换

  上面提到了,由于3.0的全面变更,所有的接口全部都发生了改变,因此我们要把原本2.0的接口全部替换为3.0。

 3.1 引擎激活:

  激活方面接口参数没有任何变化

人证 2.0 :


IdCardVerifyManager.getInstance().active(Context context, String appId, String
sdkKey);

ArcFace 3.0 :


FaceEngine.active(Context context, String appId, String sdkKey);
 3.2 引擎初始化:

  从初始化开始,人证 2.0与ArcFace3.0接口有了较大的区别,人证 2.0有对Id Card信息与Camera信息监听,而3.0取消了这个监听机制,接口内的参数就不一一介绍了,官方文档介绍的非常详细,大家可以去参考一下官方文档。

人证 2.0 :


IdCardVerifyManager.getInstance().init(Context context, IdCardVerifyListener
listener) 

ArcFace 3.0 :


FaceEngine.init(Context context, DetectMode detectMode,
DetectFaceOrientPriority detectFaceOrientPriority, int detectFaceScaleVal, int
detectFaceMaxNum, int combinedMask)
 3.3 激活&初始化demo:

  下面是我对2.0进行替换后的前后代码,可以给大家做一个参考:

人证 2.0 :

private void initEngine() {int result =
IdCardVerifyManager.getInstance().init(this, idCardVerifyListener);LogUtils.dTag(TAG,
"initResult: " + result);if (result ==
IdCardVerifyError.MERR_ASF_NOT_ACTIVATED) {Executors.newSingleThreadExecutor().execute(new Runnable() {@Overridepublic void run() {int activeResult =
IdCardVerifyManager.getInstance().active(MainActivity.this,
APP_ID, SDK_KEY);runOnUiThread(new
Runnable() {@Overridepublic void run()
{LogUtils.dTag(TAG, "activeResult: " + activeResult);if (activeResult ==
IdCardVerifyError.OK) {int
initResult = IdCardVerifyManager.getInstance().init(MainActivity.this, idCardVerifyListener);LogUtils.dTag(TAG, "initResult: "
+ initResult);if
(initResult != IdCardVerifyError.OK) {toast("人证引擎初始化失败,错误码: " +
initResult);}} else {toast("人证引擎激活失败,错误码: " +
activeResult);}}});}});} else if (result !=
IdCardVerifyError.OK) {toast("人证引擎初始化失败,错误码: " + result);}}

ArcFace 3.0 :

private void initEngine() {int result =
faceEngine.init(this, DetectMode.ASF_DETECT_MODE_VIDEO,
DetectFaceOrientPriority.ASF_OP_ALL_OUT, 16, 1,FaceEngine.ASF_FACE_DETECT |
FaceEngine.ASF_FACE_RECOGNITION);LogUtils.dTag(TAG,
"initResult: " + result);if (result ==
ErrorInfo.MERR_ASF_NOT_ACTIVATED) {Executors.newSingleThreadExecutor().execute(() -> {int activeResult =
FaceEngine.active(MainActivity.this, Constants.APP_ID, Constants.SDK_KEY);runOnUiThread(() ->
{LogUtils.dTag(TAG,
"activeResult: " + activeResult);if (activeResult ==
ErrorInfo.MOK) {int initResult =
faceEngine.init(this, DetectMode.ASF_DETECT_MODE_VIDEO,
DetectFaceOrientPriority.ASF_OP_ALL_OUT, 16, 1,FaceEngine.ASF_FACE_DETECT | FaceEngine.ASF_FACE_RECOGNITION);LogUtils.dTag(TAG

http://chatgpt.dhexx.cn/article/oDRAwrH4.shtml

相关文章

人证核验、人证比对系统应用行业如何判别

一、人证合一验证系统产品简介: 人证合一验证系统是一套利用专业证件扫描设备和身份证阅读机具,实现采集持证人相片与所持证件人相关信息发送至公安部身份证副本库进行生物特征比对,验证人与证是否一致的软硬件结合系统。 从技术上基本解决…

1.Oracle 安装教程及使用

1.win10 安装Oracle19c 详细步骤 链接资源: https://blog.csdn.net/qq_39915083/article/details/107055864? 2.wind10 安装oracle 11g教程完整版 链接资源: https://blog.csdn.net/qq_36205206/article/details/117170099? 备注:以上安…

oracle的安装教程

这里介绍oracle在64位操作系统上的的安装教程: 1、首先到官网https://www.oracle.com/index.html上去下载oracle64位的安装程序,将两个程序解压到同一目录中。如下图所示: 2、下载完成后,将2个压缩文件一起选中,鼠…

如何安装Oracle--新手安装Oracle教程

首先我们来了解一下Oracle: Oracle是一个数据库管理系统,类似于MySql和Sql Server,它是Oracle公司的核心产品。因为该公司在信息管理系统、企业数据处理、Internet及电子商务等领域使用非常广泛,其在数据安全性与完整性控制方面的优越性能比较…

非常好的Oracle基础教程

http://www.blogjava.ne 字符串函数 LENGTH() 字符长度 LENTTHB() 字节长度;一个汉字内存中占用 2字节 LTRIM、RTRIM、TRIM 截串 SUBSTR(表达式,位置,长度) Oracle 无左右取串函数,但可以使用变通方式完成。 左取串&#…

Oracle使用

前言 Oracle需要先创建用户,用户才可以创表 MySQL为先创建数据库,数据库创表 一、基础搭建 在Oracle中,表空间分为(永久表空间和临时表空间 表空间:最终持久化保存的物理位置 临时表空间:当我们对数据库进行各种操…

Oracle——如何使用

1.启动Oracle 法1:winR —> cmd —> sqlplus “/as sysdba” //以sysdba身份登录 法2:winR —> cmd —> sqlplus username/password //以指定用户名/密码身份登录 法3:winR —> cmd —> sqlplus //按照提示,…

Oracle教程(一)--基础操作

一、Oracle简介 Oracle Database,又名Oracle RDBMS,简称Oracle。是甲骨文公司推出的一款关系数据库管理系统。 Oracle数据库系统是目前世界上流行的关系数据库管理系统,拥有可移植性好、使用方便、功能强等优点,在各类大、中、小…

Oracle数据库的安装及使用教程

本教程主要根据慕课网视频:Oracle数据库开发必备利器之SQL基础 整理 一、Oracle数据库的下载 下载地址:https://www.oracle.com/index.html (1) 不建议选择此页面的数据库客户端界面下载Oracle的Client,因为与数据…

oracle安装教程以及使用注意事项

oracle安装包下载 http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_database_1of2.zip http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_database_2of2.zip SQL Developer下载地址 oracle安装 一、解压两个压缩包到同一目录下&#xff0…

Oracle数据库安装使用(详细教程)

教程文档下载:https://wwa.lanzoui.com/iyMrarevbtc Oracle数据库控制台(图形界面)下载:https://wwa.lanzoui.com/iRV7Grevhhg Oracle数据库(百度云盘)下载: 链接:https://pan.baidu…

实测好用的四个有免费API接口的网站

弹性API (txapi.cn) YesApi 小白免费接口 | 果创云,一个账号,搞定接口开发 免费API - 提供免费接口调用平台 (aa1.cn) 大米API - 免费API数据接口调用服务平台 (qqsuu.cn)

一个不错的API平台 接口完全免费,免费接口API调用

一个不错的API平台 接口完全免费 现在有接口已经有五十多个了 速度很快稳定 接口标准,对接方式简捷,减少开发成本,提高开发效率 专业的开发团队,针对开发者定制各种数据 极速响应,利于及时获取数据,提升服…

超多免费API接口分享

分享一下近段时间在网上看的超多免费API接口,赶紧收藏起来吧! 一、APISpace 为超过100 万开发者提供专业的 API 服务,包括 API 管理、测试、访问控制等功能,让您无忧探索广阔的API世界~所有接口提供免费试用 https://www.apisp…

推荐几大免费api接口

1、星际API http://150.158.81.108:6623/ 2、

超百个免费api接口

API(应用程序编程接口) API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程…

免费常用API汇总

分享一下近段时间在网上看的超多免费API接口,赶紧收藏起来吧! 一、APISpace 为超过100 万开发者提供专业的 API 服务,包括 API 管理、测试、访问控制等功能,让您无忧探索广阔的API世界~所有接口提供免费试用 https://www.apisp…

使用Jmeter开发app端接口自动化案例实战

开发思路 1、开发app端接口自动化案例,首先需要使用Fiddler抓包; 2、目前接触到的app端都是https协议,所以需要开启Fiddler的https协议 3、抓包完成之后,使用jmeter模拟请求,调试成功,案例开发完成&#xf…

fiddler+jmeter自动化投票

0x00 前几年,在上一家公司需要员工为创新单位投票,每天只能投一票。那就投呗,我就多点击两下投票,界面显示“一个IP每天只能投一票”,这个提示好奇怪,“一个IP”?合着不同的IP地址就是可以继续…

Jmeter-获取本地动态from参数

如何引用本地动态from参数? 方法如下 1.本地新建txt文档,使用Notepad进行转码,正确编码:UTF-8,命名data05.txt 2.新建请求一,HTTP请求设置POST,值与CSV数据文件设置的变量名(a,b,c,d,e)保持一致,f1,f2,f3…