引言

使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的。这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux、android基本一样),希望能更好的帮助各位接入虹软的人脸识别算法。

本文主要分析以下两个参数:

  • detectFaceMaxNum
  • combinedMask

detectMode参数介绍

在引擎初始化的时候,需要选择videoimage模式,在接口头文件中定义了宏ASF_DETECT_MODE_VIDEOASF_DETECT_MODE_IMAGE,根据需要的模式传入即可。video模式对应人脸追踪算法(FT),image模式对应人脸检测算法(FD),关于FT/FD算法的区别可以参考虹软AI 人脸识别SDK接入 — 参数优化篇(1) 通过测试数据,个人感觉image模式下的数据更能准确的体现算法的能力,下面关于其他参数的介绍均在image模式下进行;

测试机器硬件配置:

  • 处理器:Intel(R)Corei5-7400 CPU @ 3.00GHZ 300GHZ
  • 安装内存(RAM):16.00GB(15.9GB可用)
  • 系统类型:win-10 64位操作系统

参数介绍:

一、detectFaceMaxNum参数说明

1.1 推荐值

初始化接口中detectFaceMaxNum参数的设置决定ASFDetectFaces(FT/FD)接口单帧图片允许检测的最大人脸数,官网推荐最大值不超过50,虽然可以设置更大的值,但是没有必要,下面数据可以说明;

1.2 检测到的人脸数对应的性能消耗

测试用例:

  1. 1280*720像素图像数据;
  2. 循环检测100次取平均值;
  • ASF_DETECT_MODE_IMAGE模式

单帧图片中人脸数

耗时(ms)

1

16

2

21

4

167

8

186

16

289

  • ASF_DETECT_MODE_VIDEO模式

单帧图片中人脸数

耗时(ms)

1

3

2

4

4

4

8

4

16

5

通过以上数据可以看出,image模式下图片中人脸数越多单次检测的耗时会越长,video模式下图片中人脸数越多单次检测的耗时也会有略微增加。综上,detectFaceMaxNum参数的设置多少并不影响内存的分配以及性能的消耗,仅是设置算法单帧检测的最大人脸数。

二、combinedMask参数说明

2.1 内存占用

combinedMask参数是初始化引擎时传入不同属性功能组合,传入的属性越多引擎分配的内存越大。实际应用情况下,传入必需的属性组合即可,传入多余属性只会占用内存。

下表数据是在测试其他参数固定,只修改mask参数时初始化接口内存的占用情况(数据取自windows任务管理器):

ASFInitEngine(ASF_DETECT_MODE_IMAGE, ASF_OP_0_ONLY, 32, 5, combinedMask, &handle);

combinedMask

内存占用(KB)

对应算法接口

全属性

121,148

全接口

无属性

4,920

ASF_FACE_DETECT

44,424

ASFDetectFaces

ASF_FACERECOGNITION

27,564

ASFFaceFeatureExtract
ASFFaceFeatureCompare

ASF_AGE

23,008

ASFProcess/ASFGetAge

ASF_GENDER

23,316

ASFProcess/ASFGetGender

ASF_FACE3DANGLE

20,484

ASFProcess/ASFGetFace3DAngle

ASF_LIVENESS

53,200

ASFProcess/ASFGetLivenessScore

2.2 ASFInitEngine接口与ASFProcess接口中combinedMask参数的关系

官方文档对ASFProcess接口中combinedMask参数的解释:

初始化中参数combinedMaskASF_AGE | ASF_GENDER | ASF_FACE3DANGLE | ASF_LIVENESS交集的子集;

举例说明:

例1:ASFInitEngine接口中传入全属性,则ASFProcess接口可以传入ASF_AGE、ASF_GENDER、 ASF_FACE3DANGLE、 ASF_LIVENESS四种属性的任意组合。

例2:ASFInitEngine接口中传入ASF_FACE_DETECT | ASF_FACERECOGNITION | ASF_AGE | ASF_GENDER ,则ASFProcess接口只能传入ASF_AGE、 ASF_GENDER两种属性的任意组合。

2.3 cpu占用

cpu占用受设备以及测试条件影响比较大,根据使用情况ASF_AGE | ASF_GENDER | ASF_FACE3DANGLE对应的算法对cpu的消耗是比较少的,但ASF_LIVENESS是比较消耗cpu资源的,需要根据自身设备做对应处理。

2.4 ASFProcess接口不同属性的性能

测试用例:

  1. 1280*720像素图像数据;
  2. 循环检测100次取平均值;

测试代码:

LARGE_INTEGER  litmp;
LONGLONG  QPart = 0, QPart1 = 0, QPart2 = 0;
QueryPerformanceFrequency(&litmp);   //获得时钟频率
QPart = litmp.QuadPart;
//获得开始时CPU嘀哒声
QueryPerformanceCounter(&litmp);//获得时钟初始值
QPart1 = litmp.QuadPart;
 
//这里要计算的的代码执行的时间
for (int i = 0; i<100; i++)
{
         res = ASFProcess(handle, cutImg1->width, cutImg1->height, ASVL_PAF_RGB24_B8G8R8, (MUInt8*)cutImg1->imageData, &detectedFaces1, processMask);
}
 
QueryPerformanceCounter(&litmp);     //获得时钟终止值
QPart2 = litmp.QuadPart;
//计算时间差(ms)
double time = (double)(QPart2 - QPart1) / (double)QPart * 1000;
printf("time = %lf\n", time);

测试结果

combinedMask参数

性能(ms)

ASF_AGE/ASF_GENDER/
ASF_FACE3DANGLE/ASF_LIVENESS

193

ASF_AGE

29

ASF_GENDER

13

ASF_FACE3DANGLE

7

ASF_LIVENESS

169

综上所述,年龄、性别、3d角度的检测是非常快的,活体检测相对较慢。在实际应用中仅需要检测ASF_AGE、ASF_GENDER、 ASF_FACE3DANGLE的话,可以放在主线程中处理,但如果需要检测ASF_LIVENESS建议单开线程去处理,这样在video模式下不会出现卡帧的情况,界面显示比较流畅。

如果想下载虹软sdk的话,可以去https://ai.arcsoft.com.cn/product/arcface.html?utm_source=bky&utm_medium=referral

虹软AI 人脸识别SDK接入 — 参数优化篇的更多相关文章

  1. AI人脸识别SDK接入 — 参数优化篇(虹软)

    引言 使用了虹软公司免费的人脸识别算法,感觉还是很不错的,当然,如果是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.andro ...

  2. 虹软人脸识别SDK接入Milvus实现海量人脸快速检索

    一.背景 人脸识别是近年来最热门的计算机视觉领域的应用之一,而且现在已经出现了非常多的人脸识别算法,如:DeepID.FaceNet.DeepFace等等.人脸识别被广泛应用于景区.客运.酒店.办公室 ...

  3. 虹软免费人脸识别SDK注册指南

    成为开发者三步完成账号的基本注册与认证:STEP1:点击注册虹软AI开放平台右上角注册选项,完成注册流程.STEP2:首次使用,登录后进入开发者中心,点击账号管理完成企业或者个人认证,若未进行实名认证 ...

  4. Android 虹软免费人脸识别 SDK开发

    目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得集成ArcFace FD 的集成过程非常简单在 ArcFace FD 的 ...

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

    目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此篇中介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容 ...

  6. 关于虹软人脸识别SDK的接入

    背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 ...

  7. 虹软人脸识别SDK的接入方法

    背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 ...

  8. Java版 人脸识别SDK demo

    虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! 前言 由于业务需求,最近跟人脸识别杠上了,本以为虹软提供的SDK是那种面向开发语言的,结果是一堆dll· ...

  9. Java版 人脸识别SDK dem

    虹软人脸识别SDK之Java版,支持SDK 1.1+,以及2.0版本,滴滴,抓紧上车! 前言由于业务需求,最近跟人脸识别杠上了,本以为虹软提供的SDK是那种面向开发语言的,结果是一堆dll······ ...

随机推荐

  1. [Wireshark]_002_玩转数据包

    通过前一篇文章,我们大概了解了Wireshark,现在可以准备好进行数据包的捕获和分析了.这一片我们将讲到如何使用捕获文件,分析数据包以及时间格式显示等. 1.使用捕获文件 进行数据包分析时,其实很大 ...

  2. 百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

    一般来说,大型应用通常会被拆分成多个子系统,这些子系统可能会部署在多台机器上,也可能只是一台机器的多个进程中,这样的应用就是分布式应用.在讨论分布式应用时,很多初学者会把它和集群这个概念搞混,因为从部 ...

  3. 国际化之fmt标签

    1. 什么是国际化和本地化: I. 本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯.II. 国际化:软件开发时,让它能支持多个国家和地区的本地化应用.使得应用软 ...

  4. 分布式事务解决方案Seata

    Seata全称是Simple Extensible Autonomous Transaction Architecture,是由阿里巴巴开源的具有高性能和易用性的分布式事务解决方案. 微服务中的分布式 ...

  5. C语言/Linux命令行参数argc、argv[ ]详解

    1.void main(int argc,char *argv[]) argv[]:表示的是一个指针数组,一共有argc个元素,其中存放的是指向每一个参数的指针. argc:参数个数 2.以Linux ...

  6. Chisel3 - Tutorial - Tbl

    https://mp.weixin.qq.com/s/e8vJ8claauBtiuedxYYaJw   实现可以动态索引的表.   参考链接: https://github.com/ucb-bar/c ...

  7. Java实现 LeetCode 707 设计链表(环形链表)

    707. 设计链表 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链 ...

  8. Java实现 LeetCode 222 完全二叉树的节点个数

    222. 完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集 ...

  9. Python之大数据库hive实战

    今天和大家分享的是Python如何连接hive数据库来进行hivesql的查询操作.   step1:环境准备 Python版本:3.6.2 Windows版本:Windows10版本的64位 ste ...

  10. 【整理】JVM知识点大梳理

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.引入Java语 ...