Analisis Object Detection, Classification, dan LPR pada Sistem AI Kendaraan
Sistem AI berbasis computer vision kini menjadi tulang punggung manajemen lalu lintas pelabuhan modern. Artikel ini membahas secara teknis bagaimana object detection, vehicle classification, dan License Plate Recognition (LPR) bekerja bersama dalam satu pipeline — berdasarkan studi kasus implementasi nyata di sebuah operator pelabuhan penyeberangan dengan volume kendaraan tinggi.
Latar Belakang
Sebuah operator pelabuhan penyeberangan membutuhkan sistem yang mampu:
- Menghitung kendaraan yang melewati tollgate dan dermaga secara otomatis
- Mengklasifikasikan kendaraan ke dalam 12 golongan sesuai standar operasional
- Membaca nomor plat (License Plate Number) setiap kendaraan yang tercounting
- Mengintegrasikan data hasil AI ke sistem Business Intelligence (BI) yang sudah berjalan
Tantangan utamanya adalah bagaimana ketiga fungsi ini — detection, classification, dan LPR — dapat berjalan bersamaan secara akurat dan real-time pada satu gerbang/dermaga, dengan kondisi lingkungan yang dinamis sepanjang hari.
Arsitektur Pipeline AI
Sistem ini menggunakan dua kamera CCTV secara paralel di setiap titik pantau:
Alur Proses (Flowchart)
Kedua stream kamera berjalan secara paralel menuju satu pipeline terpadu:
flowchart TD
A["CCTV Classification 25 FPS RTSP"] --> B["AI Object Detection & Classification"]
C["CCTV LPR 10 FPS RTSP"] --> D["AI LPR Engine"]
B --> E[("AI Database")]
D --> E
E --> F["Voting Logic"]
F --> G["Backend Data Center"]
G --> H["Dashboard & Reporting"]
Sequence: Proses Live Streaming & Deteksi AI
Alur end-to-end dari sisi operator — mulai buka streaming, start deteksi, sinkronisasi data, hingga akses laporan:
sequenceDiagram
autonumber
participant User as Operator
participant FE as Frontend Dashboard
participant Backend as Backend Data Center
participant Redis as Redis Broker
participant AI as Sistem AI On-Premise
note over User, AI: Start Streaming Video
User ->> FE: Akses live monitoring kamera
FE -x Redis: publish start streaming RTSP
AI -x Redis: subscribe start streaming RTSP
AI ->> AI: Buka koneksi RTSP
AI -x Redis: publish frame video
FE -x Redis: subscribe frame video
note over User, AI: Start Deteksi AI
User ->> FE: Klik Start Deteksi AI
par Log ke Backend
FE ->> Backend: Event start AI
Backend ->> Backend: Simpan log ke BatchReportHeader
Backend ->> FE: Started
and Streaming AI dari On-Premise
FE -x Redis: publish start streaming AI
AI -x Redis: subscribe start streaming AI
AI -->> AI: Inference object detection dan classification
AI -->> AI: Inference LPR
AI -->> AI: Deteksi object ID melewati garis
AI -->> AI: Voting logic dan simpan ke DB
AI -x Redis: publish frame hasil deteksi
FE -x Redis: subscribe frame hasil deteksi
end
note over User, AI: Sinkronisasi ke Data Center
AI -x Backend: Kirim data LPR + classification
Backend -->> Backend: Catat ke VehicleLogs
AI -x Backend: Kirim event crowded / stop crowded
Backend -->> Backend: Flag status crowded pada batch
note over User, AI: Stop Deteksi AI
User ->> FE: Klik Stop Deteksi
par Log stop ke Backend
FE ->> Backend: Event stop AI
Backend ->> Backend: Update log end ke BatchReportHeader
Backend ->> FE: Stopped
and Stop stream dari On-Premise
FE -x Redis: publish stop streaming RTSP
AI -x Redis: subscribe stop streaming RTSP
end
note over User, AI: Akses Laporan
User ->> Backend: Akses batch report filter shift atau tanggal
Backend -->> Backend: Agregasi data VehicleLogs
opt Integrasi e-ticketing aktif
Backend -->> Backend: Cross-validate dengan data tiket resmi
end
Backend -->> User: Kirim laporan shift atau periode
Sequence: Dual-Camera — Classification & LPR Paralel
Detail proses inference dari dua kamera yang berjalan bersamaan beserta voting logic dan deteksi crowded:
sequenceDiagram
autonumber
participant cctvClass as CCTV Classification
participant cctvLPR as CCTV LPR
participant AICount as AI Object Detection & Classification
participant AILPR as AI LPR Engine
participant AIDB as AI Database
participant voting as Voting Logic
participant Backend as Backend Data Center
note over cctvClass, Backend: Dua CCTV berjalan paralel
par Stream Classification
cctvClass ->>+ AICount: Stream RTSP 25 FPS
loop Inference Loop
AICount ->> AICount: Inference frame
alt Objek terdeteksi
AICount ->> AICount: Assign object ID
AICount ->> AICount: Klasifikasi golongan kendaraan
AICount ->> AICount: Deteksi object ID menyentuh garis
AICount ->>- AIDB: Log timestamp, object_id, classification
end
end
and Stream LPR
cctvLPR ->>+ AILPR: Stream RTSP 10 FPS
loop Inference Loop
AILPR ->> AILPR: Inference frame
alt Objek terdeteksi
AILPR ->> AILPR: Assign object ID
AILPR ->> AILPR: Deteksi object ID menyentuh garis
AILPR ->> AILPR: License Plate Recognition
AILPR ->>- AIDB: Log timestamp, object_id, license_plate
end
end
end
note over cctvClass, Backend: Voting Logic
AIDB ->>+ voting: Data counting object_id + classification
voting ->> voting: Assign ticket ID ke kendaraan
AIDB ->> voting: Data LPR object_id + license_plate
voting ->> voting: Susun voting list per ticket
voting ->> voting: Hitung frekuensi unique plate
alt Plate dengan voting tertinggi >= minimum threshold
voting ->> voting: Set final license plate
voting ->>- AIDB: Assign ticket ID yang sama ke LPR record
else Tidak memenuhi threshold
voting ->> AIDB: Tandai sebagai unresolved
end
AIDB ->> Backend: Kirim data deteksi via queue dan live counting
note over cctvClass, Backend: Deteksi Crowded
alt Jumlah objek melebihi threshold dalam rentang waktu tertentu
AIDB ->>+ Backend: Kirim event crowded
else Normal
AIDB ->>+ Backend: Kirim event stop crowded
end
Object Detection & Vehicle Classification
Cara Kerja
Pada stream CCTV Classification, AI melakukan:
- Inference Image Stream — setiap frame dianalisis untuk mendeteksi objek kendaraan
- Assign Object ID — setiap kendaraan diberi ID unik menggunakan teknik robust data association untuk mitigasi ID collision
- Vehicle Classification — kendaraan diklasifikasikan ke 12 golongan berdasarkan fitur visual
- Line Crossing Detection — sistem mendeteksi apakah object ID telah menyentuh atau melewati garis counting
- Log ke Database — data
timestamp,object_id, danclassificationdisimpan ke AI Database on-premise
Tantangan Klasifikasi 12 Golongan
Klasifikasi kendaraan menjadi kompleks karena:
- Variasi visual yang tinggi antar golongan (motor, mobil pribadi, truk, bus, alat berat, dll.)
- Kondisi lingkungan — pencahayaan yang berubah sepanjang hari, hujan, kabut
- Crowded scenario — saat peak season, banyak kendaraan bertumpuk sehingga akurasi model bisa turun
License Plate Recognition (LPR)
Cara Kerja
Pada stream CCTV LPR yang berjalan paralel:
- Inference stream 10 FPS — lebih rendah dari CCTV classification karena LPR butuh gambar lebih statis
- Assign Object ID — kendaraan juga diberi ID untuk keperluan pencocokan data
- Line Crossing Detection — mendeteksi kendaraan menyentuh garis
- OCR / LPR inference — membaca karakter plat nomor
- Log ke AI Database — data disimpan dengan
timestamp,object_id, dan hasil bacaan plat
Faktor yang Memengaruhi Akurasi LPR
- Kondisi plat — plat rusak, kotor, atau mengelupas
- Sudut kamera — angle yang tidak ideal menurunkan akurasi OCR
- Kecepatan kendaraan — kendaraan yang terlalu cepat berpotensi menghasilkan motion blur
- Variasi font & format plat — plat daerah memiliki format berbeda
Voting Logic: Mencocokkan Classification & LPR
Ini adalah komponen kunci yang membedakan sistem ini dari implementasi biasa. Karena object detection dan LPR berjalan di dua pipeline terpisah, diperlukan mekanisme voting logic untuk menggabungkan hasilnya.
Alur Voting Logic
flowchart TD
A["AI DB: Data dari Counting<br>object_id + classification"] --> B["Voting Engine"]
C["AI DB: Data dari LPR<br>object_id + license_plate"] --> B
B --> D["Assign ticket ke setiap kendaraan"]
D --> E["Kumpulkan kandidat plat per ticket"]
E --> F["Hitung frekuensi unik plat"]
F --> G{"Plat dengan frekuensi tinggi >= minimum voting?"}
G -- Ya --> H["Set final license plate"]
G -- Tidak --> I["Tandai sebagai unresolved"]
H --> J["Simpan ke AI DB & kirim ke Backend"]
Logika Detail
- Setiap kendaraan dari stream counting mendapatkan ticket ID
- Data LPR dengan object ID yang sama dimasukkan ke dalam voting list
- Sistem menghitung unique plate dan frekuensinya
- Jika plat dengan jumlah voting tertinggi memenuhi minimum voting threshold → ditetapkan sebagai plat final
- Ticket ID yang sama diberikan ke data LPR car → data tergabung
Arsitektur Sistem Terintegrasi
Stack Teknologi
Integrasi dengan Sistem Tiket Eksternal
Sistem AI tidak berdiri sendiri. Hasil deteksi diintegrasikan dengan sistem e-ticketing operator yang sudah ada melalui:
- Webhook asynchronous — sistem e-ticketing mengirim data shift, trip, boarding transaction, dan check-in transaction ke backend AI secara real-time
- Batch reporting — laporan per-shift yang membandingkan data hasil counting AI vs data tiket resmi
- REST API — untuk kontrol start/stop counting, live streaming, dan query laporan
Pola integrasi ini memastikan data AI dan data tiket bisa diverifikasi silang (cross-validation), sehingga laporan akhir lebih akurat dan dapat dipertanggungjawabkan.
Akurasi dan Ekspektasi Realistis
Berdasarkan hasil Proof of Concept (PoC) yang dilakukan pada kondisi lapangan nyata:
- Tingkat akurasi counting kendaraan berkisar antara 94% hingga 100%
- Akurasi dipengaruhi oleh kondisi lingkungan dan konfigurasi kamera
Mengapa AI Tidak Bisa 100% Akurat?
Penting untuk dipahami bahwa model AI bersifat probabilistik, bukan deterministik:
- Model dilatih pada dataset tertentu — variasi dunia nyata selalu ada
- Faktor eksternal (cahaya, cuaca, kondisi plat) tidak bisa sepenuhnya dikontrol
- Trade-off antara kecepatan inferensi dan akurasi
Strategi mitigasi yang digunakan:
- Voting logic untuk LPR — mengurangi error dari frame tunggal
- Crowded detection — flagging otomatis saat kondisi tidak ideal
- Continuous retraining — model diperbarui dengan data lapangan secara berkala
- Dual-camera setup — memisahkan tugas classification dan LPR untuk optimasi masing-masing
Kesimpulan
Kombinasi object detection, vehicle classification, dan LPR dalam satu sistem yang terintegrasi membutuhkan desain arsitektur yang matang. Kunci keberhasilan implementasi ini adalah:
- Pemisahan pipeline antara classification dan LPR untuk optimasi performa masing-masing model
- Voting logic sebagai jembatan data dari dua pipeline berbeda
- Integrasi sistem yang fleksibel menggunakan REST API + webhook
- Ekspektasi realistis terhadap akurasi AI yang dikomunikasikan dengan baik ke stakeholder
Sistem seperti ini tidak hanya relevan untuk pelabuhan penyeberangan, tetapi juga applicable untuk tollgate, parkir otomatis, border crossing, dan manajemen lalu lintas skala besar lainnya.