From ba92b976c7fb9f8bbe4a1bf9d06fa8468d26be58 Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期一, 15 十二月 2025 18:01:13 +0800
Subject: [PATCH] 指纹钥匙柜人脸报错

---
 keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java |  906 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 479 insertions(+), 427 deletions(-)

diff --git a/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java b/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
index 3470c05..21befa4 100644
--- a/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
+++ b/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
@@ -55,6 +55,7 @@
     private int mLastFaceId;
 
     private float threholdScore;
+    private String groupId;
 
     public static volatile int initStatus = SDK_UNACTIVATION;
     public static volatile boolean initModelSuccess = false;
@@ -87,6 +88,14 @@
         faceAuth.setCoreConfigure(BDFaceSDKCommon.BDFaceCoreRunMode.BDFACE_LITE_POWER_NO_BIND, 2);
     }
 
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
     public void setActiveLog(boolean isLog) {
         if (faceAuth != null) {
             if (isLog) {
@@ -96,7 +105,11 @@
             }
         }
     }
-
+    public void destroy(){
+        /*if(rgbInstance!=null){
+            rgbInstance = null;
+        }*/
+    }
     public void setCheckMouthMask(boolean checkMouthMask) {
         this.checkMouthMask = checkMouthMask;
     }
@@ -118,7 +131,7 @@
     }
 
     public void initModel(
-        final Context context, BDFaceSDKConfig config, boolean isLog, final SdkInitListener listener) {
+            final Context context, BDFaceSDKConfig config, boolean isLog, final SdkInitListener listener) {
         setActiveLog(isLog);
         initModel(context, config, listener);
     }
@@ -144,12 +157,6 @@
         startInitModelTime = System.currentTimeMillis();
     }
 
-    public void destroy(){
-        if(rgbInstance!=null){
-            rgbInstance = null;
-        }
-    }
-
     public FaceCrop getFaceCrop() {
         return faceModel.getFaceCrop();
     }
@@ -168,7 +175,7 @@
 
     public void initDataBases(Context context) {
         if (FaceApi.getInstance().getmUserNum() != 0) {
-            //ToastUtils.toast(context, "浜鸿劯搴撳姞杞戒腑");
+            ToastUtils.toast(context, "浜鸿劯搴撳姞杞戒腑");
         }
         emptyFrame();
         // 鍒濆鍖栨暟鎹簱
@@ -187,23 +194,23 @@
         }
 
         future3 =
-            es3.submit(
-                new Runnable() {
-                    @Override
-                    public void run() {
-                        faceModel.getFaceSearch().featureClear();
-                        synchronized (faceModel.getFaceSearch()) {
-                            List<User> users = FaceApi.getInstance().getAllUserList();
-                            for (int i = 0; i < users.size(); i++) {
-                                User user = users.get(i);
-                                faceModel.getFaceSearch().pushPersonById(user.getId(), user.getFeature());
+                es3.submit(
+                        new Runnable() {
+                            @Override
+                            public void run() {
+                                faceModel.getFaceSearch().featureClear();
+                                synchronized (faceModel.getFaceSearch()) {
+                                    List<User> users = FaceApi.getInstance().getAllUserList();
+                                    for (int i = 0; i < users.size(); i++) {
+                                        User user = users.get(i);
+                                        faceModel.getFaceSearch().pushPersonById(user.getId(), user.getFeature());
+                                    }
+                                    if (FaceApi.getInstance().getmUserNum() != 0) {
+                                        ToastUtils.toast(context, "浜鸿劯搴撳姞杞芥垚鍔�");
+                                    }
+                                }
                             }
-                            if (FaceApi.getInstance().getmUserNum() != 0) {
-                                //ToastUtils.toast(context, "浜鸿劯搴撳姞杞芥垚鍔�");
-                            }
-                        }
-                    }
-                });
+                        });
     }
 
     private void setFail(LivenessModel livenessModel) {
@@ -235,12 +242,12 @@
 
         // 蹇�熸娴嬭幏鍙栦汉鑴镐俊鎭紝浠呯敤浜庣粯鍒朵汉鑴告锛岃缁嗕汉鑴告暟鎹悗缁幏鍙�
         FaceInfo[] faceInfos =
-            faceModel
-                .getFaceTrack()
-                .track(
-                    BDFaceSDKCommon.DetectType.DETECT_VIS,
-                    BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_FAST,
-                    rgbInstance);
+                faceModel
+                        .getFaceTrack()
+                        .track(
+                                BDFaceSDKCommon.DetectType.DETECT_VIS,
+                                BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_FAST,
+                                rgbInstance);
         return faceInfos;
     }
 
@@ -254,18 +261,18 @@
 
     private BDFaceImageInstance getBdImage(BDFaceImageConfig bdFaceImageConfig, boolean darkEnhance) {
         BDFaceImageInstance rgbInstance =
-            new BDFaceImageInstance(
-                bdFaceImageConfig.data,
-                bdFaceImageConfig.srcHeight,
-                bdFaceImageConfig.srcWidth,
-                bdFaceImageConfig.bdFaceImageType,
-                bdFaceImageConfig.direction,
-                bdFaceImageConfig.mirror);
+                new BDFaceImageInstance(
+                        bdFaceImageConfig.data,
+                        bdFaceImageConfig.srcHeight,
+                        bdFaceImageConfig.srcWidth,
+                        bdFaceImageConfig.bdFaceImageType,
+                        bdFaceImageConfig.direction,
+                        bdFaceImageConfig.mirror);
         BDFaceImageInstance rgbInstanceOne;
         // 鍒ゆ柇鏆楀厜鎭㈠
         if (darkEnhance) {
             rgbInstanceOne = faceModel.getDark().faceDarkEnhance(rgbInstance);
-
+            rgbInstance.destory();
         } else {
             rgbInstanceOne = rgbInstance;
         }
@@ -303,21 +310,10 @@
         }
         AtomicInteger isOutoBoundary = new AtomicInteger();
         BDFaceImageInstance cropInstance =
-            faceModel.getFaceCrop().cropFaceByLandmark(imageInstance, landmarks, 2.0f, false, isOutoBoundary);
+                faceModel.getFaceCrop().cropFaceByLandmark(imageInstance, landmarks, 2.0f, false, isOutoBoundary);
         return cropInstance;
     }
 
-    private static BDFaceImageInstance rgbInstance =null;
-    private LivenessModel livenessModel;
-    private String groupId;
-
-    /**
-     * 0:绠$悊鍛橈紝1锛氱敤鎴�
-     * @param groupId
-     */
-    public void setGroupId(String groupId){
-        this.groupId = groupId;
-    }
     /**
      * 妫�娴�-娲讳綋-鐗瑰緛-浜鸿劯妫�绱㈡祦绋�
      *
@@ -328,101 +324,98 @@
      * @param faceDetectCallBack
      */
     public void onDetectCheck(
-        final BDFaceImageConfig bdFaceImageConfig,
-        final BDFaceImageConfig bdNirFaceImageConfig,
-        final BDFaceImageConfig bdDepthFaceImageConfig,
-        final BDFaceCheckConfig bdFaceCheckConfig,
-        final FaceDetectCallBack faceDetectCallBack) {
+            final BDFaceImageConfig bdFaceImageConfig,
+            final BDFaceImageConfig bdNirFaceImageConfig,
+            final BDFaceImageConfig bdDepthFaceImageConfig,
+            final BDFaceCheckConfig bdFaceCheckConfig,
+            final FaceDetectCallBack faceDetectCallBack) {
         if (!FaceSDKManager.initModelSuccess) {
             return;
         }
         long startTime = System.currentTimeMillis();
         // 鍒涘缓妫�娴嬬粨鏋滃瓨鍌ㄦ暟鎹�
-        livenessModel = new LivenessModel();
+        LivenessModel livenessModel = new LivenessModel();
         // 鍒涘缓妫�娴嬪璞★紝濡傛灉鍘熷鏁版嵁YUV锛岃浆涓虹畻娉曟娴嬬殑鍥剧墖BGR
         // TODO: 鐢ㄦ埛璋冩暣鏃嬭浆瑙掑害鍜屾槸鍚﹂暅鍍忥紝鎵嬫満鍜屽紑鍙戠増闇�瑕佸姩鎬侀�傞厤
-        //System.out.println("==rgbInstance==>鍒濆鍖�");
-        if(rgbInstance!=null){
-            rgbInstance.destory();
-        }
-        rgbInstance = getBdImage(bdFaceImageConfig, bdFaceCheckConfig.darkEnhance);
+        BDFaceImageInstance rgbInstance = getBdImage(bdFaceImageConfig, bdFaceCheckConfig.darkEnhance);
         livenessModel.setTestBDFaceImageInstanceDuration(System.currentTimeMillis() - startTime);
         onTrack(
-            rgbInstance,
-            livenessModel,
-            new DetectListener() {
-                @Override
-                public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
-                    // 澶氬抚鍒ゆ柇
-                    if (!frameSelect(faceInfos[0])) {
-                        livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
-                        if (faceDetectCallBack != null && faceAdoptModel != null) {
-                            //System.out.println("==isOk==>澶氬抚鍒ゆ柇");
-                            faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
-                            faceDetectCallBack.onFaceDetectCallback(faceAdoptModel);
-                        }
+                rgbInstance,
+                livenessModel,
+                new DetectListener() {
+                    @Override
+                    public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
+                        // 澶氬抚鍒ゆ柇
+                        if (!frameSelect(faceInfos[0])) {
+                            livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
+                            if (faceDetectCallBack != null && faceAdoptModel != null) {
+                                faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+                                faceDetectCallBack.onFaceDetectCallback(faceAdoptModel);
+                            }
+                            rgbInstance.destory();
 
-                        return;
-                    }
-                    // 淇濆瓨浜鸿劯鐗瑰緛鐐�
-                    livenessModel.setLandmarks(faceInfos[0].landmarks);
-                    // 淇濆瓨浜鸿劯鍥剧墖
-                    livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
-                    // 鍙g僵妫�娴嬫暟鎹�
-                    if (checkMouthMask) {
-                        FaceMouthMask mouthMask = getFaceMouthMask();
-                        if (mouthMask != null) {
-                            float[] maskScores = mouthMask.checkMask(rgbInstance, faceInfos);
-                            if (maskScores != null && maskScores.length > 0) {
-                                float maskResult = maskScores[0];
-                                Log.d("mouth_mask", "mask_score:" + maskResult);
-                                if (livenessModel != null) {
-                                    livenessModel.setMouthMaskArray(maskScores);
+                            return;
+                        }
+                        // 淇濆瓨浜鸿劯鐗瑰緛鐐�
+                        livenessModel.setLandmarks(faceInfos[0].landmarks);
+                        // 淇濆瓨浜鸿劯鍥剧墖
+                        livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
+                        // 鍙g僵妫�娴嬫暟鎹�
+                        if (checkMouthMask) {
+                            FaceMouthMask mouthMask = getFaceMouthMask();
+                            if (mouthMask != null) {
+                                float[] maskScores = mouthMask.checkMask(rgbInstance, faceInfos);
+                                if (maskScores != null && maskScores.length > 0) {
+                                    float maskResult = maskScores[0];
+                                    Log.d("mouth_mask", "mask_score:" + maskResult);
+                                    if (livenessModel != null) {
+                                        livenessModel.setMouthMaskArray(maskScores);
+                                    }
                                 }
                             }
                         }
+
+                        // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
+                        if (faceDetectCallBack != null) {
+                            faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+                        }
+
+                        // 閫佹璇嗗埆
+                        onLivenessCheck(
+                                rgbInstance,
+                                bdNirFaceImageConfig,
+                                bdDepthFaceImageConfig,
+                                bdFaceCheckConfig,
+                                livenessModel,
+                                startTime,
+                                faceDetectCallBack,
+                                faceInfos);
                     }
 
-                    // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
-                    if (faceDetectCallBack != null) {
-                        faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
-                    }
+                    @Override
+                    public void onDetectFail() {
 
-                    // 閫佹璇嗗埆
-                    onLivenessCheck(
-                        rgbInstance,
-                        bdNirFaceImageConfig,
-                        bdDepthFaceImageConfig,
-                        bdFaceCheckConfig,
-                        livenessModel,
-                        startTime,
-                        faceDetectCallBack,
-                        faceInfos);
-                }
+                        emptyFrame();
+                        // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
+                        if (faceDetectCallBack != null) {
+                            faceDetectCallBack.onFaceDetectCallback(null);
+                            livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
 
-                @Override
-                public void onDetectFail() {
-
-                    emptyFrame();
-                    // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-                    if (faceDetectCallBack != null) {
-                        faceDetectCallBack.onFaceDetectCallback(null);
-                        livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
-                        //System.out.println("==isOk==>娴佺▼缁撴潫");
 //                        SaveImageManager.getInstance().saveImage(livenessModel, bdFaceCheckConfig.bdLiveConfig);
-                        faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
-                        faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+                            faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+                            faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+                        }
+                        rgbInstance.destory();
                     }
-                }
-            });
+                });
     }
 
     private float silentLive(
-        BDFaceImageInstance rgbInstance,
-        BDFaceSDKCommon.LiveType type,
-        float[] landmarks,
-        List<Boolean> list,
-        float liveScore) {
+            BDFaceImageInstance rgbInstance,
+            BDFaceSDKCommon.LiveType type,
+            float[] landmarks,
+            List<Boolean> list,
+            float liveScore) {
         float score = 0;
         if (landmarks != null) {
             synchronized (faceModel.getFaceLive()) {
@@ -465,11 +458,11 @@
      * @return
      */
     private float[] silentLives(
-        BDFaceImageInstance rgbInstance,
-        BDFaceSDKCommon.LiveType type,
-        FaceInfo[] faceInfos,
-        List<Boolean> list,
-        float liveScore) {
+            BDFaceImageInstance rgbInstance,
+            BDFaceSDKCommon.LiveType type,
+            FaceInfo[] faceInfos,
+            List<Boolean> list,
+            float liveScore) {
         float[] scores = {0, 0, 0}; // 鏈�澶氭娴�3涓汉鑴�
         if (faceInfos != null) {
             synchronized (faceModel.getFaceLive()) {
@@ -478,7 +471,7 @@
 
                 for (int i = 0; i < size; i++) {
                     scores[i] =
-                        faceModel.getFaceLive().silentLive(type, rgbInstance, faceInfos[i].landmarks, liveScore);
+                            faceModel.getFaceLive().silentLive(type, rgbInstance, faceInfos[i].landmarks, liveScore);
                 }
             }
         }
@@ -486,11 +479,11 @@
     }
 
     private void onDetect(
-        BDFaceCheckConfig bdFaceCheckConfig,
-        BDFaceImageInstance rgbInstance,
-        FaceInfo[] fastFaceInfos,
-        LivenessModel livenessModel,
-        DetectListener detectListener) {
+            BDFaceCheckConfig bdFaceCheckConfig,
+            BDFaceImageInstance rgbInstance,
+            FaceInfo[] fastFaceInfos,
+            LivenessModel livenessModel,
+            DetectListener detectListener) {
 
         long accurateTime = System.currentTimeMillis();
         FaceInfo[] faceInfos;
@@ -498,14 +491,14 @@
         if (bdFaceCheckConfig != null) {
             bdFaceCheckConfig.bdFaceDetectListConfig.usingQuality = true;
             faceInfos =
-                faceModel
-                    .getFaceDetect()
-                    .detect(
-                        BDFaceSDKCommon.DetectType.DETECT_VIS,
-                        BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
-                        rgbInstance,
-                        fastFaceInfos,
-                        bdFaceCheckConfig.bdFaceDetectListConfig);
+                    faceModel
+                            .getFaceDetect()
+                            .detect(
+                                    BDFaceSDKCommon.DetectType.DETECT_VIS,
+                                    BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
+                                    rgbInstance,
+                                    fastFaceInfos,
+                                    bdFaceCheckConfig.bdFaceDetectListConfig);
 
         } else {
             faceInfos = faceModel.getFaceDetect().detect(BDFaceSDKCommon.DetectType.DETECT_VIS, rgbInstance);
@@ -514,7 +507,7 @@
         livenessModel.setAccurateTime(System.currentTimeMillis() - accurateTime);
 
         if (faceInfos == null || faceInfos.length <= 0) {
-
+            rgbInstance.destory();
             detectListener.onDetectFail();
             return;
         }
@@ -543,45 +536,43 @@
      * @param faceDetectCallBack
      */
     public void onLivenessCheck(
-        final BDFaceImageInstance rgbInstance,
-        final BDFaceImageConfig nirBDFaceImageConfig,
-        final BDFaceImageConfig depthBDFaceImageConfig,
-        final BDFaceCheckConfig bdFaceCheckConfig,
-        final LivenessModel livenessModel,
-        final long startTime,
-        final FaceDetectCallBack faceDetectCallBack,
-        final FaceInfo[] fastFaceInfos) {
+            final BDFaceImageInstance rgbInstance,
+            final BDFaceImageConfig nirBDFaceImageConfig,
+            final BDFaceImageConfig depthBDFaceImageConfig,
+            final BDFaceCheckConfig bdFaceCheckConfig,
+            final LivenessModel livenessModel,
+            final long startTime,
+            final FaceDetectCallBack faceDetectCallBack,
+            final FaceInfo[] fastFaceInfos) {
+
         if (future2 != null && !future2.isDone()) {
             // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-            //future2.cancel(true);
-
-            //System.out.println("==isOk==>涔嬪墠娌$粨鏉�");
+            rgbInstance.destory();
             return;
         }
 
         future2 =
-            es2.submit(
-                new Runnable() {
+                es2.submit(
+                        new Runnable() {
 
-                    @Override
-                    public void run() {
-                        try {
-                            // 鑾峰彇BDFaceCheckConfig閰嶇疆淇℃伅
-                            if (bdFaceCheckConfig == null) {
+                            @Override
+                            public void run() {
 
-                                return;
-                            }
-                            onDetect(
-                                    bdFaceCheckConfig,
-                                    rgbInstance,
-                                    fastFaceInfos,
-                                    livenessModel,
-                                    new DetectListener() {
+                                // 鑾峰彇BDFaceCheckConfig閰嶇疆淇℃伅
+                                if (bdFaceCheckConfig == null) {
+                                    rgbInstance.destory();
 
-                                        @Override
-                                        public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
+                                    return;
+                                }
+                                onDetect(
+                                        bdFaceCheckConfig,
+                                        rgbInstance,
+                                        fastFaceInfos,
+                                        livenessModel,
+                                        new DetectListener() {
 
-                                            try {
+                                            @Override
+                                            public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
 
                                                 // 浜鸿劯id璧嬪��
                                                 if (mLastFaceId != fastFaceInfos[0].faceID) {
@@ -591,7 +582,7 @@
                                                 }
 
                                                 if (bdFaceCheckConfig == null) {
-
+                                                    rgbInstance.destory();
                                                     livenessModel.clearIdentifyResults();
                                                     if (faceDetectCallBack != null) {
                                                         faceDetectCallBack.onFaceDetectCallback(livenessModel);
@@ -603,7 +594,7 @@
                                                 if (!onBestImageCheck(livenessModel, bdFaceCheckConfig, faceDetectCallBack)) {
                                                     livenessModel.setQualityCheck(true);
                                                     livenessModel.clearIdentifyResults();
-
+                                                    rgbInstance.destory();
                                                     if (faceDetectCallBack != null) {
                                                         faceDetectCallBack.onFaceDetectCallback(livenessModel);
                                                     }
@@ -616,10 +607,11 @@
                                                         faceInfos, bdFaceCheckConfig.bdQualityConfig, faceDetectCallBack)) {
                                                     livenessModel.setQualityCheck(true);
                                                     livenessModel.clearIdentifyResults();
-
+                                                    rgbInstance.destory();
                                                     if (faceDetectCallBack != null) {
                                                         faceDetectCallBack.onFaceDetectCallback(livenessModel);
                                                     }
+
                                                     return;
                                                 }
 
@@ -756,7 +748,7 @@
 
                                                 // 濡傛灉璁剧疆涓轰笉杩涜娲讳綋妫�娴�
                                                 int liveCheckMode = livenessModel.getLiveType();
-                                                if (liveCheckMode == 0) {
+                                                if (liveCheckMode == 0){
                                                     isRgbScoreCheck = true;
                                                 }
                                                 // TODO 鐗瑰緛鎻愬彇+浜鸿劯妫�绱�
@@ -804,7 +796,7 @@
                                                                                             chin));
                                                                 }
 
-                                                                if (bdLiveConfig != null) {
+                                                                if (bdLiveConfig != null){
                                                                     onFeatureChecks(
                                                                             i,
                                                                             rgbInstance,
@@ -818,7 +810,8 @@
                                                                             bdFaceCheckConfig.activeModel,
                                                                             rgbScores,
                                                                             bdLiveConfig.rgbLiveScore);
-                                                                } else {
+                                                                }
+                                                                else{
                                                                     onFeatureChecks(
                                                                             i,
                                                                             rgbInstance,
@@ -843,7 +836,7 @@
                                                 livenessModel.setAllDetectDuration(System.currentTimeMillis() - startTime);
                                                 //                LogUtils.e(TIME_TAG, "all process time = " + livenessModel.getAllDetectDuration());
                                                 // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-
+                                                rgbInstance.destory();
                                                 if (nirInstance != null) {
                                                     nirInstance.destory();
                                                 }
@@ -851,28 +844,18 @@
                                                 if (faceDetectCallBack != null) {
                                                     faceDetectCallBack.onFaceDetectCallback(livenessModel);
                                                 }
-                                            }catch (RuntimeException e){
-                                                faceDetectCallBack.onTip(1,e.getMessage());
-                                            }catch (Exception e){
-                                                faceDetectCallBack.onTip(1,e.getMessage());
                                             }
-                                        }
 
-                                        @Override
-                                        public void onDetectFail() {
+                                            @Override
+                                            public void onDetectFail() {
 
-                                            if (faceDetectCallBack != null) {
-                                                faceDetectCallBack.onFaceDetectCallback(livenessModel);
+                                                if (faceDetectCallBack != null) {
+                                                    faceDetectCallBack.onFaceDetectCallback(livenessModel);
+                                                }
                                             }
-                                        }
-                                    });
-                        }catch (RuntimeException e){
-                            faceDetectCallBack.onTip(1,e.getMessage());
-                        }catch (Exception e){
-                            faceDetectCallBack.onTip(1,e.getMessage());
-                        }
-                    }
-                });
+                                        });
+                            }
+                        });
     }
 
     /**
@@ -883,7 +866,7 @@
      * @return
      */
     public boolean onBestImageCheck(
-        LivenessModel livenessModel, BDFaceCheckConfig bdFaceCheckConfig, FaceDetectCallBack faceDetectCallBack) {
+            LivenessModel livenessModel, BDFaceCheckConfig bdFaceCheckConfig, FaceDetectCallBack faceDetectCallBack) {
         boolean isBestImageCheck = false;
         if (livenessModel != null && livenessModel.getFaceInfos() != null) {
             FaceInfo[] faceInfos = livenessModel.getFaceInfos();
@@ -902,6 +885,82 @@
      * 鐗瑰緛鎻愬彇-浜鸿劯璇嗗埆姣斿
      *
      * @param rgbInstance      鍙鍏夊簳灞傞�佹瀵硅薄
+     * @param landmark         妫�娴嬬溂鐫涳紝鍢村反锛岄蓟瀛愶紝72涓叧閿偣
+     * @param faceInfos        nir浜鸿劯鏁版嵁
+     * @param nirInstance      nir 鍥惧儚鍙ユ焺
+     * @param livenessModel    妫�娴嬬粨鏋滄暟鎹泦鍚�
+     * @param featureCheckMode 鐗瑰緛鎶藉彇妯″紡銆愪笉鎻愬彇鐗瑰緛锛�1銆戯紱銆愭彁鍙栫壒寰侊細2銆戯紱銆愭彁鍙栫壒寰�+1锛歂妫�绱細3銆戯紱
+     * @param featureType      鐗瑰緛鎶藉彇妯℃�佹墽琛� 銆愮敓娲荤収锛�1銆戯紱銆愯瘉浠剁収锛�2銆戯紱銆愭贩鍚堟ā鎬侊細3銆戯紱
+     */
+    private void onFeatureCheck(
+            BDFaceImageInstance rgbInstance,
+            BDFaceCheckConfig bdFaceCheckConfig,
+            float[] landmark,
+            FaceInfo[] faceInfos,
+            BDFaceImageInstance nirInstance,
+            LivenessModel livenessModel,
+            byte[] secondFeature,
+            final int featureCheckMode,
+            final int featureType) {
+        // 濡傛灉涓嶆娊鍙栫壒寰侊紝鐩存帴杩斿洖
+        if (featureCheckMode == 1) {
+            return;
+        }
+        byte[] feature = new byte[512];
+        if (featureType == 3) {
+            // todo: 娣峰悎妯℃�佷娇鐢ㄦ柟寮忔槸鏍规嵁鍥剧墖鐨勬洕鍏夋潵閫夋嫨闇�瑕佷娇鐢ㄧ殑type锛屽厜鐓х殑鍙栧�艰寖鍥翠负锛�0~1涔嬮棿
+            AtomicInteger atomicInteger = new AtomicInteger();
+            FaceSDKManager.getInstance().getImageIllum().imageIllum(rgbInstance, atomicInteger);
+            int illumScore = atomicInteger.get();
+            BDQualityConfig bdQualityConfig = bdFaceCheckConfig.bdQualityConfig;
+            boolean isIllum = bdQualityConfig != null ? illumScore < bdQualityConfig.illum : false;
+            BDFaceSDKCommon.FeatureType type =
+                    isIllum
+                            ? BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_NIR
+                            : BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO;
+            BDFaceImageInstance bdFaceImageInstance = isIllum ? nirInstance : rgbInstance;
+            float[] landmarks = isIllum ? faceInfos[0].landmarks : landmark;
+
+            long startFeatureTime = System.currentTimeMillis();
+            float featureSize = faceModel.getFaceFeature().feature(type, bdFaceImageInstance, landmarks, feature);
+            livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
+            livenessModel.setFeature(feature);
+            // 浜鸿劯妫�绱�
+            featureSearch(
+                    featureCheckMode,
+                    livenessModel,
+                    bdFaceCheckConfig,
+                    feature,
+                    secondFeature,
+                    featureSize,
+                    BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+        } else {
+            // 鐢熸椿鐓ф绱�
+            long startFeatureTime = System.currentTimeMillis();
+            float featureSize =
+                    faceModel
+                            .getFaceFeature()
+                            .feature(
+                                    BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO, rgbInstance, landmark, feature);
+            livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
+            livenessModel.setFeature(feature);
+            livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
+            // 浜鸿劯妫�绱�
+            featureSearch(
+                    featureCheckMode,
+                    livenessModel,
+                    bdFaceCheckConfig,
+                    feature,
+                    secondFeature,
+                    featureSize,
+                    BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+        }
+    }
+
+    /**
+     * 鐗瑰緛鎻愬彇-浜鸿劯璇嗗埆姣斿
+     *
+     * @param rgbInstance      鍙鍏夊簳灞傞�佹瀵硅薄
      * @param rgbFaceInfos     rgb浜鸿劯鏁版嵁
      * @param faceInfos        nir浜鸿劯鏁版嵁
      * @param nirInstance      nir 鍥惧儚鍙ユ焺
@@ -912,21 +971,22 @@
      * @param liveScore 鍙鍏夋椿浣撻槇鍊�
      */
     private void onFeatureChecks(
-        int index,
-        BDFaceImageInstance rgbInstance,
-        BDFaceCheckConfig bdFaceCheckConfig,
-        FaceInfo[] rgbFaceInfos,
-        FaceInfo[] faceInfos,
-        BDFaceImageInstance nirInstance,
-        LivenessModel livenessModel,
-        byte[] secondFeature,
-        final int featureCheckMode,
-        final int featureType,
-        float[] rgbScores,
-        float liveScore) {
+            int index,
+            BDFaceImageInstance rgbInstance,
+            BDFaceCheckConfig bdFaceCheckConfig,
+            FaceInfo[] rgbFaceInfos,
+            FaceInfo[] faceInfos,
+            BDFaceImageInstance nirInstance,
+            LivenessModel livenessModel,
+            byte[] secondFeature,
+            final int featureCheckMode,
+            final int featureType,
+            float[] rgbScores,
+            float liveScore) {
         // 濡傛灉涓嶆娊鍙栫壒寰侊紝鐩存帴杩斿洖
 
         if (featureCheckMode == 1) {
+
             return;
         }
         byte[] feature = new byte[512];
@@ -939,9 +999,9 @@
             BDQualityConfig bdQualityConfig = bdFaceCheckConfig.bdQualityConfig;
             boolean isIllum = bdQualityConfig != null ? illumScore < bdQualityConfig.illum : false;
             BDFaceSDKCommon.FeatureType type =
-                isIllum
-                    ? BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_NIR
-                    : BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO;
+                    isIllum
+                            ? BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_NIR
+                            : BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO;
             BDFaceImageInstance bdFaceImageInstance = isIllum ? nirInstance : rgbInstance;
 
             if (rgbFaceInfos == null) {
@@ -968,19 +1028,20 @@
             livenessModel.setFeature(feature);
             // 浜鸿劯妫�绱�
             featureSearchs(
-                index,
-                featureCheckMode,
-                livenessModel,
-                bdFaceCheckConfig,
-                feature,
-                secondFeature,
-                featureSize,
-                BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+                    index,
+                    featureCheckMode,
+                    livenessModel,
+                    bdFaceCheckConfig,
+                    feature,
+                    secondFeature,
+                    featureSize,
+                    BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
 
         } else {
             // 鐢熸椿鐓ф绱�
             long startFeatureTime = System.currentTimeMillis();
             if (rgbFaceInfos == null) {
+
                 return;
             }
 
@@ -998,27 +1059,28 @@
             }
 
             float featureSize =
-                faceModel
-                    .getFaceFeature()
-                    .feature(
-                        BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
-                        rgbInstance,
-                        rgbFaceInfos[index].landmarks,
-                        feature);
+                    faceModel
+                            .getFaceFeature()
+                            .feature(
+                                    BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
+                                    rgbInstance,
+                                    rgbFaceInfos[index].landmarks,
+                                    feature);
 
             livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
             livenessModel.setFeature(feature);
             livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
             // 浜鸿劯妫�绱�
+
             featureSearchs(
-                index,
-                featureCheckMode,
-                livenessModel,
-                bdFaceCheckConfig,
-                feature,
-                secondFeature,
-                featureSize,
-                BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+                    index,
+                    featureCheckMode,
+                    livenessModel,
+                    bdFaceCheckConfig,
+                    feature,
+                    secondFeature,
+                    featureSize,
+                    BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
         }
     }
 
@@ -1033,13 +1095,13 @@
      * @param type             鐗瑰緛鎻愬彇绫诲瀷
      */
     private void featureSearch(
-        final int featureCheckMode,
-        LivenessModel livenessModel,
-        BDFaceCheckConfig bdFaceCheckConfig,
-        byte[] feature,
-        byte[] secondFeature,
-        float featureSize,
-        BDFaceSDKCommon.FeatureType type) {
+            final int featureCheckMode,
+            LivenessModel livenessModel,
+            BDFaceCheckConfig bdFaceCheckConfig,
+            byte[] feature,
+            byte[] secondFeature,
+            float featureSize,
+            BDFaceSDKCommon.FeatureType type) {
 
         // 濡傛灉鍙彁鍘荤壒寰侊紝涓嶅仛妫�绱紝姝ゅ杩斿洖
         if (featureCheckMode == 2) {
@@ -1053,7 +1115,7 @@
             // TODO 闃堝�煎彲浠ユ牴鎹笉鍚屾ā鍨嬭皟鏁�
             if (featureCheckMode == 3) {
                 List<? extends Feature> featureResult =
-                    faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 1, feature, false);
+                        faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 1, feature, false);
 
                 // TODO 杩斿洖top num = 1 涓暟鎹泦鍚堬紝姝ゅ鍙互浠绘剰璁剧疆锛屼細杩斿洖姣斿浠庡ぇ鍒板皬鎺掑簭鐨刵um 涓暟鎹泦鍚�
                 if (featureResult != null && featureResult.size() > 0) {
@@ -1086,13 +1148,13 @@
             } else if (featureCheckMode == 4) {
                 // 鐩墠浠呮敮鎸�
                 float score =
-                    faceModel
-                        .getFaceSearch()
-                        .compare(
-                            BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
-                            livenessModel.getFeature(),
-                            secondFeature,
-                            true);
+                        faceModel
+                                .getFaceSearch()
+                                .compare(
+                                        BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
+                                        livenessModel.getFeature(),
+                                        secondFeature,
+                                        true);
                 livenessModel.setScore(score);
                 if (score > threholdScore) {
                     /*faceId = livenessModel.getFaceInfo().faceID;
@@ -1120,14 +1182,14 @@
      * @param type             鐗瑰緛鎻愬彇绫诲瀷
      */
     private void featureSearchs(
-        final int index,
-        final int featureCheckMode,
-        LivenessModel livenessModel,
-        BDFaceCheckConfig bdFaceCheckConfig,
-        byte[] feature,
-        byte[] secondFeature,
-        float featureSize,
-        BDFaceSDKCommon.FeatureType type) {
+            final int index,
+            final int featureCheckMode,
+            LivenessModel livenessModel,
+            BDFaceCheckConfig bdFaceCheckConfig,
+            byte[] feature,
+            byte[] secondFeature,
+            float featureSize,
+            BDFaceSDKCommon.FeatureType type) {
 
         // 濡傛灉鍙彁鍘荤壒寰侊紝涓嶅仛妫�绱紝姝ゅ杩斿洖
 
@@ -1135,40 +1197,46 @@
             livenessModel.setFeatureCode(featureSize);
             return;
         }
+
         // 濡傛灉鎻愬彇鐗瑰緛+妫�绱紝璋冪敤search 鏂规硶
         if (featureSize == FEATURE_SIZE / 4) {
             long startFeature = System.currentTimeMillis();
             // 鐗瑰緛鎻愬彇鎴愬姛
+
             // TODO 闃堝�煎彲浠ユ牴鎹笉鍚屾ā鍨嬭皟鏁�
             if (featureCheckMode == 3) {
-                //System.out.println("==isOk==>44");
+
                 List<? extends Feature> featureResult =
-                    faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 5, feature, false);
-                //System.out.println("==isOk==>45");
+                        faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 2, feature, false);
+
                 // TODO 杩斿洖top num = 1 涓暟鎹泦鍚堬紝姝ゅ鍙互浠绘剰璁剧疆锛屼細杩斿洖姣斿浠庡ぇ鍒板皬鎺掑簭鐨刵um 涓暟鎹泦鍚�
                 if (featureResult != null && featureResult.size() > 0) {
-                    //System.out.println("==isOk==>鍖归厤鍒版暟閲�"+featureResult.size());
-                    User user = null;
-                    Feature topFeature = null;
                     if(TextUtils.isEmpty(groupId)){
-                        //涓虹┖锛岄渶瑕佹帓搴忥紝浼樺厛鍙栦細鍛�
-                        for(Feature feat:featureResult) {
-                            threholdScore = bdFaceCheckConfig.scoreThreshold;
-                            if (feat != null && feat.getScore() > threholdScore) {
-                                User userOld = FaceApi.getInstance().getUserListById(feat.getId());
-                                //System.out.println("==isOk==>鍖归厤鍒扮被鍨�:"+userOld.getUserName());
-                                if("1".equals(userOld.getGroupId())){
-                                    user = userOld;
-                                    topFeature = feat;
-                                    break;
-                                }else if(user==null){
-                                    user = userOld;
-                                    topFeature = feat;
-                                }
+                        // 鑾峰彇绗竴涓暟鎹�
+                        Feature topFeature = featureResult.get(0);
+                        // 鍒ゆ柇绗竴涓槇鍊兼槸鍚﹀ぇ浜庤瀹氶槇鍊硷紝濡傛灉澶т簬锛屾绱㈡垚鍔�
+                        threholdScore = bdFaceCheckConfig.scoreThreshold;
+                        if (topFeature != null && topFeature.getScore() > threholdScore) {
+                            // 褰撳墠featureEntity 鍙湁id+feature 绱㈠紩锛屽湪鏁版嵁搴撲腑鏌ュ埌瀹屾暣淇℃伅
+                            User user = FaceApi.getInstance().getUserListById(topFeature.getId());
+                            if (user != null) {
+                                IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
+                                // Log.d("Attend", "add user:" + user.getUserInfo() + " index:" + index);
+                                livenessModel.addIdentifyResult(idResult);
+                                livenessModel.setUser(user);
+                                livenessModel.setFeatureScore(topFeature.getScore());
+
+                                setFail(livenessModel);
+                            } else {
+                                setFail(livenessModel);
                             }
+                        } else {
+                            setFail(livenessModel);
                         }
                     }else {
                         //鍙彇璇ョ被鍨嬬敤鎴�
+                        User user = null;
+                        Feature topFeature = null;
                         for(Feature feat:featureResult) {
                             // 鑾峰彇鏁版嵁
                             // 鍒ゆ柇闃堝�兼槸鍚﹀ぇ浜庤瀹氶槇鍊硷紝濡傛灉澶т簬锛屾绱㈡垚鍔�
@@ -1184,17 +1252,16 @@
                                 }
                             }
                         }
-                    }
-                    if (user != null) {
-                        //System.out.println("==isOk==>鍖归厤鍒�");
-                        IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
-                        livenessModel.addIdentifyResult(idResult);
-                        livenessModel.setUser(user);
-                        livenessModel.setFeatureScore(topFeature.getScore());
-                        setFail(livenessModel);
-                    } else {
-                        //IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
-                        setFail(livenessModel);
+                        if (user != null&&topFeature!=null) {
+                            //System.out.println("==isOk==>鍖归厤鍒�");
+                            IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
+                            livenessModel.addIdentifyResult(idResult);
+                            livenessModel.setUser(user);
+                            livenessModel.setFeatureScore(topFeature.getScore());
+                            setFail(livenessModel);
+                        } else {
+                            setFail(livenessModel);
+                        }
                     }
                 } else {
                     setFail(livenessModel);
@@ -1202,13 +1269,13 @@
             } else if (featureCheckMode == 4) {
                 // 鐩墠浠呮敮鎸�
                 float score =
-                    faceModel
-                        .getFaceSearch()
-                        .compare(
-                            BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
-                            livenessModel.getFeature(),
-                            secondFeature,
-                            true);
+                        faceModel
+                                .getFaceSearch()
+                                .compare(
+                                        BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
+                                        livenessModel.getFeature(),
+                                        secondFeature,
+                                        true);
                 livenessModel.setScore(score);
                 if (score > threholdScore) {
                     /*faceId = livenessModel.getFaceInfo().faceID;
@@ -1235,11 +1302,11 @@
      * @param faceDetectCallBack
      */
     public void onDetectSilentLiveCheck(
-        final BDFaceImageConfig bdFaceImageConfig,
-        final BDFaceImageConfig bdNirFaceImageConfig,
-        final BDFaceImageConfig bdDepthFaceImageConfig,
-        final BDFaceCheckConfig bdFaceCheckConfig,
-        final FaceDetectCallBack faceDetectCallBack) {
+            final BDFaceImageConfig bdFaceImageConfig,
+            final BDFaceImageConfig bdNirFaceImageConfig,
+            final BDFaceImageConfig bdDepthFaceImageConfig,
+            final BDFaceCheckConfig bdFaceCheckConfig,
+            final FaceDetectCallBack faceDetectCallBack) {
         long startTime = System.currentTimeMillis();
         // 鍒涘缓妫�娴嬬粨鏋滃瓨鍌ㄦ暟鎹�
         LivenessModel livenessModel = new LivenessModel();
@@ -1248,44 +1315,44 @@
         BDFaceImageInstance rgbInstance = getBdImage(bdFaceImageConfig, bdFaceCheckConfig.darkEnhance);
         livenessModel.setTestBDFaceImageInstanceDuration(System.currentTimeMillis() - startTime);
         onTrack(
-            rgbInstance,
-            livenessModel,
-            new DetectListener() {
-                @Override
-                public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
+                rgbInstance,
+                livenessModel,
+                new DetectListener() {
+                    @Override
+                    public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
 
-                    // 淇濆瓨浜鸿劯鐗瑰緛鐐�
-                    livenessModel.setLandmarks(faceInfos[0].landmarks);
-                    // 淇濆瓨浜鸿劯鍥剧墖
-                    livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
-                    // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
-                    if (faceDetectCallBack != null) {
-                        faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
-                    }
-                    // 閫佹璇嗗埆
-                    onSilentLivenessCheck(
-                        rgbInstance,
-                        bdNirFaceImageConfig,
-                        bdDepthFaceImageConfig,
-                        bdFaceCheckConfig,
-                        livenessModel,
-                        startTime,
-                        faceDetectCallBack,
-                        faceInfos);
-                }
-
-                @Override
-                public void onDetectFail() {
-                    // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-                    if (faceDetectCallBack != null) {
-                        faceDetectCallBack.onFaceDetectCallback(null);
+                        // 淇濆瓨浜鸿劯鐗瑰緛鐐�
+                        livenessModel.setLandmarks(faceInfos[0].landmarks);
+                        // 淇濆瓨浜鸿劯鍥剧墖
                         livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
-                        faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
-                        faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+                        // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
+                        if (faceDetectCallBack != null) {
+                            faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+                        }
+                        // 閫佹璇嗗埆
+                        onSilentLivenessCheck(
+                                rgbInstance,
+                                bdNirFaceImageConfig,
+                                bdDepthFaceImageConfig,
+                                bdFaceCheckConfig,
+                                livenessModel,
+                                startTime,
+                                faceDetectCallBack,
+                                faceInfos);
                     }
 
-                }
-            });
+                    @Override
+                    public void onDetectFail() {
+                        // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
+                        if (faceDetectCallBack != null) {
+                            faceDetectCallBack.onFaceDetectCallback(null);
+                            livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
+                            faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+                            faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+                        }
+                        rgbInstance.destory();
+                    }
+                });
     }
 
     /**
@@ -1299,37 +1366,35 @@
      * @param faceDetectCallBack
      */
     public void onSilentLivenessCheck(
-        final BDFaceImageInstance rgbInstance,
-        final BDFaceImageConfig nirBDFaceImageConfig,
-        final BDFaceImageConfig depthBDFaceImageConfig,
-        final BDFaceCheckConfig bdFaceCheckConfig,
-        final LivenessModel livenessModel,
-        final long startTime,
-        final FaceDetectCallBack faceDetectCallBack,
-        final FaceInfo[] fastFaceInfos) {
+            final BDFaceImageInstance rgbInstance,
+            final BDFaceImageConfig nirBDFaceImageConfig,
+            final BDFaceImageConfig depthBDFaceImageConfig,
+            final BDFaceCheckConfig bdFaceCheckConfig,
+            final LivenessModel livenessModel,
+            final long startTime,
+            final FaceDetectCallBack faceDetectCallBack,
+            final FaceInfo[] fastFaceInfos) {
 
         if (future2 != null && !future2.isDone()) {
             // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-
+            rgbInstance.destory();
             return;
         }
 
         future2 =
-            es2.submit(
-                new Runnable() {
+                es2.submit(
+                        new Runnable() {
 
-                    @Override
-                    public void run() {
-                        try {
-                            onDetect(
-                                    bdFaceCheckConfig,
-                                    rgbInstance,
-                                    fastFaceInfos,
-                                    livenessModel,
-                                    new DetectListener() {
-                                        @Override
-                                        public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
-                                            try {
+                            @Override
+                            public void run() {
+                                onDetect(
+                                        bdFaceCheckConfig,
+                                        rgbInstance,
+                                        fastFaceInfos,
+                                        livenessModel,
+                                        new DetectListener() {
+                                            @Override
+                                            public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
                                                 // 浜鸿劯id璧嬪��
                                                 if (mLastFaceId != fastFaceInfos[0].faceID) {
                                                     mLastFaceId = fastFaceInfos[0].faceID;
@@ -1337,7 +1402,7 @@
                                                     mNirLiveList.clear();
                                                 }
                                                 if (bdFaceCheckConfig == null) {
-
+                                                    rgbInstance.destory();
                                                     if (faceDetectCallBack != null) {
                                                         faceDetectCallBack.onFaceDetectCallback(livenessModel);
                                                     }
@@ -1346,7 +1411,7 @@
                                                 // 鏈�浼樹汉鑴告帶鍒�
                                                 if (!onBestImageCheck(livenessModel, bdFaceCheckConfig, faceDetectCallBack)) {
                                                     livenessModel.setQualityCheck(true);
-
+                                                    rgbInstance.destory();
                                                     if (faceDetectCallBack != null) {
                                                         faceDetectCallBack.onFaceDetectCallback(livenessModel);
                                                     }
@@ -1471,7 +1536,7 @@
                                                                         System.currentTimeMillis() - startTime);
                                                                 //                LogUtils.e(TIME_TAG, "all process time = " + livenessModel.getAllDetectDuration());
                                                                 // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-
+                                                                rgbInstance.destory();
                                                                 // 鏄剧ず鏈�缁堢粨鏋滄彁绀�
                                                                 if (faceDetectCallBack != null) {
                                                                     faceDetectCallBack.onFaceDetectCallback(livenessModel);
@@ -1483,34 +1548,24 @@
                                                                 livenessModel.setQualityOcclusion(occlusionFail);
                                                                 livenessModel.setQualityDetect(detectFail);
                                                                 livenessModel.setQualityCheck(true);
-
+                                                                rgbInstance.destory();
                                                                 if (faceDetectCallBack != null) {
                                                                     faceDetectCallBack.onFaceDetectCallback(livenessModel);
                                                                 }
                                                             }
                                                         });
-                                            }catch (RuntimeException e){
-                                                faceDetectCallBack.onTip(1,e.getMessage());
-                                            }catch (Exception e){
-                                                faceDetectCallBack.onTip(1,e.getMessage());
                                             }
-                                        }
 
-                                        @Override
-                                        public void onDetectFail() {
+                                            @Override
+                                            public void onDetectFail() {
 
-                                            if (faceDetectCallBack != null) {
-                                                faceDetectCallBack.onFaceDetectCallback(livenessModel);
+                                                if (faceDetectCallBack != null) {
+                                                    faceDetectCallBack.onFaceDetectCallback(livenessModel);
+                                                }
                                             }
-                                        }
-                                    });
-                        }catch (RuntimeException e){
-                            faceDetectCallBack.onTip(1,e.getMessage());
-                        }catch (Exception e){
-                            faceDetectCallBack.onTip(1,e.getMessage());
-                        }
-                    }
-                });
+                                        });
+                            }
+                        });
     }
 
     private void onTrack(BDFaceImageInstance rgbInstance, LivenessModel livenessModel, DetectListener detectListener) {
@@ -1579,10 +1634,10 @@
      * @return
      */
     public void onQualityCheck(
-        final FaceInfo[] faceInfos,
-        final BDQualityConfig bdQualityConfig,
-        final FaceDetectCallBack faceDetectCallBack,
-        final QualityListener qualityListener) {
+            final FaceInfo[] faceInfos,
+            final BDQualityConfig bdQualityConfig,
+            final FaceDetectCallBack faceDetectCallBack,
+            final QualityListener qualityListener) {
 
         if (bdQualityConfig == null) {
             qualityListener.onQualitySuccess();
@@ -1667,7 +1722,7 @@
                     }
                 }
                 if (!TextUtils.isEmpty(stringBufferDetected.toString())
-                    || !TextUtils.isEmpty(stringBufferOcclusion.toString())) {
+                        || !TextUtils.isEmpty(stringBufferOcclusion.toString())) {
                     if (!TextUtils.isEmpty(stringBufferDetected.toString())) {
                         detectFail = stringBufferDetected.toString();
                     }
@@ -1695,9 +1750,9 @@
      * @return
      */
     public boolean onQualityCheck(
-        final FaceInfo[] faceInfos,
-        final BDQualityConfig bdQualityConfig,
-        final FaceDetectCallBack faceDetectCallBack) {
+            final FaceInfo[] faceInfos,
+            final BDQualityConfig bdQualityConfig,
+            final FaceDetectCallBack faceDetectCallBack) {
 
         if (bdQualityConfig == null) {
             return true;
@@ -1795,7 +1850,7 @@
      * @return
      */
     public boolean onPersonQualityCheck(
-        final FaceInfo faceInfo, final BDQualityConfig bdQualityConfig, final FaceDetectCallBack faceDetectCallBack) {
+            final FaceInfo faceInfo, final BDQualityConfig bdQualityConfig, final FaceDetectCallBack faceDetectCallBack) {
 
         if (bdQualityConfig == null) {
             return true;
@@ -1877,31 +1932,28 @@
      * rightCheek 鍙宠噳閬搵寰楀垎
      */
     private boolean selectQuality(
-        float bluriness,
-        float leftEye,
-        float rightEye,
-        float nose,
-        float mouth,
-        float leftCheek,
-        float rightCheek,
-        float chin) {
+            float bluriness,
+            float leftEye,
+            float rightEye,
+            float nose,
+            float mouth,
+            float leftCheek,
+            float rightCheek,
+            float chin) {
 
         return bluriness < 0.5
-            && leftEye < 0.75
-            && rightEye < 0.75
-            && nose < 0.75
-            && mouth < 0.75
-            && leftCheek < 0.75
-            && rightCheek < 0.75
-            && chin < 0.7;
+                && leftEye < 0.75
+                && rightEye < 0.75
+                && nose < 0.75
+                && mouth < 0.75
+                && leftCheek < 0.75
+                && rightCheek < 0.75
+                && chin < 0.7;
     }
 
     // 浜鸿瘉鏍搁獙鐗瑰緛鎻愬彇
     public float personDetect(
-        final Bitmap bitmap, final byte[] feature, final BDFaceCheckConfig bdFaceCheckConfig, Context context) {
-        if(bitmap==null||bitmap.isRecycled()){
-            return -1;
-        }
+            final Bitmap bitmap, final byte[] feature, final BDFaceCheckConfig bdFaceCheckConfig, Context context) {
         BDFaceImageInstance rgbInstance = new BDFaceImageInstance(bitmap);
         float ret = -1;
         FaceInfo[] faceInfos;
@@ -1909,14 +1961,14 @@
         if (bdFaceCheckConfig != null) {
             bdFaceCheckConfig.bdFaceDetectListConfig.usingDetect = true;
             faceInfos =
-                faceModel
-                    .getFaceDetectPerson()
-                    .detect(
-                        BDFaceSDKCommon.DetectType.DETECT_VIS,
-                        BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
-                        rgbInstance,
-                        null,
-                        bdFaceCheckConfig.bdFaceDetectListConfig);
+                    faceModel
+                            .getFaceDetectPerson()
+                            .detect(
+                                    BDFaceSDKCommon.DetectType.DETECT_VIS,
+                                    BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
+                                    rgbInstance,
+                                    null,
+                                    bdFaceCheckConfig.bdFaceDetectListConfig);
         } else {
             faceInfos = faceModel.getFaceDetectPerson().detect(BDFaceSDKCommon.DetectType.DETECT_VIS, rgbInstance);
         }
@@ -1924,19 +1976,19 @@
             // 鍒ゆ柇璐ㄩ噺妫�娴嬶紝閽堝妯$硦搴︺�侀伄鎸°�佽搴�
             if (onPersonQualityCheck(faceInfos[0], bdQualityConfig, new FaceQualityBack(context))) {
                 ret =
-                    faceModel
-                        .getFacePersonFeature()
-                        .feature(
-                            BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
-                            rgbInstance,
-                            faceInfos[0].landmarks,
-                            feature);
+                        faceModel
+                                .getFacePersonFeature()
+                                .feature(
+                                        BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
+                                        rgbInstance,
+                                        faceInfos[0].landmarks,
+                                        feature);
             }
         } else {
-
+            rgbInstance.destory();
             return -1;
         }
-
+        rgbInstance.destory();
         return ret;
     }
 }

--
Gitblit v1.9.3