虹软人脸识别 - faceId及IR活体检测的介绍

前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下:

? VIDEO模式新增faceId(类似于之前文章中提到的trackId)
? 新增IR活体检测功能
? 新增IR、RGB的活体阈值设置

一、faceId介绍

1. 定义

在连续的视频帧中,当一个人脸进入视频画面直到离开,其faceId不变。

2. 应用场景举例

在门禁应用场景下,若一个人长时间停留在画面中,借助faceId的功能,在此人的人脸特征提取成功后,可不再对此人的后续人脸信息进行处理。

3. 注意事项

faceId在VIDEO模式下有意义;
faceId在IMAGE模式下无效。

二、 IR活体检测

1. 接口介绍

支持的颜色格式如下:
Windows: GRAY、DEPTH_U16、NV21、NV12、I420
Android: GRAY、DEPTH_U16、NV21
:若图像数据的颜色格式不在上述列表中,必须对图像数据进行格式转换。

2. IR活体检测实现方案

? 单目摄像头检测方案(IR)

单目摄像头检测流程

注意:在Windows平台下,若通过OpenCV获取IR摄像头的图像数据,由于其颜色格式为BGR_24,不能用于IR活体检测,需要转成GRAY(或IR活体检测接口支持的其他颜色格式),但BGR_24数据可直接用于人脸检测。

? 双目摄像头检测方案(IR + RGB)

双目摄像头检测流程

人脸检测结果信息调整 :若RGB摄像头和IR摄像头的成像不一致(存在偏移、旋转、镜像等问题),需要将传递给IR活体检测的人脸信息(人脸框、人脸角度)进行调整。

3. 双目IR活体检测遇到的坑

在双目的画面有明显的不一致的情况时,若我们直接把RGB摄像头的人脸检测结果用于IR活体检测,很有可能会报81925(人脸置信度低)错误。原来,摄像头回传的数据和我们直接看到的画面很可能是不一样的,我们看到的画面可能是经过处理的(缩放、旋转、镜像等)。

? 检测方法

最直观的检查方法就是将摄像头数据显示到屏幕上。只要我们把2个摄像头回传的数据显示到屏幕上,就能了解两个摄像头数据的成像关系。例如Android平台可使用以下方式查看NV21数据:
示例流程
nv21 -> YuvImage -> jpg bytes -> bitmap -> ImageView。
示例代码

 @Override
  public void onPreview(final byte[] nv21, Camera camera) {
    ......
    //30帧一次,把帧数据显示到界面上(要是每帧都做就太卡了),若还是影响UI请放到子线程处理
    if (index++ % 30 == 0) {
      YuvImage yuvImage = new YuvImage(nv21, ImageFormat.NV21, previewSize.width, previewSize.height, null);
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      yuvImage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 100, baos);
      byte[] bytes = baos.toByteArray();
      ivFrame.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
    }
    ......
  }

? 解决方案

1. RGB和IR摄像头图像数据的其中一个被左右镜像

对于这种情况,我们在将RGB数据的人脸检测结果用于IR活体检测时,需要将其人脸框(rect)进行左右镜像调整。(Android demo中已提供左右镜像的代码):

 /**
     * 人脸框水平镜像
     *
     * @param rect 人脸框
     * @return 水平镜像后的人脸框
     */
    private Rect mirrorRectHorizontal(Rect rect) {
        Rect newRect = new Rect(rect);
        newRect.right = previewSize.width - rect.left;
        newRect.left = previewSize.width - rect.right;
        return newRect;
    }

2. RGB和IR摄像头图像数据均被镜像或均未被镜像

对于这种情况,RGB数据的人脸检测结果用于IR活体检测时,不需要进行镜像调整。

3. RGB和IR摄像头图像数据有旋转关系

若有旋转关系,我们不仅要旋转人脸信息(FaceInfo)中的人脸框(rect),还需要修改人脸角度(orient)。否则IR活体检测将无法解析人脸,报81925错误。
(Android demo中已提供将orient单次旋转90度的代码):

/**
 * 获取逆时针旋转90度后的人脸角度
 *
 * @param orient 人脸角度信息,即{@link FaceInfo#orient}属性,由{@link FaceEngine#detectFaces(byte[], int, int, int, List)}接口获取
 * @return 旋转后的人脸角度
 */
private int rotateOrient(int orient) {
    switch (orient) {
        case FaceEngine.ASF_OC_0:
            return FaceEngine.ASF_OC_90;
        case FaceEngine.ASF_OC_90:
            return FaceEngine.ASF_OC_180;
        case FaceEngine.ASF_OC_180:
            return FaceEngine.ASF_OC_270;
        case FaceEngine.ASF_OC_270:
            return FaceEngine.ASF_OC_0;
        default:
            throw new IllegalArgumentException("unsupported orient ‘" + orient + "‘");
    }
}

以上是个人使用的一点心得,如果需要下载虹软sdk可以到官网:https://ai.arcsoft.com.cn/product/arcface.html?utm_source=51cto&utm_medium=referral

原文地址:https://blog.51cto.com/14633836/2459795

时间: 2024-10-03 21:19:40

虹软人脸识别 - faceId及IR活体检测的介绍的相关文章

基于Android 虹软人脸、人证对比,活体检测

最近虹软新增了人证识别.活体检测的功能,好像之前的人脸识别也更新过版本,之前一篇文章用虹软Android SDK做人脸识 别,写过虹软人脸识别的用法,最近把人脸识别.人证识别,活体检测功能都简单的封装了一下,使用起来可以更简单一点: 但是由于appkey是和so库绑定的,所以不能直接依赖,需要下载项目换成自己的so库就能使用或者发布了,还是挺方便的 虹软人脸识别库的介绍``so库和appkey是绑定的 以人脸识别为例,它包括人脸检测.人脸追踪.人脸识别.年龄识别.性别识别这5种引擎,每个引擎都有

虹软人脸识别应用开发过程

趁空闲的一点点时间向大家分享一个好用的人脸识别的应用--来自虹软公司的人脸识别推荐这家的产品主要有以下几个理由~1.免费!免费!免费!它家比较良心.人脸识别.人证核验.活体检测等等一切的sdk都是免费下载使用的- -即使商用也可以~非常适合我这种小穷人2.根据不同操作平台提供不同的SDK目前可下载Windows x86,x64平台(c++/Java语言).Linux x64平台(c++/Java语言).iOS平台(Objective-C语言)与Android arm32平台(Java语言)3.官

虹软人脸识别3.0 - 图像数据结构介绍(C++)

从虹软开放了2.0版本SDK以来,由于具有免费.离线使用的特点,我们公司在人脸识别门禁应用中使用了虹软SDK,识别效果还不错,因此比较关注虹软SDK的官方动态.近期上线了ArcFace 3.0 SDK版本,确实做了比较大的更新.上一篇主要介绍了关于Android平台算法的改进,本篇将介绍一下关于Windows平台算法的更新. 特征比对支持比对模型选择,有生活照比对模型和人证比对模型 识别率.防***效果显著提升 特征值更新,升级后人脸库需重新注册 人脸检测同时支持全角度及单一角度 新增了一种图像

Android 实现人脸识别教程[运用虹软人脸识别SDK]

基于虹软人脸识别引擎,在Android平台上实现人脸识别功能,即使在离线的情况下依旧运行,不被人采集个人照片的感觉,还是爽爽的.经过整个测试过来,虹软的人脸识别还是很强大的,人脸检测可以控制在20ms之内,人脸识别大概在200ms左右.今天就来分享一下开发经验 项目的目标 我们需要实现一个人脸识别功能.简单来说,就是机的后置摄像头,识别摄像头中实时拍到的人脸信息,如果人库注册过,则显示识别后的人脸信息,如登记的名字:如果不在,提示未注册. 这个功能具有多个应用场景,比如,火车站或者打卡和门禁系统

虹软人脸识别3.0 - 图像数据结构介绍(Android)

从虹软开放了2.0版本SDK以来,由于具有免费.离线使用的特点,我们公司在人脸识别门禁应用中使用了虹软SDK,识别效果还不错,因此比较关注虹软SDK的官方动态.近期上线了ArcFace 3.0 SDK版本,确实做了比较大的更新.首先本篇介绍一下关于Android平台算法的更新内容,下一篇将针对Windows平台的算法更新展开介绍. 特征比对支持比对模型选择,有生活照比对模型和人证比对模型 识别率.防***效果显著提升 特征值更新,升级后人脸库需重新注册 Android平台新增64位的SDK 图像

虹软人脸识别SDK在网络摄像头中的实际应用

目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此文章中有介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容仅供参考. 1.海康SDK接入基本流程 a.初始化并登录验证 NET_DVR_Init(); NET_DVR_DEVICEINFO_V30 struDeviceInfo = { 0 }; long lUserID = NET_DVR_Login_V30(m_cameraIp, m_cameraP

记C# 调用虹软人脸识别 那些坑

上一个东家是从事安防行业的,致力于人工智能领域,有自主人脸识别.步态识别的算法.C++同事比较称职有什么问题都可以第一时间反馈,并得到合理的处理,封装的DLL 是基于更高性能的GPU算法,可支持更多线路的运算,接口调用简单,只需要传入图片即可得到特征特征值.对于公司的项目,更多的是与各类接口进行交互.包括建立任务.上传视频.截取片段,抽取特征,学习特征,步态比对等对接接口的复杂业务逻辑.由于长期和C++接口对接,包括Kafka消息队列传输等,对于公司项目支撑的业务流程比较了解.至于底层算法,只是

如何使用虹软人脸识别门禁应用套件

导语:虹软ArcFaceGo智慧门禁应用套件包括门禁软件APK.PC管理客户端和云端服务三部分,最快3分钟即可完成智慧门禁系统的部署,帮助中小型企业降低开发成本,加快实现产品智能化落地.本文来自开发者投稿. 应公司需求,最近开发了一款有考勤功能的人脸门禁应用. 相比传统密码门禁操作不便,指纹和刷卡门禁容易冒用和代打卡,刷脸门禁采用生物识别技术,必须本人刷脸才能起效,在原有门禁的基础上的改造也比较容易. 刷脸门禁虽好,然而最大问题是,我并没有从零开发一款人脸门禁的能力.多方研究之下,我选择了虹软A

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

一.获取SDK 1.进入ArcFace2.0的申请地址 https://ai.arcsoft.com.cn/product/arcface.html 2.填写信息申请并提交 申请通过后即可下载SDK,查看APP_ID和SDK_KEY 二.功能介绍 虹软ArcFace 2.0 Android包含人脸检测.年龄信息检测.性别信息检测.人脸三维角度检测.活体检测.人脸特征提取.人脸特征比对功能. 其中暴露对外的功能方法有:active(激活) init(初始化) detectFaces(人脸检测) p