Membuat Model OCR untuk membaca NIK KTP

By | November 22, 2024
316 Views

Optical Character Recognition (OCR) adalah teknologi yang memungkinkan komputer untuk mengenali dan mengubah teks yang terdapat pada gambar, dokumen hasil scan, atau format digital lainnya menjadi data teks yang dapat diedit dan dicari. OCR berperan penting dalam berbagai aplikasi, mulai dari konversi dokumen cetak ke format digital hingga pengenalan tulisan tangan dalam aplikasi mobile dan desktop.

Teknologi OCR telah berkembang pesat, dari awalnya hanya mampu mengenali teks berbasis mesin hingga saat ini dapat mengenali teks yang ditulis tangan dengan tingkat akurasi yang tinggi. Artikel ini akan membahas secara mendalam konsep, cara kerja, aplikasi, serta tantangan yang dihadapi dalam pengembangan OCR.

Cara Kerja OCR

Proses kerja OCR dapat dibagi menjadi beberapa tahap, yang melibatkan sejumlah teknologi dan algoritma pemrosesan gambar. Berikut ini adalah tahapan umum yang dilakukan dalam proses OCR:

  1. Preprocessing Gambar:
    • Sebelum memulai pengenalan teks, gambar yang berisi teks perlu diproses terlebih dahulu untuk meningkatkan kualitasnya. Beberapa teknik yang sering digunakan dalam preprocessing antara lain binarisasi, pengurangan noise, dan peningkatan kontras. Tujuan dari langkah ini adalah memastikan bahwa gambar yang diolah oleh sistem OCR memiliki kualitas yang cukup baik untuk memungkinkan pengenalan teks secara akurat.
  2. Segmentasi Teks:
    • Pada tahap ini, sistem OCR memisahkan gambar menjadi blok teks, baris, dan karakter individu. Segmentasi adalah langkah penting karena menentukan bagaimana sistem akan menganalisis teks secara menyeluruh. Algoritma segmentasi harus dapat mendeteksi area teks di antara elemen non-teks, seperti gambar atau diagram, serta menangani variasi dalam jarak antar-karakter dan antar-baris.
  3. Pengenalan Karakter:
    • Pengenalan karakter adalah inti dari teknologi OCR. Pada langkah ini, setiap karakter individu yang telah di-segmentasi dibandingkan dengan basis data karakter yang telah diketahui sebelumnya. Algoritma ini dapat menggunakan metode pattern matching (mencari pola yang cocok) atau metode kecerdasan buatan seperti machine learning untuk mempelajari pola huruf dari data pelatihan.
  4. Post-processing:
    • Setelah teks dikenali, sistem OCR akan melakukan langkah post-processing untuk memperbaiki hasil yang mungkin masih mengandung kesalahan. Misalnya, ada algoritma yang dapat memanfaatkan kamus atau aturan tata bahasa untuk memperbaiki kata-kata yang salah pengenalan akibat kemiripan bentuk karakter.
See also  Model Bahasa LLaMA (Large Language Model Meta AI)

Teknologi Pendukung dalam OCR

Berbagai teknologi dan algoritma digunakan untuk mendukung kinerja OCR, antara lain:

  1. Neural Networks (Jaringan Saraf Tiruan):
    • Saat ini, banyak sistem OCR yang menggunakan jaringan saraf tiruan, terutama Convolutional Neural Networks (CNN), untuk meningkatkan akurasi pengenalan karakter. CNN efektif dalam mengenali pola-pola visual pada gambar, termasuk karakter huruf dan angka, dengan mempelajari fitur-fitur dari sejumlah besar data pelatihan.
  2. Natural Language Processing (NLP):
    • Natural Language Processing (NLP) digunakan untuk memperbaiki hasil dari OCR, terutama dalam tahap post-processing. Dengan NLP, sistem OCR dapat memeriksa kesesuaian hasil pengenalan dengan aturan bahasa yang berlaku, sehingga dapat mengurangi kesalahan pengenalan karakter yang sering terjadi pada teks berbahasa alami.
  3. Machine Learning:
    • Machine learning juga berperan besar dalam pengembangan OCR modern. Algoritma berbasis machine learning memungkinkan sistem OCR untuk belajar dari data pelatihan dan memperbaiki akurasinya seiring waktu. Salah satu teknik machine learning yang populer dalam OCR adalah supervised learning, di mana algoritma dilatih menggunakan kumpulan data teks yang telah diberi label sebelumnya.

Tantangan dalam OCR

Meskipun teknologi OCR telah berkembang pesat, masih ada beberapa tantangan yang perlu diatasi:

  1. Variasi Font dan Ukuran Teks:
    • Sistem OCR harus mampu mengenali berbagai jenis font dan ukuran teks. Beberapa font yang tidak umum atau karakter yang sangat kecil dapat sulit dikenali, terutama jika teks tersebut memiliki kontras rendah atau terdapat noise pada gambar.
  2. Teks pada Latar Belakang Kompleks:
    • Teks yang berada di atas latar belakang gambar atau pola yang kompleks bisa sulit untuk diproses oleh sistem OCR. Segmentasi karakter menjadi lebih sulit dalam kondisi ini, yang dapat menurunkan akurasi pengenalan teks.
  3. Tulisan Tangan:
    • Meskipun OCR telah berhasil mengatasi pengenalan teks cetak, pengenalan tulisan tangan masih menjadi tantangan yang signifikan. Tulisan tangan yang memiliki variasi besar antar-pengguna dan antar-huruf menyulitkan sistem OCR untuk mencapai akurasi tinggi.
  4. Bahasa yang Kompleks:
    • Bahasa yang memiliki karakter kompleks, seperti Mandarin atau Arab, memerlukan algoritma yang lebih canggih untuk mengenali dan memproses teks. Selain itu, bahasa yang menggunakan aksen atau tanda baca khusus juga menambah tantangan dalam pengenalan OCR.
See also  Google mengeluarkan Model AI untuk Prediksi Cuaca yang Lebih Akurat sampai 10 hari kedepan

Uji Kasus pada Deteksi NIK KTP Indonesia

Setelah kita mendapatkan lokasi NIK nya, maka tahap selanjutnya yang bisa kerjakan yaitu membuat model untuk mengubah gambar tersebut menjadi teks, hal ini biasanya dikenal dengan OCR Optical Character Recognition. Model OCR berbasis deep learning sangat banyak sekali tersedia.

Membuat Model OCR untuk membaca No KTP dapat dimulai dengan membuat dataset seperti gambar berikut telah disiapkan 4 gambar yang digunakan untuk proses pelatihan.

Bila kita perbesar sebagai berikut

Kita bisa membuat model yang  sederhana dengan menggunakan CNN saja kok.

import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self,n_class = 10):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(560, 50)
        self.fc2 = nn.Linear(50, n_class)
        self.log = nn.LogSoftmax(dim = 1)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        # print(x.shape)
        x = x.view(-1, 560)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return self.log(x)

Proses pembuatan dataset tidak dibahas disini. Setelah melakukan pelatihan dilakukan proses pengujian sebagai berikut

model.eval()
for batch in train_loader:
    images, labels = batch        
    with torch.cuda.amp.autocast(enabled=scaler is not None):
        images = images.to(device)
        labels = labels.to(device)
        out = model(images)
        prediksi = torch.argmax(out,dim=1)
        print(labels,prediksi)

dengan hasil sebagai berikut target –> prediksi

tensor([3, 3, 1, 4]) tensor([3, 3, 1, 4])
tensor([0, 3, 1, 4]) tensor([0, 3, 1, 4])
tensor([0, 8, 6, 2]) tensor([0, 8, 6, 2])
tensor([0, 0, 0, 2]) tensor([0, 0, 0, 2])
tensor([1, 7, 7, 1]) tensor([1, 7, 7, 1])
tensor([0, 4, 2, 4]) tensor([0, 4, 2, 4])
tensor([0, 1, 9, 3]) tensor([0, 1, 9, 3])
tensor([0, 0, 0, 2]) tensor([0, 0, 0, 2])
tensor([3, 4, 7, 1]) tensor([3, 4, 7, 1])
tensor([1, 4, 0, 2]) tensor([1, 4, 0, 2])
tensor([0, 9, 7, 9]) tensor([0, 9, 7, 9])
tensor([0, 0, 0, 1]) tensor([0, 0, 0, 1])
tensor([3, 1, 7, 4]) tensor([3, 1, 7, 4])
tensor([0, 8, 0, 4]) tensor([0, 8, 0, 4])
tensor([0, 7, 7, 4]) tensor([0, 7, 7, 4])
tensor([0, 0, 0, 5]) tensor([0, 0, 0, 5])

Pengujian

Mari kita uji Model OCR untuk membaca No KTP

See also  Monitoring Kinerja Deep Learning menggunakan Tensorboard

Terlihat hasil prediksi sudah sesuai dengan input gambar.

Kesimpulan

Membuat Model OCR untuk membaca NIK KTP sangat mudah dibuat menggunakan model deep learning berbasis CNN.  Keberhasilan dengan akurasi yang baik karena font yang digunakan pada KTP emang sangat cocok untuk proses OCR. Daripada menggunakan tesseract harus dilakukan pelatihan terlebih dahulu dengan font yang terbaru, saya kira lebih baik membuat model sendiri. Bahkan untuk posisi agak miring pun masih bisa dikenali