使用了免費的人臉識別演算法,感覺還是很不錯的,但是初次接觸的話會對一些介面的引數有些疑問的。這裡分享一下我對一些引數的驗證結果(這裡以windows版本為例,linux、android基本一樣),希望能更好的幫助各位接入虹軟的人臉識別演算法。
在引擎初始化的時候,需要選擇video
或image
模式,在介面標頭檔案中定義了巨集asf_detect_mode_video
、asf_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引數的解釋:
初始化中引數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 (int i = 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
193asf_age
29asf_gender
13asf_face3dangle
7asf_liveness
169綜上所述,年齡、性別、3d角度的檢測是非常快的,活體檢測相對較慢。在實際應用中僅需要檢測asf_age、asf_gender、 asf_face3dangle的話,可以放在主線程中處理,但如果需要檢測asf_liveness建議單開執行緒去處理,這樣在video模式下不會出現卡幀的情況,介面顯示比較流暢。
AI人臉識別SDK接入 引數優化篇(虹軟)
使用了虹軟公司免費的人臉識別演算法,感覺還是很不錯的,當然,如果是初次接觸的話會對一些介面的引數有些疑問的。這裡分享一下我對一些引數的驗證結果 這裡以windows版本為例,linux android基本一樣 希望能更好的幫助各位接入虹軟的人臉識別演算法 在引擎初始化的時候,需要選擇video或im...
關於虹軟人臉識別SDK的接入
背景 一 準備工作 注意 解釋如下 二sdk給到的arm架構的檔案 所以不建議自己瞎搞,按照支援的裝置好好搞 adb檢視裝置cup資訊可以檢視架構資訊,很簡單 在sdb連線後如下圖 二 開發工作 注意 2.識別就不需要你管了,只要正確使用,識別結果就會返回,拿到識別結果和使用者的唯一標識下邊就算成功...
關於虹軟人臉識別SDK的接入
背景 一 準備工作 注意 解釋如下 二sdk給到的arm架構的檔案 所以不建議自己瞎搞,按照支援的裝置好好搞 adb檢視裝置cup資訊可以檢視架構資訊,很簡單 在sdb連線後如下圖 二 開發工作 注意 2.識別就不需要你管了,只要正確使用,識別結果就會返回,拿到識別結果和使用者的唯一標識下邊就算成功...