AI人脸识别SDK接入 — 参数优化篇(虹软)
引言
使用了虹软公司免费的人脸识别算法,感觉还是很不错的,当然,如果是初次接触的话会对一些接口的参数有些疑问的。这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux、android基本一样),希望能更好的帮助各位接入虹软的人脸识别算法~
本文主要分析以下两个参数:
- detectFaceMaxNum
- combinedMask
detectMode参数介绍
在引擎初始化的时候,需要选择video或image模式,在接口头文件中定义了宏ASF_DETECT_MODE_VIDEO、ASF_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 检测到的人脸数对应的性能消耗
测试用例:
- 1280*720像素图像数据;
- 循环检测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 |
|
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参数的解释:
初始化中参数combinedMask与ASF_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接口不同属性的性能
测试用例:
- 1280*720像素图像数据;
- 循环检测100次取平均值;
测试代码:
LARGE_INTEGER litmp;
LONGLONG QPart =0, QPart1 =0, QPart2 =0;
QueryPerformanceFrequency(&litmp);//获得时钟频率
QPart = litmp.QuadPart;
//获得开始时CPU嘀哒声
QueryPerformanceCounter(&litmp);//获得时钟初始值
QPart1 = litmp.QuadPart;
//这里要计算的的代码执行的时间
for (inti =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/ |
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接入 — 参数优化篇(虹软)的更多相关文章
- 虹软AI 人脸识别SDK接入 — 参数优化篇
引言 使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.android基本一样), ...
- 虹软人脸识别SDK接入Milvus实现海量人脸快速检索
一.背景 人脸识别是近年来最热门的计算机视觉领域的应用之一,而且现在已经出现了非常多的人脸识别算法,如:DeepID.FaceNet.DeepFace等等.人脸识别被广泛应用于景区.客运.酒店.办公室 ...
- 虹软人脸识别SDK在网络摄像头中的实际应用
目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此篇中介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容 ...
- Java版 人脸识别SDK demo
虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! 前言 由于业务需求,最近跟人脸识别杠上了,本以为虹软提供的SDK是那种面向开发语言的,结果是一堆dll· ...
- Java版 人脸识别SDK dem
虹软人脸识别SDK之Java版,支持SDK 1.1+,以及2.0版本,滴滴,抓紧上车! 前言由于业务需求,最近跟人脸识别杠上了,本以为虹软提供的SDK是那种面向开发语言的,结果是一堆dll······ ...
- Java离线人脸识别SDK 支持arcface 2.0 最新版
虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! JDK SDK Win release license status 前言 由于业务需求,最近跟人脸识别 ...
- 基于百度AI人脸识别技术的Demo
编写demo之前首先浏览官方API:http://ai.baidu.com/docs#/Face-API/top 下面是源码: package com.examsafety.test; import ...
- 技能节-AI人脸识别
我们收到技能节项目的通知是在两周之前,项目要求做个人脸评分系统. 两周时间写一个"人脸评分系统",好像时间比较紧了,还好我们完成了~这个项目是将摄像头捕获到的包含人脸的图像传输到百 ...
- 百度离线人脸识别sdk的使用
1.1下载sdk运行 百度离线人脸识别sdk的使用 1.2配置环境 添加至项目,可以拖动复制或者以类库形式添加face-resource此文件夹 放到根目录上一层 激活文件与所有dll引用放到根目录嫌 ...
随机推荐
- C# System.Web.Mail.MailMessage 发邮件
C# System.Web.Mail.MailMessage 发邮件 新建控制台Console项目,然后添加 System.Web引用 代码如下: using System; using System ...
- 如何连接到远程windows服务器
在学习和工作中,有些时候我们需要连接到远程服务器,这里,我来演示如何连接到windows服务器. 1. 首先利用快捷键win+r打开运行,或者在搜索框搜索“运行”,然后在运行框输入mstsc,点击确定 ...
- [LeetCode] 637. Average of Levels in Binary Tree 二叉树的层平均值
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...
- postgresql数据库中多个Schemas互相访问
背景: 用postgresql创建了一个数据库userDataBase,在这个数据库中创建了Schemas userA,Schemas userB,Schemas userC三个Schemas之后,给 ...
- TCP/IP学习笔记3--传输方式的分类
网络通信中有多中分类方法: )分组较短.出错几率降低,每次重发的数据量也降低,不仅提高了可靠性,也降低了时延.缺点:(1)因为数据进入交换节点后要经历存储转发这一过程,从而引起的转发时延(包含接受分组 ...
- C++和C API调用
c++是C的超集,不可避免的要兼容C的特性,C++在C基础山的拓展部分叫做C with class,同时C++有自己特有的属性比如模板template. C并不完全是C++的子集. 那么如何在C/C+ ...
- LeetCode 151. 翻转字符串里的单词(Reverse Words in a String)
151. 翻转字符串里的单词 151. Reverse Words in a String
- 使用nohup命令编写shell脚本启动java应用,并使用外挂配置文件
nohup nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应的进程. 在缺省情况下该作业的所 ...
- linux 下用C实现 ATM 自动取款机功能 (进程间通信)
直接先上图: 项目需求: 主要分为两人大模块: 客户端 .进入时的功能开户.销户.登录.解锁 开户:输入姓名.身份证号.设置密码,如果开户成功,则服务器上保存一个账号信号(一个账号存一个文件,文件名建 ...
- MySQL直方图
MySQL8.0开始支持索引之外的数据分布统计信息可选项 我们知道,在DB中,优化器负责将SQL转换为很多个不同的执行计划,完了从中选择一个最优的来实际执行.但是有时候优化器选择的最终计划有可能随着D ...