fixed classifier and added in a preliminary results view that shows what pokemon are currently being looked at.

This commit is contained in:
Lucas Oskorep
2022-06-22 21:44:15 -04:00
parent ebfbfb503d
commit 9ec737db46
10 changed files with 305 additions and 355 deletions
+62
View File
@@ -0,0 +1,62 @@
import 'dart:isolate';
import 'package:camera/camera.dart';
import 'package:tensordex_mobile/tflite/classifier.dart';
import 'package:tflite_flutter/tflite_flutter.dart';
import '../utils/image_utils.dart';
import '../utils/logger.dart';
class IsolateBase {
final ReceivePort _receivePort = ReceivePort();
}
class MLIsolate extends IsolateBase {
static const String debugIsolate = "MLIsolate";
late SendPort _sendPort;
SendPort get sendPort => _sendPort;
Future<void> start() async {
await Isolate.spawn<SendPort>(
entryPoint,
_receivePort.sendPort,
debugName: debugIsolate,
);
_sendPort = await _receivePort.first;
}
static void entryPoint(SendPort sendPort) async {
final port = ReceivePort();
sendPort.send(port.sendPort);
await for (final MLIsolateData mlIsolateData in port) {
var cameraImage = mlIsolateData.cameraImage;
var converted = ImageUtils.convertCameraImage(cameraImage);
if (converted != null) {
Classifier classifier = Classifier(
interpreter:
Interpreter.fromAddress(mlIsolateData.interpreterAddress),
labels: mlIsolateData.labels);
var result = classifier.predict(converted);
mlIsolateData.responsePort?.send(result);
} else {
mlIsolateData.responsePort?.send({"response": "not working yet"});
}
}
}
}
/// Bundles data to pass between Isolate
class MLIsolateData {
CameraImage cameraImage;
int interpreterAddress;
List<String> labels;
SendPort? responsePort;
MLIsolateData(
this.cameraImage,
this.interpreterAddress,
this.labels,
);
}