@@ -34,14 +34,14 @@ steps:
34
34
@@ -61,10 +61,8 @@ flutter:
35
35
# the material Icons class.
36
36
uses-material-design: true
37
-
37
+
38
38
- # To add assets to your application, add an assets section, like this:
39
39
- # assets:
40
40
- # - images/a_dot_burr.jpeg
41
41
- # - images/a_dot_ham.jpeg
42
42
+ assets:
43
- + - assets/vocab.txt
44
-
43
+ + - assets/vocab.txt
44
+
45
45
# An image asset can refer to one or more resolution-specific "variants", see
46
46
# https://flutter.dev/to/resolution-aware-images
47
47
- name : Mkdir assets
@@ -654,8 +654,50 @@ steps:
654
654
+ <true/>
655
655
</dict>
656
656
</plist>
657
+ - name : Mkdir lib/proto
658
+ path : codelab2/tfserving_flutter
659
+ mkdir : lib/proto
660
+ - name : Add generate_grpc_stub_dart.sh
661
+ path : codelab2/tfserving_flutter/lib/proto/generate_grpc_stub_dart.sh
662
+ replace-contents : |
663
+ #!/bin/bash
664
+ # This script generates the client stub for TF Serving
657
665
666
+ touch generated
667
+ rm -rf generated
668
+ mkdir generated
658
669
670
+ protoc -I./ ./tensorflow_serving/apis/input.proto --dart_out=grpc:./generated
671
+ protoc -I./ ./tensorflow_serving/apis/regression.proto --dart_out=grpc:./generated
672
+ protoc -I./ ./tensorflow_serving/apis/predict.proto --dart_out=grpc:./generated
673
+ protoc -I./ ./tensorflow_serving/apis/prediction_service.proto --dart_out=grpc:./generated
674
+ protoc -I./ ./tensorflow_serving/apis/get_model_metadata.proto --dart_out=grpc:./generated
675
+ protoc -I./ ./tensorflow_serving/apis/inference.proto --dart_out=grpc:./generated
676
+ protoc -I./ ./tensorflow_serving/apis/model.proto --dart_out=grpc:./generated
677
+ protoc -I./ ./tensorflow_serving/apis/classification.proto --dart_out=grpc:./generated
678
+
679
+ protoc -I./ ./tensorflow/core/framework/graph.proto --dart_out=grpc:./generated
680
+ protoc -I./ ./tensorflow/core/framework/tensor_shape.proto --dart_out=grpc:./generated
681
+ protoc -I./ ./tensorflow/core/framework/function.proto --dart_out=grpc:./generated
682
+ protoc -I./ ./tensorflow/core/framework/variable.proto --dart_out=grpc:./generated
683
+ protoc -I./ ./tensorflow/core/framework/types.proto --dart_out=grpc:./generated
684
+ protoc -I./ ./tensorflow/core/framework/full_type.proto --dart_out=grpc:./generated
685
+ protoc -I./ ./tensorflow/core/framework/versions.proto --dart_out=grpc:./generated
686
+ protoc -I./ ./tensorflow/core/framework/attr_value.proto --dart_out=grpc:./generated
687
+ protoc -I./ ./tensorflow/core/framework/op_def.proto --dart_out=grpc:./generated
688
+ protoc -I./ ./tensorflow/core/framework/node_def.proto --dart_out=grpc:./generated
689
+ protoc -I./ ./tensorflow/core/framework/tensor.proto --dart_out=grpc:./generated
690
+ protoc -I./ ./tensorflow/core/framework/resource_handle.proto --dart_out=grpc:./generated
691
+ protoc -I./ ./tensorflow/core/example/feature.proto --dart_out=grpc:./generated
692
+ protoc -I./ ./tensorflow/core/example/example.proto --dart_out=grpc:./generated
693
+ protoc -I./ ./tensorflow/core/protobuf/struct.proto --dart_out=grpc:./generated
694
+ protoc -I./ ./tensorflow/core/protobuf/meta_graph.proto --dart_out=grpc:./generated
695
+ protoc -I./ ./tensorflow/core/protobuf/saver.proto --dart_out=grpc:./generated
696
+ protoc -I./ ./tensorflow/core/protobuf/trackable_object_graph.proto --dart_out=grpc:./generated
697
+ protoc -I./ ./tensorflow/core/protobuf/saved_object_graph.proto --dart_out=grpc:./generated
698
+
699
+ protoc -I./ ./google/protobuf/any.proto --dart_out=grpc:./generated
700
+ protoc -I./ ./google/protobuf/wrappers.proto --dart_out=grpc:./generated
659
701
- name : Copy codelab2/starter
660
702
copydir :
661
703
from : codelab2/tfserving_flutter
@@ -673,13 +715,13 @@ steps:
673
715
--- b/tfserving-flutter/codelab2/finished/analysis_options.yaml
674
716
+++ a/tfserving-flutter/codelab2/finished/analysis_options.yaml
675
717
@@ -2,9 +2,6 @@ include: ../../../analysis_options.yaml
676
-
718
+
677
719
analyzer:
678
720
exclude: [lib/proto/generated/**]
679
721
- errors:
680
722
- unused_import: ignore
681
723
- unused_field: ignore
682
-
724
+
683
725
linter:
684
726
rules:
685
727
- name : Copy codelab2/finished
@@ -696,7 +738,7 @@ steps:
696
738
_server = '127.0.0.1';
697
739
}
698
740
- // TODO: build _vocabMap if empty
699
-
741
+
700
742
- // TODO: tokenize the input sentence.
701
743
+ if (_vocabMap.isEmpty) {
702
744
+ final vocabFileString = await rootBundle.loadString(vocabFile);
@@ -728,7 +770,7 @@ steps:
728
770
+ break;
729
771
+ }
730
772
+ }
731
-
773
+
732
774
if (_connectionMode == ConnectionModeType.rest) {
733
775
- // TODO: create and send the REST request
734
776
+ final response = await http.post(
@@ -737,7 +779,7 @@ steps:
737
779
+ 'instances': [_tokenIndices],
738
780
+ }),
739
781
+ );
740
-
782
+
741
783
- // TODO: process the REST response
742
784
+ if (response.statusCode == 200) {
743
785
+ Map<String, dynamic> result =
@@ -780,10 +822,10 @@ steps:
780
822
+ const outputTensorName = 'dense_5';
781
823
+ PredictRequest request = PredictRequest(
782
824
+ modelSpec: modelSpec, inputs: {inputTensorName: inputTensor});
783
-
825
+
784
826
- // TODO: send the gRPC request
785
827
+ PredictResponse response = await _stub.predict(request);
786
-
828
+
787
829
- // TODO: process the gRPC response
788
830
+ if (response.outputs.containsKey(outputTensorName)) {
789
831
+ if (response.outputs[outputTensorName]!.floatVal[1] >
0 commit comments