Browse Source

手动阻断人脸识别循环

Melon 1 year ago
parent
commit
92a4724840

+ 25 - 0
lib/pages/facial_recognition/controller.dart

@@ -397,6 +397,12 @@ class FacialRecognitionController extends GetxController
       int faceNum =
           await doDetection(faceDetector, file.path); // max 分辨率下检测用时大约 100ms
 
+      if (doFacialRecognitionTimes >= 10) {
+        // 手动取消,中途跳出循环
+        state.isRunningFaceRecognition = false;
+        return;
+      }
+
       if (faceNum == 0) {
         PromptBox.toast('请将面部保持在识别框内');
         await Future.delayed(const Duration(seconds: 2));
@@ -428,8 +434,15 @@ class FacialRecognitionController extends GetxController
             ),
           );
           state.processingImageLocalPath = '';
+          if (doFacialRecognitionTimes >= 10) {
+            // 手动取消,中途跳出循环
+            state.isRunningFaceRecognition = false;
+            return;
+          }
           if (result.faceScanErrorType == FaceScanErrorTypeEnum.Success) {
             finishFaceDetection(result);
+            // 阻断循环
+            doFacialRecognitionTimes = 10;
           } else if (result.faceScanErrorType ==
               FaceScanErrorTypeEnum.NoCreated) {
             /// 如果返回结果告知不在档,则快进到失败十次提示重新建档
@@ -452,6 +465,12 @@ class FacialRecognitionController extends GetxController
         state.processingImageLocalPath = '';
       }
     }
+
+    if (doFacialRecognitionTimes >= 10) {
+      // 手动取消,中途跳出循环
+      state.isRunningFaceRecognition = false;
+      return;
+    }
     doFacialRecognition();
   }
 
@@ -564,6 +583,12 @@ class FacialRecognitionController extends GetxController
     }
   }
 
+  /// 取消采集
+  void doCancelCapture() {
+    doFacialRecognitionTimes = 10;
+    state.isRunningFaceRecognition = false;
+  }
+
   /// 重新绑定并创建新档案
   Future<bool> unbindAndCreateByFaceImageAsync(
       String oldId, String newId, String url) async {

+ 3 - 2
lib/pages/facial_recognition/widgets/camera_for_face.dart

@@ -91,10 +91,11 @@ class CameraForFace extends GetView<FacialRecognitionController> {
         color: Colors.white,
         borderRadius: BorderRadius.circular(50),
       ),
-      child: const Center(
-        child: CircularProgressIndicator(
+      child: IconButton(
+        icon: const CircularProgressIndicator(
           color: Colors.blue,
         ),
+        onPressed: controller.doCancelCapture,
       ),
     );
   }