Protocol Buffers – Apakah kalian sering menggunakan beragam bahasa dalam membuat aplikasi? Kalau iya, berarti perlunya sebuah standar format serialisasi data sebagai wadah dalam melakukan sharing. Kalau dalam protokol HTTP, kita terbiasa menggunakan format JSON, XML. Bila kalian menggunakan python yaitu pickle. Namun format pickle hanya bisa dibaca untuk python! Bagaimana bila data tersebut digunakan oleh C/C++?
Protocol Buffers
Biasa disingkat dengan PB atau dengan extension *.proto merupakan deskripsi atas sebuah data yang akan kalian share. Melalui protocol Buffers maka sebuah compiler akan membuat class untuk melakukan decode dan parsing dengan format binary! Sehingga bekerja secara efisien. Kalian tahu dong format POJO dalam java yang berisi setter dan getter, cara kerjanya mirip seperti itu atau disebut dengan class entity. Sesuai dengan tujuan google https://developers.google.com/protocol-buffers
Library Protocol Buffers
Jika kalian ingin mengubah *.proto menjadi PB, maka kalian cukup menggunakan library grpico dengan menggunakan perintah pip, maka kalian bisa install berikut
pip install grpcio==1.38.0
pip install grpcio-tools==1.38.0
perhatikan kode berikut yang disimpan dengan nama contoh.proto
syntax = "proto2"; package tutorial; message Person { optional string name = 1; optional int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { optional string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phones = 4; } message AddressBook { repeated Person people = 1; }
Kemudian kita panggil perintah
python -m grpc_tools.protoc --proto_path=./ --python_out=./ contoh.proto
Maka akan ada tercipta file contoh_pb.py syntax nya mirip dengan bahasa java/C++, lebih lanjut kalian bisa pelajari disini
https://developers.google.com/protocol-buffers/docs/pythontutorial
https://github.com/grpc/grpc/issues/15444
Nah kalian akan menjumpai format *.proto ketika kalian menggunakan tensorflow metadata
Tensorflow metadata
https://github.com/tensorflow/metadata menyediakan standar representasi data dari metadata yang digunakan untuk proses machine learning, seperti schema data tabular dan ringkasan summary data statistik atas dataset tersebut.
Kalian bisa menemukan *.proto https://github.com/tensorflow/metadata/tree/master/tensorflow_metadata/proto/v0
Nah kalian harus melakukan convert *.proto menjadi pb sehingga https://github.com/tensorflow/metadata/blob/master/tensorflow_metadata/proto/__init__.py tidak akan error ketika dijalankan!
Caranya cukup mudah koq, Misalkan kode git diatas saya letakan di sebuah folder
D:\Python-Tensorflow-Segmentation pix2pix\examples
Setelah kalian lihat, ada folder
D:\Python-Tensorflow-Segmentation pix2pix\examples\tensorflow_metadata\proto\v0
Yang berisis *.proto
Maka cut/move saja file proto yang kalian akan konvert ke
D:\Python-Tensorflow-Segmentation pix2pix\examples
Misalkan saya cut/move statistics.proto
Kemudian ketika perintah berikut
python -m grpc_tools.protoc --proto_path=./ --python_out=./ statistics.proto
Maka akan tercipta statistics_pb2.py
Nah kalian bisa move/cut file tersebut ke
D:\Python-Tensorflow-Segmentation pix2pix\examples\tensorflow_metadata\proto\v0
Sehingga ketika kita menjalankan
https://github.com/tensorflow/metadata/blob/master/tensorflow_metadata/proto/__init__.py
tidak error lagi karena kode __init__.py didalamnya sebagai berikut
# Copyright 2017 The TensorFlow Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Init module for tf.Metadata protos.""" from tensorflow_metadata.proto.v0 import anomalies_pb2 from tensorflow_metadata.proto.v0 import metric_pb2 from tensorflow_metadata.proto.v0 import path_pb2 from tensorflow_metadata.proto.v0 import problem_statement_pb2 from tensorflow_metadata.proto.v0 import schema_pb2 from tensorflow_metadata.proto.v0 import statistics_pb2
Ref