Protocol Buffers

By | June 2, 2021
1,498 Views

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

See also  Implementasi Deep Machine Learning untuk Segmentasi Gambar

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

https://www.xenonstack.com/insights/google-protocol-buffer/

See also  Mengenal Data Engineer, Analyst, dan Scientist