虹軟AI 人臉識別SDK接入 — 參數優化篇

引言

       使用了免費的人臉識別算法,感受仍是很不錯的,可是初次接觸的話會對一些接口的參數有些疑問的。這裏分享一下我對一些參數的驗證結果(這裏以windows版本爲例,linux、android基本同樣),但願能更好的幫助各位接入虹軟的人臉識別算法。html

本文主要分析如下兩個參數:linux

  • detectFaceMaxNum
  • combinedMask

detectMode參數介紹

       在引擎初始化的時候,須要選擇videoimage模式,在接口頭文件中定義了宏ASF_DETECT_MODE_VIDEOASF_DETECT_MODE_IMAGE,根據須要的模式傳入便可。video模式對應人臉追蹤算法(FT),image模式對應人臉檢測算法(FD),關於FT/FD算法的區別能夠參考虹軟AI 人臉識別SDK接入 — 參數優化篇(1) 經過測試數據,我的感受image模式下的數據更能準確的體現算法的能力,下面關於其餘參數的介紹均在image模式下進行;android

測試機器硬件配置:

  • 處理器:Intel(R)Corei5-7400 CPU @ 3.00GHZ 300GHZ
  • 安裝內存(RAM):16.00GB(15.9GB可用)
  • 系統類型:win-10 64位操做系統

參數介紹:

1、detectFaceMaxNum參數說明

1.1 推薦值算法

       初始化接口中detectFaceMaxNum參數的設置決定ASFDetectFaces(FT/FD)接口單幀圖片容許檢測的最大人臉數,官網推薦最大值不超過50,雖然能夠設置更大的值,可是沒有必要,下面數據能夠說明;windows

1.2 檢測到的人臉數對應的性能消耗ide

測試用例:性能

  1. 1280*720像素圖像數據;
  2. 循環檢測100次取平均值;
  • ASF_DETECT_MODE_IMAGE模式

單幀圖片中人臉數測試

耗時(ms)優化

1spa

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參數的設置多少並不影響內存的分配以及性能的消耗,僅是設置算法單幀檢測的最大人臉數。

2、combinedMask參數說明

2.1 內存佔用

       combinedMask參數是初始化引擎時傳入不一樣屬性功能組合,傳入的屬性越多引擎分配的內存越大。實際應用狀況下,傳入必需的屬性組合便可,傳入多餘屬性只會佔用內存。

下表數據是在測試其餘參數固定,只修改mask參數時初始化接口內存的佔用狀況(數據取自windows任務管理器):

ASF_DETECT_MODE_IMAGE325&handle;ASFInitEngine(, ASF_OP_0_ONLY,,, combinedMask,)

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參數的解釋:

初始化中參數與ASF_GENDERASF_FACE3DANGLEASF_LIVENESS交集的子集;combinedMaskASF_AGE |||

舉例說明:

例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;
000LONGLONG  QPart =, QPart1 =, QPart2 =;
QueryPerformanceFrequency(&litmp)//得到時鐘頻率;  
QPart = litmp.QuadPart;
//得到開始時CPU嘀噠聲
QueryPerformanceCounter(&litmp)//得到時鐘初始值;
QPart1 = litmp.QuadPart;
 
//這裏要計算的的代碼執行的時間
int0100for (i =; i<; i++)
{
ASFProcess(handle, cutImg1->width, cutImg1->height, ASVL_PAF_RGB24_B8G8R8, (MUInt8*)         res =cutImg1->imageData, &detectedFaces1, processMask);
}
 
QueryPerformanceCounter(&litmp)//得到時鐘終止值;    
QPart2 = litmp.QuadPart;
//計算時間差(ms)
 /  * 1000double time = (double)(QPart2 - QPart1)(double)QPart;
"time = %lf\n"printf(, 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

相關文章
相關標籤/搜索