Misi utama cermati.com sebagai startup fintech adalah membantu nasabah untuk bisa mendapatkan produk keuangan secara online. Sebagai contoh, seorang nasabah hendak mengajukan pinjaman untuk membeli mobil. Cara yang konvensional mengharuskan nasabah bertemu secara tatap muka dengan perwakilan dari institusi keuangan (misalnya bank, dll). Waktu yang dibutuhkan pun tidak sedikit, apalagi jika di pagi hari nasabah memiliki kegiatan lain yang tidak dapat ditinggalkan, maka di malam hari lah baru dapat mencari informasi mengenai dengan produk keuangan yang diperlukannya. Dengan adanya kemajuan teknologi, hal ini dapat diatasi dengan ketersediaan informasi secara online lebih dari sekedar mendapatkan informasi, nasabah juga dapat mengajukan produk keuangan secara online pada website kami! Hal ini diharapkan dapat membantu masyarakat Indonesia tidak lagi kesusahan dalam mencari dan menemukan produk keuangan.

Salah satu tantangan yang kami hadapi adalah mengubah aplikasi fisik menjadi berbentuk aplikasi elektronik. Isian yang harus diisi oleh nasabah merupakan data pribadi yang tidak sulit untuk dicari, namun data yang dibutuhkan cukup banyak. Rata-rata sebuah aplikasi dapat memiliki 7 halaman yang menanyakan berbagai macam pertanyaan. Belum ditambah dengan dokumen-dokumen pendukung yang harus dilengkapi oleh nasabah.

Dengan adanya teknologi yang semakin pesat kemajuannya tentu kami ingin memberikan sebuah fitur yang dapat mempermudah nasabah kami dalam mengisi aplikasi. Teknologi OCR (Optical Character Recognition) dapat membantu nasabah untuk melakukan ekstraksi data secara otomatis dari dokumen yang telah diunggah. Kemudian data tersebut dapat diisikan secara otomatis ke isian yang sesuai.

Fitur ini sangat menguntungkan bagi kedua belah pihak. Bagi nasabah jumlah isian data yang harus diisikan secara manual dapat dikurangi secara drastis, bagi cermati sendiri dapat meningkatkan kredibilitas data yang ada karena isian data diambil langsung dari dokumen asli.

Oleh karena itu lah modul OCR ini dikembangkan.

Tantangan yang dihadapi dalam proses pengembangan OCR

Pengembangan modul ini tergolong dalam kategori riset dimana hingga sekarang belum ada solusi yang bersifat umum dan berlaku untuk semua jenis gambar. Permasalahan utama yang kami hadapi adalah input yang sangat bervariasi. Perhatikan contoh-contoh dokumen yang masuk dalam database kami di bawah ini, 

Gambar yang terkena bayang-bayang pemotret

Gambar yang terkena bayang-bayang pemotret.

 

 Orientasi gambar yang berbeda-beda Latar belakang yang cukup dominan 

Orientasi gambar yang berbeda-beda.

Latar belakang yang cukup dominan.

Terlihat bahwa gambar dapat memiliki orientasi yang bermacam-macam. Gambar dokumen tidak selalu mengisi secara penuh gambar yang diupload, seringkali latar belakang gambar jauh lebih dominan dari dokumen itu sendiri. Pencahayaan yang tidak merata (bisa karena tertutup oleh bayangan pengambil foto). Hal ini dapat menyebabkan pengenalan teks menjadi buruk.

Tantangan ini tidak membuat kami patah semangat! Justru dengan adanya tantangan ini membuat pengembangan modul ini menjadi sangat menarik.

Implementasi

Pengembangan sebuah teknologi pengenalan karakter optikal atau OCR membutuhkan sumber daya yang cukup banyak. Yang jelas bukan merupakan privilege dari sebuah startup. Untuk itu kami masih menggunakan teknologi eksternal yaitu Tesseract-OCR yang sekarang dikembangkan oleh Google. Engine ini cukup bagus dalam melakukan pengenalan teks jika teks tersebut tidak memiliki noise dan karakter nya juga tergambar dengan jelas.

Tentu pengembangan dari sebuah open-source project ditujukan bagi penggunaan kalangan umum sehingga pengembangannya pun tidak dapat mengikuti kebutuhan masing-masing penggunanya secara spesifik. Pada tahap awal ini kami memfokuskan modul OCR ini untuk bekerja pada dokumen KTP. Untuk memulai perjalanan kami terlebih dahulu mencoba langsung menjalankan Tesseract pada raw image input.

Akurasi yang dihasilkan sangat rendah. Hal ini bukan karena Tesseract tidak berfungsi dengan baik tetapi karena image yg digunakan terlalu rendah kualitasnya. Tesseract berhasil mengenali adanya karakter yang terdapat pada gambar namun akurasinya salah, misalnya huruf A bisa jadi angka 4. Hal ini dapat dimengerti karena pada KTP  memiliki corak latar belakang  yang cukup "menganggu". Kami menyadari bahwa Binarization built-in milik Tesseract tidak dapat melakukan hal ini.

Oleh karena itu kami melakukan preprocessing untuk membuat gambar input menjadi binary image atau gambar hitam putih. Kami juga melakukan preprocessing untuk menjadikan image yg akan di scan lebih mudah dibaca dengan menjaga orientasi image tersebut dan mengurangi noise yg terdapat pada imagenya. 

Beberapa metode yang kami temukan cukup berguna untuk tahapan preprocessing antara lain adalah:

1.) Operasi Morfologi (digunakan untuk meratakan pencahayaan)

Kami menemukan bahwa untuk use case kami, lebih menguntungkan untuk melakukan operasi morfologi ini kami lakukan pada color space RGB bukan di color space hitam putih. Awalnya hal ini secara tidak sengaja kami temukan saat berusaha mencari cara untuk menghilangkan iluminasi yang tidak rata. Misalnya gambar di bawah ini

Pencahayaan yang tidak merata

Mula-mula kami hanya melakukan operasi ini pada color space B/W, namun karena sedikit iseng kami mencoba pada color space RGB, ternyata hasilnya sangat membantu! Proses pengabuan dapat menghasilkan gambar yang jauh lebih baik hingga (90% akurasi)!

2.) Operasi Pengabuan

Operasi ini cukup standard yang menggunakan metode lumonisity.

3.) Operasi Binerisasi atau Thersholding

Pada tahap ini kami mencoba banyak metode, mulai dari local thresholding hingga global thresholding. Local thresholding tidak memberikan hasil yang cukup memuaskan karena masalah latar belakang lagi. Pixel-pixel yang merupakan text seringkali kurang dominan pada kernel untuk local thersholding. Akhirnya kami jatuh hati pada metode Otsu wikipedia:https://en.wikipedia.org/wiki/Otsu%27s_method. Metode ini menggunakan banyak pendekatan statistika yang cukup powerful untuk use case kami.

Meskipun berfokus pada bagaimana cara mensupply gambar input yang baik untuk Tesseract. Kami juga berusaha men-tweak Tesseract. Perbedaan yang signifikan adalah dengan menambahkan data bahasa yang sesuai dengan kebutuhan. Bahasa ini juga dapat dibuat dengan menggunakan jenis huruf yang kita inginkan! Tesseract dapat melakukan language analysis sendiri, namun ini membutuhkan kata-kata umum yang sering muncul di bahasa itu dan beberapa data lainnya yang cukup sulit untuk dibuat secara manual. Untuk membuat data yang disesuaikan dengan jenis huruf yang spesifik (mengabaikan language analysis) Tesseract versi terbaru sudah menyediakan tutorial pada wikinya yang sangat jelas! Sehingga tidak sulit untuk melakukan hal ini.

Penutup

Dari pengembangan modul ini kami mempelajari cukup banyak hal mengenai image processing. Baik hal itu secara teoritis ataupun hal-hal menarik yang mungkin secara tidak sengaja kami temukan. Seperti pada eksperimen operasi morfologi yang secara tidak sengaja memberikan hasil yang sangat memuaskan jika dikerjakan pada color space RGB. Tentu secara teori metode ini sedikit menyimpang, but well it works!

Memahami cara kerja di belakang layar sebuah teknologi yang sedang kita gunakan juga sangat bermanfaat jika kita ingin men-tweak teknologi tersebut dan bagaimana teknologi tersebut dapat di-tweak agar sesuai dengan kebutuhan kita. Keuntungan lain adalah memberikan gambaran input yang seperti apa yang dapat diproses dengan baik oleh teknologi tersebut. Dalam kasus ini kami mempelajari artikel-artikel yang berkaitan dengan backend dari Tesseract sendiri.

Tantangan yang paling berat bagi kami sekarang adalah menentukan posisi serta orientasi dari dokumen yang akan diekstrak datanya. Jika secara otomatis kami dapat mencari posisi dari dokumen tersebut.  Kami dapat juga mengekstrak posisi dari data yang ingin di ambil. Dengan kata lain akurasi pengenalan akan semakin tinggi!

Modul ini masih berada pada tahap pengembangan, masih banyak update-update yang akan kami lakukan, so stay tuned!