Custom Inference Script — OCR Model on IBM Application Suite-Visual Inspection

Cahyati Supriyati Sangaji (My Note)

IBM Application Suite-Visual Inspection merupakan salah satu produk yang terkait dengan usecase untuk artificial intelligence yang running pada Openshift. Nama sebelumnya adalah IBM Maximo Visual Inspection yang running pada OS Redhat atau Ubuntu. Pada aplikasi ini kita dapat menggunakan fitur custom inference script, yang merupakan opsi untuk proses deploy model diluar dari default yang disediakan. Artikel ini akan menjabarkan gambaran dari penggunaan fitur custom inference script tersebut. Contoh demo pada artikel ini mengikuti langkah pada sample project Read License Plate Numbers Using Object Recognition Services”, yang datasetnya menggunakan dataset dari Kaggle dataset.

Sebelum masuk ke pembahasan tentang langkah-langkah membuat dan penggunaan OCR model, akan dijabarkan terlebih dahulu bagaimana alur kerja dari usecase yang digunakan sebagai contoh dari penggunaan custom inference script.

Proses diawali dari input gambar atau frame video yang menunjukan terdapat object kendaraan dan plat kendaraan, lalu ada proses crop untuk mendapatkan object plat kendaraan. Selanjutnya di proses melalui kubernetes yang didalamnya terdapat script untuk proses OCR, menggunakan library OpenCV, numpy dan Tresseract OCR. Setelah proses selesai, hasil dari plat akan ditampilkan dan kita mengetahui hasil pembacaan OCR oleh user.

Ilustrasi-1: Flow OCR System. Source : https://github.com/IBM/license-plate-ocr

Langkah awal adalah create kubernetes pada IBM Cloud, buat cluster baru untuk nanti akan digunakan untuk menampilkan hasil OCR dari Custom Inference Script pada IBM Maximo Visual Inspection.

Ilustrasi-2: Create Kubernetes on IBM Cloud

Tunggu sampai proses pembuatan cluster selesai, sehingga dapat kita gunakan. Periksa bagian Worker Nodes, kemudian catat ip public yang dapat kita gunakan pada custom script yang di uplaod pada IBM Maximo Visual Inspection.

Ilustrasi-3: Kubernetes Cluster
Ilustrasi-4: Worker Nodes Detail

Dari info pada worker nodes yang sudah di dapatkan, edit bagian URL dengan ip dari ip public cluster yang sudah dibuat pada file custom.py. File ini nantinya adalah file yang akan di upload pada IBM Maximo Visual Inspection sebagai custom inference script. Setelah itu lanjutkan ke langkah-langkah pada IBM Maximo Visual Inspection.

Ilustrasi-5: Custom.py Script

Setelah proses create kubernetes cluster selesai, kita akan lanjutkan untuk proses membuat model menggunakan IBM Application Suite-Visual Inspection. Pada ilustrasi-4 merupakan tampian login dari aplikasi Visual Inspection, proses input username dan password dilakukan pada aplikasi IBM Application Suite. Versi aplikasi Visual Inspection yang digunakan adalah versi 8.0.0.

Ilustrasi-6: IBM Application Suite-Visual Inspection Login

Setelah berhasil login maka akan menuju ke halaman Home dari aplikasi seperti pada ilustrasi-7. Tampilan aplikasi ini masih serupa dengan versi sebelumnya, hanya namanya yang berubah menjadi IBM Maximo Application Suite-Visual Inspection.

Ilustrasi-7: IBM Maximo Application Suite-Visual Inspection Home Page

Langkah awal pada aplikasi IBM Maximo Visual Inspection ini adalah create dataset. Contoh yang diberikan pada artikel ini adalah membuat OCR dataset yang berarti kita membutuhkan data untuk proses object detection.

Ilustrasi-8: Create Dataset

Setelah create dataset selesai, kemudian import file image dengan object kendaraan yang plat kendaraannya terlihat sebagai dataset yang nantinya akan digunakan untuk training. Pada artikel ini digunakan dataset dengan image yang terdapat object bus, truk dan mobil. Dalam image tersebut tentu saja juga di cari gambar yang terlihat plat kendaraannya.

Ilustrasi-9: Import Files

Setelah proses import data selesai, lakukan proses labeling. Pada demo ini dilakukan labeling menggunakan bentuk label polygon untuk mempermudah proses labeling.

Ilustrasi-10 : Labeling Result

Untuk memperkaya dataset yang kita miliki, dilakukan proses Augment Data. Pada contoh demo kali ini, digunakan semua opsi yang disediakan pada fitur Augment Data pada IBM Maximo Visual Inspection karena fokus pengenalan object pada bentuk dari object yang di deteksi.

Ilustrasi-11: Augment Data

Setelah proses Augment Data, jumlah dataset yang kita miliki sekarang menjadi sekitar 23 ribu data. Terkait proses Augment Data ini opsi yang di pilih akan berbeda berdasarkan usecase yang akan dibuat. Misalnya penilaian object parameternya adalah warna, sehingga opsi “color” tidak perlu di pilih agar pada dataset tidak ada variasi dataset warna yang berbeda. Dengan begitu nantinya object yang memiliki warna yang berbeda dari dataset tidak di anggap object yang benar.

Ilustrasi-12 : Augment Data Process

Hasil dari proses Augment Data terdapat pada augment dataset yang sudah kita buat sebelumnya. Pada ilustrasi-13 dapat dilihat contoh hasil dari proses Augment Data dengan jumlah dataset menjadi 23.712 data.

Ilustrasi-13 : Augment Data Result

Setelah proses persiapan data sudah dilakukan yaitu create dataset dan Augment Data, langkah berikutnya adalah proses training. Sebelumnya setting opsi pada Hyperparameter sebelum klik button untuk training, namun kita juga bisa langsung menggunakan default setting dari IBM Maximo Visual Inspection. Jika hasil taining dirasa kurang cukup untuk memenuhi target accuracy yang kita inginkan, maka dapat dilakukan training ulang.

Ilustrasi-14: Training Process

Pada demo kali ini, dilakukan 3 kali proses training karena untuk hasil training menggunakan default setting dari hyperparameter IBM Maximo Visual Inspection masih kurang baik. Akhirnya pada proses training ketiga didapatkan hasil yang cukup baik untuk dapat digunakan ke langkah selanjutnya. Hasil yang cukup baik tersebut menggunakan setting max iteration 18000 dengan nilai opsi lainnya masih default dan mendapatkan accuracy 88%.

Ilustrasi-15: Training Result

Sebelum melanjutkan proses deploy pada IBM Maximo Visual Inspection, lakukan persiapan file zip yang akan di upload/import pada custom inference script. Diawali dengan langkah clone data dari link github, kemudian buat zip yang didalamnya terdapat file custom.py yang sebelumnya juga kita sudah siapkan dan merubah script dengan mengisi info URL sesuai dengan link IP Public kubernetes yang sudah dibuat sebelumnya.

Ilustrasi-16: Custom Inference Script Prepare

Setelah file zip siap, dilanjutkan dengan proses import custom inference script. Dengan langkah pilih asset type dengan custom inference script kemudian import data zip yang sudah kita siapkan tadi. Selanjutnya isi nama asset yang akan kita tambahkan, tambahkan deskripsi jika dibutuhkan dan kemudian klik “Add asset”.

Ilustrasi-17: Import Custom Inference Script
Ilustrasi-18: Create Custom Inference Script (Name)

Custom Inference Script siap digunakan dan kita dapat lakukan langkah berikutnya. Proses yang akan dilakukan adalah proses deploy model menggunakan custom inference script yang sudah ditembahkan tadi dengan proses seperti pada ilustrasi-19.

Ilustrasi-19: Deploy model with Custom Inference Script

Ilustrasi-20 adalah dashboard hasil deploy model pada IBM Maximo Visual Inspection. Dari sini kita langsung bisa test model yang sudah kita deploy tadi, dengan dataset baru yang memang digunakan untuk data test dan bukan merupakan bagian dari dataset untuk training. Caranya dengan proses drag and drop, import data, atau input-kan link url image yang akan kita test.

Ilustrasi-20: Deploy Model

Akhirnya kita dapat melihat hasil dari object detection model yang sudah kita buat pada IBM Maximo Visual Inspection. Model dapat mengenali dengan baik mana object yang merupakan “car” dan mana object yang merupakan “license plate”, beserta jumlah object pada data yang diuji.

Ilustrasi-21: Deploy Model Result

Selesai dengan proses pada IBM Maximo Visual Inspection dengan hasil object detection, proses dilanjutkan dengan hasil OCR model yang berasal dari custom inference script yang di awali dengan clone github OCR. Proses pada demo ini dilakukan pada CLI cloud, sehingga awalnya lakukan proses untuk CLI cloud terhubung dengan account IBM Cloud milik kita, baru lakukan langkah seperti ilustrasi-22.

Ilustrasi-22: Clone Data from Github

Langkah selanjutnya apply config dari kubernetes yang ada pada file github yang sudah kita clone sebelumnya. Kemudian pastikan service dari Kubernetes sudah running seperti pada ilustrasi-24.

Ilustrasi-23: Apply Kubernetes Config
Ilustrasi-24: Check Kubernetes Service

Pada demo yang dilakukan terjadi kendala pada koneksi Kubernetes yang digunakan, sehingga belum dapat dilakukan update hasil dari Kubernetes. Namun akan diberikan gambaran bagaimana hasil yang diberikan jika sistem berjalan dengan baik. Kemudian berikut adalah hasil dari Kubernetes yang berasal dari sumber github.

starting server on port 8000
length: 32562012
10.77.223.246 - - [11/Feb/2020 16:47:56] "POST / HTTP/1.1" 200 -
[{'confidence': 0.9984619617462158, 'ymax': 918, 'label': 'car', 'xmax': 1418, 'xmin': 409, 'ymin': 257, 'polygons': [[[751, 244], [679, 292], [499, 292], [463, 315], [427, 315], [391, 339], [391, 859], [427, 882], [463, 882], [535, 930], [1292, 930], [1400, 859], [1364, 835], [1364, 788], [1400, 764], [1364, 741], [1400, 717], [1364, 693], [1364, 646], [1436, 599], [1436, 386], [1364, 339], [1364, 315], [1328, 292], [1292, 292], [1256, 268], [1220, 268], [1184, 292], [1148, 292], [1076, 244]]]}, {'confidence': 0.9999994039535522, 'ymax': 664, 'label': 'license_plate', 'xmax': 1216, 'xmin': 1054, 'ymin': 557, 'polygons': [[[1063, 554], [1051, 562], [1051, 616], [1063, 623], [1057, 627], [1063, 631], [1051, 639], [1051, 654], [1069, 666], [1144, 666], [1156, 658], [1162, 662], [1167, 658], [1196, 658], [1208, 650], [1214, 654], [1220, 650], [1220, 562], [1208, 554]]]}]
{'result': 'BFGYGQ6'}

Output backend server akan terlihat seperti ilustrasi-26 yang berasal dari contoh hasil deteksi Visual Inspection pada ilustrasi-25. Sistem memiliki array json dari objek yang terdeteksi, serta prediksi OCR yang diproses.

Ilustrasi-25 : Object Detection Result (example). Source : https://github.com/IBM/license-plate-ocr
Ilustrasi-26: OCR Result. Source : https://github.com/IBM/license-plate-ocr

Server juga akan menghasilkan gambar yang menunjukkan langkah-langkah pasca-pemrosesan yang berbeda. Ini proses yang dilakukan dari haris gambar pada ilustrasi-26:

  • Gambar asli yang dipotong/diputar
  • Gambar biner dengan borders removed
  • Gambar dengan edges highlighted (Canny algorithm)
  • Gambar yang diproses akhir dengan noise dihilangkan

Note: Hasil percobaan akan di update setelah melakukan pengujian ulang, namun catatan ini memberikan gambaran bagaimana cara menggunakan custom inference script pada IBM Maximo Visual Inspection.

Reference:

IBM, 2020. “Read License Plate Numbers Using Object Recognition Services”.