Skip to content

Commit a220271

Browse files
authored
Merge pull request firebase#143 from rosariopfernandes/rpf.add-mlkit-snippets
Update mlkit snippets
2 parents 387a6f7 + f5c1fb0 commit a220271

File tree

9 files changed

+139
-78
lines changed

9 files changed

+139
-78
lines changed

database/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ android {
2929
dependencies {
3030
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
3131
implementation 'androidx.appcompat:appcompat:1.1.0'
32-
implementation "com.google.firebase:firebase-database:19.1.0"
32+
implementation "com.google.firebase:firebase-database:19.2.0"
3333
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50"
3434
}
3535

dynamic-links/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ dependencies {
2626
implementation 'androidx.appcompat:appcompat:1.1.0'
2727
implementation "com.google.firebase:firebase-auth:19.1.0"
2828
implementation "com.google.firebase:firebase-invites:17.0.0"
29-
implementation "com.google.firebase:firebase-database:19.1.0"
29+
implementation "com.google.firebase:firebase-database:19.2.0"
3030
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50"
3131
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
3232
}

firebaseoptions/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ android {
2424
dependencies {
2525
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
2626
implementation 'androidx.appcompat:appcompat:1.1.0'
27-
implementation "com.google.firebase:firebase-database:19.1.0"
27+
implementation "com.google.firebase:firebase-database:19.2.0"
2828
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50"
2929
}
3030

firestore/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ dependencies {
4040
implementation 'androidx.multidex:multidex:2.0.1'
4141

4242
// Firestore
43-
implementation "com.google.firebase:firebase-firestore:21.1.1"
43+
implementation "com.google.firebase:firebase-firestore:21.2.0"
4444

4545
// Firebase / Play Services
4646
implementation "com.google.firebase:firebase-auth:19.1.0"

mlkit/app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ dependencies {
2929
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
3030
implementation 'androidx.appcompat:appcompat:1.1.0'
3131
implementation 'androidx.exifinterface:exifinterface:1.0.0'
32-
implementation "com.google.firebase:firebase-ml-common:21.0.0"
33-
implementation "com.google.firebase:firebase-ml-model-interpreter:21.0.0"
34-
implementation "com.google.firebase:firebase-ml-vision:23.0.0"
32+
implementation "com.google.firebase:firebase-ml-common:22.0.0"
33+
implementation "com.google.firebase:firebase-ml-model-interpreter:22.0.0"
34+
implementation "com.google.firebase:firebase-ml-vision:24.0.0"
3535
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50"
3636
}
3737

mlkit/app/src/main/java/com/google/firebase/example/mlkit/CustomModelActivity.java

Lines changed: 78 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@
22

33
import android.graphics.Bitmap;
44
import android.graphics.Color;
5-
import android.os.Build;
65
import androidx.annotation.NonNull;
76
import androidx.appcompat.app.AppCompatActivity;
87
import android.util.Log;
98

9+
import com.google.android.gms.tasks.OnCompleteListener;
1010
import com.google.android.gms.tasks.OnFailureListener;
1111
import com.google.android.gms.tasks.OnSuccessListener;
12+
import com.google.android.gms.tasks.Task;
1213
import com.google.firebase.ml.common.FirebaseMLException;
13-
import com.google.firebase.ml.common.modeldownload.FirebaseLocalModel;
1414
import com.google.firebase.ml.common.modeldownload.FirebaseModelDownloadConditions;
1515
import com.google.firebase.ml.common.modeldownload.FirebaseModelManager;
16-
import com.google.firebase.ml.common.modeldownload.FirebaseRemoteModel;
16+
import com.google.firebase.ml.custom.FirebaseCustomLocalModel;
17+
import com.google.firebase.ml.custom.FirebaseCustomRemoteModel;
1718
import com.google.firebase.ml.custom.FirebaseModelDataType;
1819
import com.google.firebase.ml.custom.FirebaseModelInputOutputOptions;
1920
import com.google.firebase.ml.custom.FirebaseModelInputs;
2021
import com.google.firebase.ml.custom.FirebaseModelInterpreter;
21-
import com.google.firebase.ml.custom.FirebaseModelOptions;
22+
import com.google.firebase.ml.custom.FirebaseModelInterpreterOptions;
2223
import com.google.firebase.ml.custom.FirebaseModelOutputs;
2324

2425
import java.io.BufferedReader;
@@ -29,48 +30,88 @@ public class CustomModelActivity extends AppCompatActivity {
2930

3031
private void configureHostedModelSource() {
3132
// [START mlkit_cloud_model_source]
32-
FirebaseModelDownloadConditions.Builder conditionsBuilder =
33-
new FirebaseModelDownloadConditions.Builder().requireWifi();
34-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
35-
// Enable advanced conditions on Android Nougat and newer.
36-
conditionsBuilder = conditionsBuilder
37-
.requireCharging()
38-
.requireDeviceIdle();
39-
}
40-
FirebaseModelDownloadConditions conditions = conditionsBuilder.build();
41-
42-
// Build a remote model source object by specifying the name you assigned the model
43-
// when you uploaded it in the Firebase console.
44-
FirebaseRemoteModel cloudSource = new FirebaseRemoteModel.Builder("my_cloud_model")
45-
.enableModelUpdates(true)
46-
.setInitialDownloadConditions(conditions)
47-
.setUpdatesDownloadConditions(conditions)
48-
.build();
49-
FirebaseModelManager.getInstance().registerRemoteModel(cloudSource);
33+
FirebaseCustomRemoteModel remoteModel =
34+
new FirebaseCustomRemoteModel.Builder("your_model").build();
5035
// [END mlkit_cloud_model_source]
5136
}
5237

38+
private void startModelDownloadTask(FirebaseCustomRemoteModel remoteModel) {
39+
// [START mlkit_model_download_task]
40+
FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder()
41+
.requireWifi()
42+
.build();
43+
FirebaseModelManager.getInstance().download(remoteModel, conditions)
44+
.addOnCompleteListener(new OnCompleteListener<Void>() {
45+
@Override
46+
public void onComplete(@NonNull Task<Void> task) {
47+
// Success.
48+
}
49+
});
50+
// [END mlkit_model_download_task]
51+
}
52+
5353
private void configureLocalModelSource() {
5454
// [START mlkit_local_model_source]
55-
FirebaseLocalModel localSource =
56-
new FirebaseLocalModel.Builder("my_local_model") // Assign a name to this model
57-
.setAssetFilePath("my_model.tflite")
58-
.build();
59-
FirebaseModelManager.getInstance().registerLocalModel(localSource);
55+
FirebaseCustomLocalModel localModel = new FirebaseCustomLocalModel.Builder()
56+
.setAssetFilePath("your_model.tflite")
57+
.build();
6058
// [END mlkit_local_model_source]
6159
}
6260

63-
private FirebaseModelInterpreter createInterpreter() throws FirebaseMLException {
61+
private FirebaseModelInterpreter createInterpreter(FirebaseCustomLocalModel localModel) throws FirebaseMLException {
6462
// [START mlkit_create_interpreter]
65-
FirebaseModelOptions options = new FirebaseModelOptions.Builder()
66-
.setRemoteModelName("my_cloud_model")
67-
.setLocalModelName("my_local_model")
68-
.build();
69-
FirebaseModelInterpreter firebaseInterpreter =
70-
FirebaseModelInterpreter.getInstance(options);
63+
FirebaseModelInterpreter interpreter = null;
64+
try {
65+
FirebaseModelInterpreterOptions options =
66+
new FirebaseModelInterpreterOptions.Builder(localModel).build();
67+
interpreter = FirebaseModelInterpreter.getInstance(options);
68+
} catch (FirebaseMLException e) {
69+
// ...
70+
}
7171
// [END mlkit_create_interpreter]
7272

73-
return firebaseInterpreter;
73+
return interpreter;
74+
}
75+
76+
private void checkModelDownloadStatus(
77+
final FirebaseCustomRemoteModel remoteModel,
78+
final FirebaseCustomLocalModel localModel) {
79+
// [START mlkit_check_download_status]
80+
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
81+
.addOnSuccessListener(new OnSuccessListener<Boolean>() {
82+
@Override
83+
public void onSuccess(Boolean isDownloaded) {
84+
FirebaseModelInterpreterOptions options;
85+
if (isDownloaded) {
86+
options = new FirebaseModelInterpreterOptions.Builder(remoteModel).build();
87+
} else {
88+
options = new FirebaseModelInterpreterOptions.Builder(localModel).build();
89+
}
90+
try {
91+
FirebaseModelInterpreter interpreter = FirebaseModelInterpreter.getInstance(options);
92+
// ...
93+
} catch (FirebaseMLException e) {
94+
95+
}
96+
}
97+
});
98+
// [END mlkit_check_download_status]
99+
}
100+
101+
private void addDownloadListener(
102+
FirebaseCustomRemoteModel remoteModel,
103+
FirebaseModelDownloadConditions conditions) {
104+
// [START mlkit_remote_model_download_listener]
105+
FirebaseModelManager.getInstance().download(remoteModel, conditions)
106+
.addOnSuccessListener(new OnSuccessListener<Void>() {
107+
@Override
108+
public void onSuccess(Void v) {
109+
// Download complete. Depending on your app, you could enable
110+
// the ML feature, or switch from the local model to the remote
111+
// model, etc.
112+
}
113+
});
114+
// [END mlkit_remote_model_download_listener]
74115
}
75116

76117
private FirebaseModelInputOutputOptions createInputOutputOptions() throws FirebaseMLException {
@@ -109,7 +150,8 @@ private float[][][][] bitmapToInputArray() {
109150
}
110151

111152
private void runInference() throws FirebaseMLException {
112-
FirebaseModelInterpreter firebaseInterpreter = createInterpreter();
153+
FirebaseCustomLocalModel localModel = new FirebaseCustomLocalModel.Builder().build();
154+
FirebaseModelInterpreter firebaseInterpreter = createInterpreter(localModel);
113155
float[][][][] input = bitmapToInputArray();
114156
FirebaseModelInputOutputOptions inputOutputOptions = createInputOutputOptions();
115157

mlkit/app/src/main/java/com/google/firebase/example/mlkit/kotlin/CustomModelActivity.kt

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@ package com.google.firebase.example.mlkit.kotlin
44

55
import android.graphics.Bitmap
66
import android.graphics.Color
7-
import android.os.Build
87
import androidx.appcompat.app.AppCompatActivity
98
import android.util.Log
109
import com.google.android.gms.tasks.OnFailureListener
1110
import com.google.firebase.ml.common.FirebaseMLException
12-
import com.google.firebase.ml.common.modeldownload.FirebaseLocalModel
1311
import com.google.firebase.ml.common.modeldownload.FirebaseModelDownloadConditions
1412
import com.google.firebase.ml.common.modeldownload.FirebaseModelManager
15-
import com.google.firebase.ml.common.modeldownload.FirebaseRemoteModel
16-
import com.google.firebase.ml.custom.FirebaseModelDataType
13+
import com.google.firebase.ml.custom.FirebaseCustomLocalModel
14+
import com.google.firebase.ml.custom.FirebaseCustomRemoteModel
15+
import com.google.firebase.ml.custom.FirebaseModelInterpreterOptions
16+
import com.google.firebase.ml.custom.FirebaseModelInterpreter
1717
import com.google.firebase.ml.custom.FirebaseModelInputOutputOptions
1818
import com.google.firebase.ml.custom.FirebaseModelInputs
19-
import com.google.firebase.ml.custom.FirebaseModelInterpreter
20-
import com.google.firebase.ml.custom.FirebaseModelOptions
19+
import com.google.firebase.ml.custom.FirebaseModelDataType
2120

2221
import java.io.BufferedReader
2322
import java.io.IOException
@@ -32,49 +31,68 @@ class CustomModelActivity : AppCompatActivity() {
3231

3332
private fun configureHostedModelSource() {
3433
// [START mlkit_cloud_model_source]
35-
var conditionsBuilder: FirebaseModelDownloadConditions.Builder =
36-
FirebaseModelDownloadConditions.Builder().requireWifi()
37-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
38-
// Enable advanced conditions on Android Nougat and newer.
39-
conditionsBuilder = conditionsBuilder
40-
.requireCharging()
41-
.requireDeviceIdle()
42-
}
43-
val conditions = conditionsBuilder.build()
44-
45-
// Build a remote model object by specifying the name you assigned the model
46-
// when you uploaded it in the Firebase console.
47-
val cloudSource = FirebaseRemoteModel.Builder("my_cloud_model")
48-
.enableModelUpdates(true)
49-
.setInitialDownloadConditions(conditions)
50-
.setUpdatesDownloadConditions(conditions)
51-
.build()
52-
FirebaseModelManager.getInstance().registerRemoteModel(cloudSource)
34+
val remoteModel = FirebaseCustomRemoteModel.Builder("your_model").build()
5335
// [END mlkit_cloud_model_source]
5436
}
5537

38+
private fun startModelDownloadTask(remoteModel: FirebaseCustomRemoteModel) {
39+
// [START mlkit_model_download_task]
40+
val conditions = FirebaseModelDownloadConditions.Builder()
41+
.requireWifi()
42+
.build()
43+
FirebaseModelManager.getInstance().download(remoteModel, conditions)
44+
.addOnCompleteListener {
45+
// Success.
46+
}
47+
// [END mlkit_model_download_task]
48+
}
49+
5650
private fun configureLocalModelSource() {
5751
// [START mlkit_local_model_source]
58-
val localSource = FirebaseLocalModel.Builder("my_local_model") // Assign a name to this model
59-
.setAssetFilePath("my_model.tflite")
52+
val localModel = FirebaseCustomLocalModel.Builder()
53+
.setAssetFilePath("your_model.tflite")
6054
.build()
61-
FirebaseModelManager.getInstance().registerLocalModel(localSource)
6255
// [END mlkit_local_model_source]
6356
}
6457

6558
@Throws(FirebaseMLException::class)
66-
private fun createInterpreter(): FirebaseModelInterpreter? {
59+
private fun createInterpreter(localModel: FirebaseCustomLocalModel): FirebaseModelInterpreter? {
6760
// [START mlkit_create_interpreter]
68-
val options = FirebaseModelOptions.Builder()
69-
.setRemoteModelName("my_cloud_model")
70-
.setLocalModelName("my_local_model")
71-
.build()
61+
val options = FirebaseModelInterpreterOptions.Builder(localModel).build()
7262
val interpreter = FirebaseModelInterpreter.getInstance(options)
7363
// [END mlkit_create_interpreter]
7464

7565
return interpreter
7666
}
7767

68+
private fun checkModelDownloadStatus(remoteModel: FirebaseCustomRemoteModel, localModel: FirebaseCustomLocalModel) {
69+
// [START mlkit_check_download_status]
70+
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
71+
.addOnSuccessListener { isDownloaded ->
72+
val options =
73+
if (isDownloaded) {
74+
FirebaseModelInterpreterOptions.Builder(remoteModel).build()
75+
} else {
76+
FirebaseModelInterpreterOptions.Builder(localModel).build()
77+
}
78+
val interpreter = FirebaseModelInterpreter.getInstance(options)
79+
}
80+
// [END mlkit_check_download_status]
81+
}
82+
83+
private fun addDownloadListener(
84+
remoteModel: FirebaseCustomRemoteModel,
85+
conditions: FirebaseModelDownloadConditions
86+
) {
87+
// [START mlkit_remote_model_download_listener]
88+
FirebaseModelManager.getInstance().download(remoteModel, conditions)
89+
.addOnCompleteListener {
90+
// Download complete. Depending on your app, you could enable the ML
91+
// feature, or switch from the local model to the remote model, etc.
92+
}
93+
// [END mlkit_remote_model_download_listener]
94+
}
95+
7896
@Throws(FirebaseMLException::class)
7997
private fun createInputOutputOptions(): FirebaseModelInputOutputOptions {
8098
// [START mlkit_create_io_options]
@@ -109,7 +127,8 @@ class CustomModelActivity : AppCompatActivity() {
109127

110128
@Throws(FirebaseMLException::class)
111129
private fun runInference() {
112-
val firebaseInterpreter = createInterpreter()!!
130+
val localModel = FirebaseCustomLocalModel.Builder().build()
131+
val firebaseInterpreter = createInterpreter(localModel)!!
113132
val input = bitmapToInputArray()
114133
val inputOutputOptions = createInputOutputOptions()
115134

perf/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ android {
2424
dependencies {
2525
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
2626
implementation 'androidx.appcompat:appcompat:1.1.0'
27-
implementation "com.google.firebase:firebase-config:19.0.2"
27+
implementation "com.google.firebase:firebase-config:19.0.3"
2828
implementation "com.google.firebase:firebase-perf:19.0.0"
2929
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50"
3030
}

predictions/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ dependencies {
2828

2929
implementation "com.google.firebase:firebase-ads:18.2.0"
3030
implementation "com.google.firebase:firebase-analytics:17.2.0"
31-
implementation "com.google.firebase:firebase-config:19.0.2"
31+
implementation "com.google.firebase:firebase-config:19.0.3"
3232
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50"
3333
}

0 commit comments

Comments
 (0)