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