Nodeflux Central
License Plate Recognition (LPR)

Varian & Cara Kerja

Empat varian pipeline License Plate Recognition, perbedaan arsitektur single-stage vs two-stage, dan alur pemrosesan dari frame video sampai event.

Visionaire4 menyediakan empat varian LPR yang teregistrasi: NFV4-LPR2, NFV4-LPRS, NFV4-LPR3, NFV4-LPR3S. Pilih berdasarkan kebutuhan klasifikasi plat dan volume kendaraan.

Tabel Varian

Analytic IDNamaArsitekturKlasifikasi PlatDirectionUse case singkat
NFV4-LPR2License Plate Recognition 2Single-stage — deteksi kendaraan + plat dalam satu inferensi, hasil OCR dikelompokkan (grouping)Sipil (plate) sajaup / down / noneParkir, access control umum
NFV4-LPRSLPR with Special Multi ClassesSingle-stage, sama seperti LPR2Sipil, pemerintah, militer, diplomatikup / down / noneGedung pemerintah/militer, checkpoint
NFV4-LPR3License Plate Recognition 3Two-stage — deteksi kendaraan tiap frame, deteksi plat di-throttle, per-kendaraan di-track individualSipil (plate) sajaSelalu unknownToll gate, highway, volume tinggi
NFV4-LPR3SLPR3 with Special Multi ClassesTwo-stage, sama seperti LPR3Sipil, pemerintah, militer, diplomatikSelalu unknownTraffic analytics multi-class volume tinggi

Tidak ada varian bernama NFV4-LPR polos

Hanya empat ID di atas yang teregistrasi sebagai pipeline (register_package_lpr dan register_package_lpr_exp pada src/packages/lpr/lpr.cpp dan lpr3.cpp). String NFV4-LPR memang muncul di whitelist internal VERBOSE_CONFIG_AID pada src/http_server.cpp, tetapi tidak pernah didaftarkan sebagai pipeline yang bisa di-spawn — jangan gunakan ID tersebut.


Single-stage vs Two-stage

Single-stage (NFV4-LPR2, NFV4-LPRS)

Setiap frame diturunkan resolusinya ke 416×224 lalu diproses satu kali oleh model deteksi yang mengenali kendaraan dan plat sekaligus. Hasil deteksi plat dari beberapa frame dikumpulkan ke dalam grup berdasarkan kemiripan teks (Levenshtein distance) dan posisi kendaraan; grup di-dump menjadi satu event ketika sudah memiliki cukup anggota (min_group_member) atau tidak menerima anggota baru selama beberapa frame (no_input_period_threshold). Pendekatan ini toleran terhadap noise OCR sesaat pada frame individual.

Two-stage (NFV4-LPR3, NFV4-LPR3S)

Deteksi kendaraan (model terpisah) berjalan pada setiap frame yang diturunkan ke 416×224, sedangkan deteksi plat berjalan pada crop per-kendaraan dan di-throttle ke plate_recognition_fps (default 4 FPS) — bukan pada frame penuh, sehingga plat tetap punya resolusi efektif lebih besar dibanding pendekatan single-stage. Setiap kendaraan ditrack secara individual; begitu confidence OCR karakter mencapai ambang tinggi (0.95, nilai tetap) hasil langsung di-output, sedangkan hasil dengan confidence 0.85–0.95 dibuffer sampai kendaraan keluar dari frame sebelum dipilih sampel terbaiknya. Pendekatan ini lebih efisien untuk volume kendaraan tinggi karena tidak menunggu proses grouping multi-frame.

Cara Kerja

Video Stream Deteksi Kendaraan& Plat OCR Karakter Plat Grouping / Bufferper Kendaraan Cache Dedupplate_cache_lifetime Event Output

Detail yang membedakan tiap kotak di atas antar varian dijelaskan pada bagian "Single-stage vs Two-stage". Model OCR karakter (cct_s_char_recognition) sama untuk keempat varian.

Direction Bukan In/Out

Field direction pada event bukan hasil logika "melintasi garis masuk/keluar". Untuk NFV4-LPR2/NFV4-LPRS, nilainya dihitung murni dari perpindahan vertikal (sumbu Y) titik tengah plat antar sampel dalam satu grup (src/packages/lpr/handler/platesample_group.hpp, fungsi get_direction()):

  • down — plat bergerak turun (menjauh secara vertikal ke bawah frame) melebihi ambang pergerakan minimum.
  • up — plat bergerak naik.
  • none — riwayat sampel kurang dari 2 titik, pergerakan terlalu kecil, atau pergerakan dominan horizontal.

Untuk NFV4-LPR3/NFV4-LPR3S, direction selalu bernilai string "unknown" — di-hardcode, tidak dihitung sama sekali.

Field entry_lines/exit_lines yang bisa dikirim di dalam definisi areas diterima tanpa efek: helper parsing ROI umum Visionaire (src/handler/helper/payload.hpp) mengisi struktur line_area dari field tersebut, tetapi kode LPR (src/packages/lpr/lpr.cpp, lpr3.cpp) tidak pernah membaca line_area — tidak ada garis virtual yang benar-benar difungsikan untuk LPR.

Jika kebutuhan Anda adalah logika "kendaraan masuk vs keluar" yang presisi (mis. dua gerbang terpisah), gunakan dua area ROI terpisah (satu untuk jalur masuk, satu untuk jalur keluar) dan bedakan berdasarkan area_name pada event — bukan berdasarkan direction.

Memilih Varian

  • Plat sipil standar, volume kendaraan normal (parkir, gerbang gedung) → NFV4-LPR2
  • Campuran plat sipil + pemerintah/militer/diplomatik, butuh klasifikasi → NFV4-LPRS
  • Volume kendaraan tinggi, latensi rendah, tanpa kebutuhan klasifikasi (toll, highway) → NFV4-LPR3
  • Volume kendaraan tinggi dengan klasifikasi multi-class → NFV4-LPR3S

Setelah varian ditentukan, lanjutkan ke Persyaratan.

On this page