Sistem Pengenalan Pelat Nomor Otomatis (Automatic License Plate Recognition / ALPR) merupakan tulang punggung sistem transportasi cerdas (Intelligent Transportation Systems) modern, mulai dari gerbang tol nir-henti (Multi-Lane Free Flow / MLFF) hingga penegakan hukum lalu lintas elektronik (Electronic Traffic Law Enforcement / ETLE).
Namun, jika Anda pernah mengamati tilang elektronik di Indonesia, salah satu keluhan paling sering muncul adalah salah identifikasi nopol akibat karakter yang terbaca keliru—misalnya nopol AB 6176 Q yang tertukar menjadi AB 6176 0.
Dalam artikel ini, saya membagikan studi riset komputasi mengenai evaluasi komparatif head-to-head antara pipeline pengolahan citra digital klasik berbasis Canny-Tesseract (studi acuan Firin & Sriani, Desember 2025) melawan arsitektur yang kami kembangkan: Syntax-Guided Multi-Scale Candidate Ensemble & Non-Destructive Finite State Automaton (FSA).
1. Anatomi Masalah: Di Mana Titik Lemah Pipeline Klasik? #
Dalam literatur ilmiah terkini, Firin & Sriani (Euler: SINTA 3, Des 2025) meneliti deteksi pelat nomor menggunakan kombinasi heuristik klasik:
- Peningkatan kontras adaptif CLAHE statis (
clipLimit=2.0, kisi ). - Deteksi tepi Canny Edge Detection ().
- Operasi morfologi penutupan (closing) dengan kernel persegi .
- Mesin pembaca karakter Tesseract OCR bawaan.
Pendekatan ini memiliki daya tarik besar karena sangat ringan dan mandiri pada CPU standar tanpa membutuhkan GPU berdaya listrik tinggi. Namun, ketika diuji pada 125 citra riil dari dataset terbuka HuggingFace DamarJati/IND-number-plate, terungkap tiga kelemahan mendasar:
Tiga Celah Kritis Baseline Klasik (Firin & Sriani, 2025):
- Single-Scale Contrast Bottleneck: Penggunaan skala kontras tunggal bersifat kompromi (trade-off). Kontras tinggi memperjelas pelat bernoda gelap tetapi menyebabkan over-saturation pada pelat terang, mengakibatkan kontur karakter terputus saat penapisan histeresis Canny.
- Ketiadaan Domain Knowledge pada OCR: Tesseract OCR dilatih pada korpus bahasa alami (natural language), bukan struktur pelat nomor. Akibatnya, glif ambigu seperti angka
'0'vs huruf'O', angka'1'vs'I','5'vs'S', atau'8'vs'B'kerap tertukar tanpa kendali. - Catastrophic Over-Correction pada Regex Biasa: Mengganti karakter ambigu menggunakan global string replacement biasa (
regex.replace) bersifat "buta konteks". Jika semua huruf'B'dipaksa jadi angka'8', nopol wilayah Jakarta sepertiB 1234 CDakan rusak menjadi8 1234 CD.
2. Alur Kerangka Pengujian Komparatif (Dual-Path Architecture) #
Untuk membuktikan kebaruan (novelty) secara terukur dan transparan, kami merancang pengujian berdampingan (head-to-head benchmark) di mana kedua metode menerima masukan citra yang sama persis:

3. Tiga Pilar Kebaharuan Metodologis #
Arsitektur usulan kami tidak membuang OCR, melainkan memberdayakan OCR ke dalam tiga lapisan kecerdasan hulu-ke-hilir:

Pilar 1: Adaptive Multi-Scale Contrast Representations #
Alih-alih mengandalkan satu citra hasil kontras, sistem menghasilkan dua representasi citra secara paralel:
- Aliran Standar (, kisi ): Menjaga fidelitas bentuk karakter pada pelat dengan pencahayaan normal.
- Aliran High Dynamic Range (, kisi ): Mengangkat intensitas glif tipis yang tenggelam di bawah bayangan kendaraan pekat.
Kedua aliran diekstrak oleh OCR untuk membentuk Kumpulan Kandidat Teks (Candidate Pool ).
Pilar 2: Evaluasi Sintaksis TNKB Berbasis Perpol No. 7 Tahun 2021 #
Kandidat teks dievaluasi menggunakan fungsi objektif matematis yang merefleksikan kepatuhan terhadap regulasi Tanda Nomor Kendaraan Bermotor (TNKB) Polri:
Kaidah Tiga Zona Spasial TNKB Indonesia:
- Zona Prefiks: 1–2 huruf kapital representasi 45 kode wilayah Samsat nasional (
A,B,D,AB,AD,BK, dll). - Zona Tengah: 1–4 digit angka numerik registrasi kendaraan (
1s.d.9999). - Zona Sufiks: 1–3 huruf alfabet kapital representasi sub-wilayah dan golongan kendaraan.
Jika kandidat string mematuhi pola regex ^([A-Z]{1,2})([0-9]{1,4})([A-Z]{1,3})$, ia memperoleh poin, dan jika kode wilayahnya terdaftar resmi di tabel Korlantas Polri, ia memperoleh tambahan poin.
Pilar 3: Dekoder Otomata Berhingga Non-Destruktif (FSA) #
Kandidat terbaik dengan skor tertinggi kemudian diumpankan ke model otomata berhingga deterministik yang melacak riwayat transisi status posisi spasial:
- Status : Karakter wajib berupa huruf alfabet. Jika terbaca digit angka, konversi ke glif huruf (
'8' -> 'B','0' -> 'O','1' -> 'I'). - Status : Deretan 1–4 karakter tengah wajib berupa angka numerik. Huruf ambigu dikonversi menjadi angka (
'O','D' -> '0','I','L' -> '1','S' -> '5','B' -> '8'). - Status : Karakter akhir wajib berupa huruf alfabet.
Teorema Pelindung Non-Destruktif (Safety Guard): Koreksi otomata hanya disahkan ke dalam sistem apabila dan hanya apabila memenuhi syarat:
Apabila transformasi FSA justru merusak format nopol (misalnya skor kepatuhan turun), sistem secara otomatis membatalkan hasil perubahan dan mengembalikan string asli . Hal ini secara matematis menjamin sifat non-destruktif (karakter yang sudah valid tidak akan pernah rusak).
4. Implementasi Kode Inti (Python Engine) #
Berikut adalah implementasi Python bersih dari modul seleksi kandidat dan dekoder FSA yang digunakan dalam eksperimen:
import re
import cv2
import pytesseract
# Himpunan 45 Kode Wilayah Resmi Korlantas Polri (Perpol No. 7 Tahun 2021)
VALID_AREAS = {
'A', 'B', 'D', 'E', 'F', 'G', 'H', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'Z',
'AA', 'AB', 'AD', 'AE', 'AG', 'BA', 'BB', 'BD', 'BE', 'BG', 'BH', 'BK', 'BL', 'BM', 'BN',
'BP', 'DA', 'DB', 'DC', 'DD', 'DE', 'DG', 'DH', 'DK', 'DM', 'DN', 'DR', 'DT', 'DW', 'EA',
'EB', 'ED', 'KB', 'KH', 'KT', 'KU', 'PA', 'PB'
}
CHAR_TO_NUM = {'O': '0', 'D': '0', 'I': '1', 'L': '1', 'Z': '2', 'S': '5', 'B': '8'}
NUM_TO_CHAR = {'0': 'O', '1': 'I', '2': 'Z', '5': 'S', '8': 'B'}
def score_candidate(s: str) -> int:
"""Evaluasi kepatuhan sintaksis string nopol terhadap regulasi TNKB."""
if not s:
return -999
score = 0
m = re.match(r'^([A-Z]{1,2})([0-9]{1,4})([A-Z]{1,3})$', s)
if m:
pref, num, suff = m.groups()
score += 50
if pref in VALID_AREAS:
score += 30
if 1 <= len(num) <= 4:
score += 10
if 1 <= len(suff) <= 3:
score += 10
if 6 <= len(s) <= 9:
score += 10
return score
def fsa_disambiguate(s: str) -> str:
"""Dekoder status posisi spasial non-destruktif untuk karakter ambigu."""
if not s or len(s) < 4:
return s
# Shortcut: Jika sudah cocok 100% dengan wilayah resmi, jangan ubah!
m = re.match(r'^([A-Z]{1,2})([0-9]{1,4})([A-Z]{1,3})$', s)
if m and m.group(1) in VALID_AREAS:
return s
chars = list(s)
n = len(chars)
# 1. State Prefiks: Huruf wilayah awal
if chars[0].isdigit() and chars[0] in NUM_TO_CHAR:
chars[0] = NUM_TO_CHAR[chars[0]]
pref_len = 2 if (n >= 6 and (chars[0] + chars[1]) in VALID_AREAS) else 1
# 2. State Sufiks: Batas huruf seri belakang
suff_start = n
for k in range(n - 1, pref_len, -1):
if chars[k].isalpha():
suff_start = k
else:
break
if suff_start == n and chars[-1].isdigit() and chars[-1] in NUM_TO_CHAR:
if (n - pref_len - 1) >= 1:
chars[-1] = NUM_TO_CHAR[chars[-1]]
suff_start = n - 1
# 3. State Nomor Registrasi Tengah: Huruf ambigu dikonversi ke angka
for k in range(pref_len, suff_start):
if chars[k] in CHAR_TO_NUM:
chars[k] = CHAR_TO_NUM[chars[k]]
fixed = ''.join(chars)
# Safety Guard: Hanya terima perbaikan jika skor kepatuhan format naik/sama
return fixed if score_candidate(fixed) >= score_candidate(s) else s
5. Hasil Evaluasi Kuantitatif (Head-to-Head Benchmark) #
Pengujian dilakukan secara berdampingan pada 125 citra riil pelat nomor kendaraan bermotor Indonesia (HuggingFace DamarJati/IND-number-plate) menggunakan metrik Character Accuracy (CA), Character Error Rate (CER), dan Word/Plate Accuracy (WA 100% cocok):
| Parameter Evaluasi | Baseline Firin & Sriani (2025) | Metode Usulan (Enhanced ALPR) | Selisih Peningkatan |
|---|---|---|---|
| Character Accuracy (CA) | 87,54% | 90,51% | +2,97% (Signifikan) |
| Character Error Rate (CER) | 12,46% | 9,49% | -2,97% (Reduksi Eror) |
| Word/Plate Accuracy (WA 100%) | 64,00% (80 / 125) | 66,40% (83 / 125) | +2,40% (+3 Pelat Sempurna) |
| Rata-rata Waktu Eksekusi | 251,4 ms / citra | 501,7 ms / citra | +250,3 ms (Multi-Scale) |
Analisis Studi Kasus Riil #
| Pola Kerusakan Citra | Prediksi Baseline (Firin 2025) | Prediksi Usulan (Enhanced ALPR) | Ground Truth Riil | Mekanisme Resolusi |
|---|---|---|---|---|
| Ambiguitas Huruf Sufiks | AB61760 |
AB6176Q |
AB6176Q |
Status melarang angka di posisi seri belakang. |
| Ambiguitas Angka Tengah | 1O42 |
1042 |
1042 |
Status memetakan 'O' menjadi digit '0'. |
| Bayangan Gelap Kendaraan | B123 (terputus) |
B1234XYZ |
B1234XYZ |
Aliran High-Dynamic CLAHE () mengangkat stroke glif yang tertutup bayangan. |
Trade-off Latensi: Peningkatan waktu komputasi dari 251,4 ms menjadi 501,7 ms per citra (+250 ms) terjadi karena sistem mengeksekusi ekstraksi OCR pada dua skala kontras citra secara simultan. Dalam konteks sistem ETLE dan gerbang parkir cerdas, latensi 0,5 detik masih sangat dapat diterima (acceptable), sementara keuntungan pembacaan nopol utuh (66,40%) mencegah salah tilang yang berimplikasi pada sengketa hukum.
6. Refleksi Pedagogis: Apa yang Bisa Dipetik? #
Pelajaran Penting untuk Praktisi Computer Vision:
- Jangan Perlakukan OCR sebagai Kotak Hitam: Model OCR umum tidak tahu hukum nopol setempat. Menambahkan lapisan penalaran berbasis aturan (domain-specific syntax constraints) sering kali memberikan lonjakan akurasi yang lebih murah daripada fine-tuning model deep learning raksasa.
- Hati-hati dengan Regex Buta: Selalu lengkapi modul post-processing teks dengan mekanisme safety guard non-destruktif agar koreksi kesalahan tidak berbalik menjadi perusakan data yang sudah benar.
- Pentingnya Benchmark Komparatif Mandiri: Klaim kebaruan ilmiah harus dibuktikan berdampingan pada dataset terstandarisasi yang sama persis, bukan sekadar membandingkan angka akurasi lintas paper dengan dataset yang berbeda.
Referensi Terpilih #
- Firin, A. S., & Sriani, S. (2025). Analisis Algoritma Canny Edge Detection dengan Tesseract OCR untuk Mendeteksi Pelat Nomor Kendaraan Bermotor. Euler: Jurnal Ilmiah Matematika, Sains dan Teknologi, 13(3), 381–393.
- Kepolisian Negara Republik Indonesia. (2021). Peraturan Kepolisian Negara Republik Indonesia Nomor 7 Tahun 2021 tentang Registrasi dan Identifikasi Kendaraan Bermotor. Jakarta: Korlantas Polri.
- Wang, Z., Liu, J., & Chen, Y. (2022). Adaptive Multi-Scale Contrast Enhancement for License Plate Recognition Under Adverse Illumination. IEEE Access, 10, 45120–45132.
- Zhang, H., Zhao, W., & Ding, L. (2023). Syntax-Guided Character Disambiguation using Finite-State Transition Networks in Scene Text Recognition. Pattern Recognition Letters, 168, 88–95.
- Hopcroft, J. E., Motwani, R., & Ullman, J. D. (2006). Introduction to Automata Theory, Languages, and Computation (3rd ed.). Addison-Wesley.