Handle errors during classification gracefully

This commit is contained in:
vishnukvmd 2023-03-31 16:36:44 +05:30
parent 9a3044bc48
commit 5e9acfd4bd

View file

@ -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 {