2
2
3
3
import android .graphics .Bitmap ;
4
4
import android .graphics .Color ;
5
- import android .os .Build ;
6
5
import androidx .annotation .NonNull ;
7
6
import androidx .appcompat .app .AppCompatActivity ;
8
7
import android .util .Log ;
9
8
9
+ import com .google .android .gms .tasks .OnCompleteListener ;
10
10
import com .google .android .gms .tasks .OnFailureListener ;
11
11
import com .google .android .gms .tasks .OnSuccessListener ;
12
+ import com .google .android .gms .tasks .Task ;
12
13
import com .google .firebase .ml .common .FirebaseMLException ;
13
- import com .google .firebase .ml .common .modeldownload .FirebaseLocalModel ;
14
14
import com .google .firebase .ml .common .modeldownload .FirebaseModelDownloadConditions ;
15
15
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 ;
17
18
import com .google .firebase .ml .custom .FirebaseModelDataType ;
18
19
import com .google .firebase .ml .custom .FirebaseModelInputOutputOptions ;
19
20
import com .google .firebase .ml .custom .FirebaseModelInputs ;
20
21
import com .google .firebase .ml .custom .FirebaseModelInterpreter ;
21
- import com .google .firebase .ml .custom .FirebaseModelOptions ;
22
+ import com .google .firebase .ml .custom .FirebaseModelInterpreterOptions ;
22
23
import com .google .firebase .ml .custom .FirebaseModelOutputs ;
23
24
24
25
import java .io .BufferedReader ;
@@ -29,48 +30,88 @@ public class CustomModelActivity extends AppCompatActivity {
29
30
30
31
private void configureHostedModelSource () {
31
32
// [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 ();
50
35
// [END mlkit_cloud_model_source]
51
36
}
52
37
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
+
53
53
private void configureLocalModelSource () {
54
54
// [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 ();
60
58
// [END mlkit_local_model_source]
61
59
}
62
60
63
- private FirebaseModelInterpreter createInterpreter () throws FirebaseMLException {
61
+ private FirebaseModelInterpreter createInterpreter (FirebaseCustomLocalModel localModel ) throws FirebaseMLException {
64
62
// [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
+ }
71
71
// [END mlkit_create_interpreter]
72
72
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]
74
115
}
75
116
76
117
private FirebaseModelInputOutputOptions createInputOutputOptions () throws FirebaseMLException {
@@ -109,7 +150,8 @@ private float[][][][] bitmapToInputArray() {
109
150
}
110
151
111
152
private void runInference () throws FirebaseMLException {
112
- FirebaseModelInterpreter firebaseInterpreter = createInterpreter ();
153
+ FirebaseCustomLocalModel localModel = new FirebaseCustomLocalModel .Builder ().build ();
154
+ FirebaseModelInterpreter firebaseInterpreter = createInterpreter (localModel );
113
155
float [][][][] input = bitmapToInputArray ();
114
156
FirebaseModelInputOutputOptions inputOutputOptions = createInputOutputOptions ();
115
157
0 commit comments