소스 검색

Handle errors during classification gracefully

vishnukvmd 2 년 전
부모
커밋
5e9acfd4bd
1개의 변경된 파일51개의 추가작업 그리고 24개의 파일을 삭제
  1. 51 24
      lib/services/object_detection/object_detection_service.dart

+ 51 - 24
lib/services/object_detection/object_detection_service.dart

@@ -25,9 +25,21 @@ class ObjectDetectionService {
   Future<void> init() async {
     _isolateUtils = IsolateUtils();
     await _isolateUtils.start();
-    _objectClassifier = CocoSSDClassifier();
-    _mobileNetClassifier = MobileNetClassifier();
-    _sceneClassifier = SceneClassifier();
+    try {
+      _objectClassifier = CocoSSDClassifier();
+    } catch (e, s) {
+      _logger.severe("Could not initialize cocossd", e, s);
+    }
+    try {
+      _mobileNetClassifier = MobileNetClassifier();
+    } catch (e, s) {
+      _logger.severe("Could not initialize mobilenet", e, s);
+    }
+    try {
+      _sceneClassifier = SceneClassifier();
+    } catch (e, s) {
+      _logger.severe("Could not initialize sceneclassifier", e, s);
+    }
   }
 
   static ObjectDetectionService instance =
@@ -47,33 +59,48 @@ class ObjectDetectionService {
   }
 
   Future<List<String>> _getObjects(Uint8List bytes) async {
-    final isolateData = IsolateData(
-      bytes,
-      _objectClassifier.interpreter.address,
-      _objectClassifier.labels,
-      ClassifierType.cocossd,
-    );
-    return _getPredictions(isolateData);
+    try {
+      final isolateData = IsolateData(
+        bytes,
+        _objectClassifier.interpreter.address,
+        _objectClassifier.labels,
+        ClassifierType.cocossd,
+      );
+      return _getPredictions(isolateData);
+    } catch (e, s) {
+      _logger.severe("Could not run cocossd", e, s);
+    }
+    return [];
   }
 
   Future<List<String>> _getMobileNetResults(Uint8List bytes) async {
-    final isolateData = IsolateData(
-      bytes,
-      _mobileNetClassifier.interpreter.address,
-      _mobileNetClassifier.labels,
-      ClassifierType.mobilenet,
-    );
-    return _getPredictions(isolateData);
+    try {
+      final isolateData = IsolateData(
+        bytes,
+        _mobileNetClassifier.interpreter.address,
+        _mobileNetClassifier.labels,
+        ClassifierType.mobilenet,
+      );
+      return _getPredictions(isolateData);
+    } catch (e, s) {
+      _logger.severe("Could not run mobilenet", e, s);
+    }
+    return [];
   }
 
   Future<List<String>> _getSceneResults(Uint8List bytes) async {
-    final isolateData = IsolateData(
-      bytes,
-      _sceneClassifier.interpreter.address,
-      _sceneClassifier.labels,
-      ClassifierType.scenes,
-    );
-    return _getPredictions(isolateData);
+    try {
+      final isolateData = IsolateData(
+        bytes,
+        _sceneClassifier.interpreter.address,
+        _sceneClassifier.labels,
+        ClassifierType.scenes,
+      );
+      return _getPredictions(isolateData);
+    } catch (e, s) {
+      _logger.severe("Could not run scene detection", e, s);
+    }
+    return [];
   }
 
   Future<List<String>> _getPredictions(IsolateData isolateData) async {