1. 程式人生 > >Android 虹軟免費人臉識別 SDK開發

Android 虹軟免費人臉識別 SDK開發

一次 tst 足夠 到手 柵格 roi sta 開發 true

目前我們的應用內使用了 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開發