Look in system files for models incase asset wasn’t available
diff --git a/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceDetector.java b/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceDetector.java
index a1e62c6..e2535b5 100644
--- a/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceDetector.java
+++ b/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceDetector.java
@@ -48,7 +48,7 @@
private static final int TF_FD_API_INPUT_SIZE = 300;
private static final boolean TF_FD_API_IS_QUANTIZED = true;
private static final String TF_FD_API_MODEL_FILE = "detect-class1.tflite";
- private static final String TF_FD_API_LABELS_FILE = "file:///android_asset/detect-class1.txt";
+ private static final String TF_FD_API_LABELS_FILE = "detect-class1.txt";
// Maintain aspect ratio or squish image?
private static final boolean MAINTAIN_ASPECT = false;
diff --git a/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceScanner.java b/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceScanner.java
index f3a3cd4..059140f 100644
--- a/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceScanner.java
+++ b/FaceShared/src/main/java/com/libremobileos/yifan/face/FaceScanner.java
@@ -51,7 +51,7 @@
private static final int TF_OD_API_INPUT_SIZE = 112;
private static final boolean TF_OD_API_IS_QUANTIZED = false;
private static final String TF_OD_API_MODEL_FILE = "mobile_face_net.tflite";
- private static final String TF_OD_API_LABELS_FILE = "file:///android_asset/mobile_face_net.txt";
+ private static final String TF_OD_API_LABELS_FILE = "mobile_face_net.txt";
// Maintain aspect ratio or squish image?
private static final boolean MAINTAIN_ASPECT = false;
// Brightness data
diff --git a/FaceShared/src/main/java/com/libremobileos/yifan/face/TFLiteObjectDetectionAPIModel.java b/FaceShared/src/main/java/com/libremobileos/yifan/face/TFLiteObjectDetectionAPIModel.java
index dee6d53..41ffe20 100644
--- a/FaceShared/src/main/java/com/libremobileos/yifan/face/TFLiteObjectDetectionAPIModel.java
+++ b/FaceShared/src/main/java/com/libremobileos/yifan/face/TFLiteObjectDetectionAPIModel.java
@@ -24,6 +24,7 @@
import android.os.Trace;
import java.io.BufferedReader;
+import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -57,6 +58,7 @@
// Float model
private static final float IMAGE_MEAN = 127.5f;
private static final float IMAGE_STD = 127.5f;
+ private static final String SYSTEM_MODEL_DIR = "/system_ext/etc/face";
private boolean isModelQuantized;
// Config values.
@@ -86,15 +88,28 @@
private TFLiteObjectDetectionAPIModel() {}
/** Memory-map the model file in Assets. */
- private static MappedByteBuffer loadModelFile(AssetManager assets, String modelFilename)
- throws IOException {
- AssetFileDescriptor fileDescriptor = assets.openFd(modelFilename);
- try (FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor())) {
- FileChannel fileChannel = inputStream.getChannel();
- long startOffset = fileDescriptor.getStartOffset();
- long declaredLength = fileDescriptor.getDeclaredLength();
- return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
+ private static MappedByteBuffer loadModelFile(AssetManager assets, String modelFilename) throws IOException {
+ FileChannel fileChannel;
+ long startOffset;
+ long declaredLength;
+ try {
+ AssetFileDescriptor fileDescriptor = assets.openFd(modelFilename);
+ FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
+ fileChannel = inputStream.getChannel();
+ startOffset = fileDescriptor.getStartOffset();
+ declaredLength = fileDescriptor.getDeclaredLength();
+ } catch (Exception e) {
+ File f = new File(SYSTEM_MODEL_DIR, modelFilename);
+ if (f.exists() && f.canRead()) {
+ FileInputStream inputStream = new FileInputStream(f);
+ fileChannel = inputStream.getChannel();
+ startOffset = 0;
+ declaredLength = f.length();
+ } else {
+ throw new IOException(modelFilename + " not found in assets or " + SYSTEM_MODEL_DIR);
+ }
}
+ return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
}
/**
@@ -122,8 +137,17 @@
final TFLiteObjectDetectionAPIModel d = new TFLiteObjectDetectionAPIModel();
- String actualFilename = labelFilename.split("file:///android_asset/")[1];
- InputStream labelsInput = assetManager.open(actualFilename);
+ InputStream labelsInput;
+ try {
+ labelsInput = assetManager.open(labelFilename);
+ } catch (Exception e) {
+ File f = new File(SYSTEM_MODEL_DIR, labelFilename);
+ if (f.exists() && f.canRead()) {
+ labelsInput = new FileInputStream(f);
+ } else {
+ throw new IOException(labelFilename + " not found in assets or " + SYSTEM_MODEL_DIR);
+ }
+ }
BufferedReader br = new BufferedReader(new InputStreamReader(labelsInput));
String line;
while ((line = br.readLine()) != null) {