22
33import android .graphics .Bitmap ;
44import android .graphics .Color ;
5- import android .os .Build ;
65import androidx .annotation .NonNull ;
76import androidx .appcompat .app .AppCompatActivity ;
87import android .util .Log ;
98
9+ import com .google .android .gms .tasks .OnCompleteListener ;
1010import com .google .android .gms .tasks .OnFailureListener ;
1111import com .google .android .gms .tasks .OnSuccessListener ;
12+ import com .google .android .gms .tasks .Task ;
1213import com .google .firebase .ml .common .FirebaseMLException ;
13- import com .google .firebase .ml .common .modeldownload .FirebaseLocalModel ;
1414import com .google .firebase .ml .common .modeldownload .FirebaseModelDownloadConditions ;
1515import 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 ;
1718import com .google .firebase .ml .custom .FirebaseModelDataType ;
1819import com .google .firebase .ml .custom .FirebaseModelInputOutputOptions ;
1920import com .google .firebase .ml .custom .FirebaseModelInputs ;
2021import com .google .firebase .ml .custom .FirebaseModelInterpreter ;
21- import com .google .firebase .ml .custom .FirebaseModelOptions ;
22+ import com .google .firebase .ml .custom .FirebaseModelInterpreterOptions ;
2223import com .google .firebase .ml .custom .FirebaseModelOutputs ;
2324
2425import 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
0 commit comments