AI人臉識別SDK接入 引數優化篇(虹軟)

2022-08-03 07:39:11 字數 4530 閱讀 6344

使用了虹軟公司免費的人臉識別演算法,感覺還是很不錯的,當然,如果是初次接觸的話會對一些介面的引數有些疑問的。這裡分享一下我對一些引數的驗證結果(這裡以windows版本為例,linux、android基本一樣),希望能更好的幫助各位接入虹軟的人臉識別演算法~

在引擎初始化的時候,需要選擇videoimage模式,在介面標頭檔案中定義了巨集asf_detect_mode_videoasf_detect_mode_image,根據需要的模式傳入即可。video模式對應人臉追蹤演算法(ft),image模式對應人臉檢測演算法(fd),關於ft/fd演算法的區別可以參考虹軟ai 人臉識別sdk接入 — 引數優化篇(1) 通過測試資料,個人感覺image模式下的資料更能準確的體現演算法的能力,下面關於其他引數的介紹均在image模式下進行;

一、detectfacemaxnum引數說明

1.1推薦值

初始化介面中detectfacemaxnum引數的設定決定asfdetectfaces(ft/fd)介面單幀允許檢測的最大人臉數,官網推薦最大值不超過50,雖然可以設定更大的值,但是沒有必要,下面資料可以說明;

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

測試用例:

1280*720畫素影象資料;

迴圈檢測100次取平均值;

單幀中人臉數

耗時(ms)116

2214167

8186

16289

單幀中人臉數

耗時(ms)13

2444

84165

通過以上資料可以看出,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介面不同屬性的效能

測試用例:

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++)
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_age29

asf_gender13

asf_face3dangle7

asf_liveness

169

綜上所述,年齡、性別、3d角度的檢測是非常快的,活體檢測相對較慢。在實際應用中僅需要檢測asf_age、asf_gender、 asf_face3dangle的話,可以放在主線程中處理,但如果需要檢測asf_liveness建議單開執行緒去處理,這樣在video模式下不會出現卡幀的情況,介面顯示比較流暢。

虹軟AI 人臉識別SDK接入 引數優化篇(2)

使用了免費的人臉識別演算法,感覺還是很不錯的,但是初次接觸的話會對一些介面的引數有些疑問的。這裡分享一下我對一些引數的驗證結果 這裡以windows版本為例,linux android基本一樣 希望能更好的幫助各位接入虹軟的人臉識別演算法。在引擎初始化的時候,需要選擇video或image模式,在介...

關於虹軟人臉識別SDK的接入

背景 一 準備工作 注意 解釋如下 二sdk給到的arm架構的檔案 所以不建議自己瞎搞,按照支援的裝置好好搞 adb檢視裝置cup資訊可以檢視架構資訊,很簡單 在sdb連線後如下圖 二 開發工作 注意 2.識別就不需要你管了,只要正確使用,識別結果就會返回,拿到識別結果和使用者的唯一標識下邊就算成功...

關於虹軟人臉識別SDK的接入

背景 一 準備工作 注意 解釋如下 二sdk給到的arm架構的檔案 所以不建議自己瞎搞,按照支援的裝置好好搞 adb檢視裝置cup資訊可以檢視架構資訊,很簡單 在sdb連線後如下圖 二 開發工作 注意 2.識別就不需要你管了,只要正確使用,識別結果就會返回,拿到識別結果和使用者的唯一標識下邊就算成功...