Android 虹軟免費人臉識別 SDK開發
目前我們的應用內使用了 ArcFace 的人臉檢測功能,其他的我們並不了解,所以這裏就和大家分享一下我們的集成過程和一些使用心得
集成
ArcFace FD 的集成過程非常簡單
在 ArcFace FD 的文檔上有說明支持的系統為 5.0 及以上系統,但其實在 4.4 系統上也是可以跑的,
if (engine == null) { // && Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { try { engine = new AFD_FSDKEngine(); AFD_FSDKError err = engine.AFD_FSDK_InitialFaceEngine( "XXXX", "XXXX", if (err.getCode() != 0) { engine.AFD_FSDK_UninitialFaceEngine(); engine = null; } } catch (Exception e) { e.printStackTrace(); engine = null; } }
我覺得 ArcFace 的優勢除了多角度檢測之外,另外一個是他的每次檢測並不是獨立,即這一次的檢測結果會指導下一次的檢測 (我猜測的->_->)
所以 ArcFace 在檢測到人臉之後,識別的時間會大幅減少,而 Seeta FD 的檢測每次都是獨立的,所以在無人臉的情況下,Seeta 的檢測速度要快於 ArcFace, 但是檢測到人臉之後,因為應用整體的計算量增加,導致 Seeta 的檢測速度降低的非常明顯,大大慢於 ArcFace, (所以二者是不是可以結合一下…)
AFD_FSDKError err = engine.AFD_FSDK_StillImageFaceDetection(data, width, height, AFD_FSDKEngine.CP_PAF_NV21, result);
優化
不得不說 ArcFace FD 的錯誤率是有待優化的,雖然 ArcFace 沒有提供任何可以調節的參數,但是還是可以稍微優化一下!
因為從攝像頭出來的 yuv 數據是橫向的,而 ArcFace 只有 AFD_OPF_0_HIGHER_EXT 這個擴展選項,優先檢測 0 度方向, 但是這個方向一般是沒有人臉的,所以如果直接進行檢測,我們覺得這個可能會增加檢測的錯誤率(猜的->_->),所以處理方法是將 yuv 旋轉到手機豎屏方向(當然這個操作不是直接由 CPU 來處理,而是從 Camera 的外部紋理上開始做操作)再拿去檢測,這樣會減少一點錯誤率(從用戶反饋得出),雖然錯誤率依然很高(特別對於帶柵格的物體)希望虹軟能繼續優化!
另外一個是目前 ArcFace 還沒有支持 Android 8.x 系統,所以這種情況下,我們會啟用備選的其他方案來進行人臉檢測!
最後希望虹軟能把 ArcFace 越做越好 _ 因為只有產品足夠好才會不斷的有人為你做免費宣傳
查看更多分享戳?ArcFace Android 人臉檢測集成分享
Android 虹軟免費人臉識別 SDK開發