Vehicle Analytics (MVA/MVAA)
Analitik kendaraan real-time dengan counting, ROI counting, dwelling, density, dan klasifikasi atribut (warna, tipe, merek) untuk berbagai skenario traffic dan parkir.
Vehicle Analytics (MVA/MVAA)
Vehicle Analytics adalah analitik real-time untuk mendeteksi dan menganalisis kendaraan dalam video stream. Tersedia dalam dua varian: MVA (Multi-Logics Vehicle Analytics) untuk counting, dwelling, dan density, serta MVAA yang menambahkan klasifikasi atribut seperti warna, tipe, dan merek kendaraan.
Pada akhir halaman ini Anda akan memahami kemampuan Vehicle Analytics, cara kerjanya, dan cara mengonfigurasinya untuk skenario Anda. Untuk referensi endpoint API lengkap, lihat API Reference.
Apa yang Dilakukan
Kemampuan (Yang Dilakukan)
Vehicle Analytics mendeteksi empat jenis kendaraan — car, motorcycle, bus, dan truck — dan memproses setiap deteksi melalui empat sub-analitik secara paralel:
| Sub-Analitik | Deskripsi | Contoh Penggunaan |
|---|---|---|
| Counting | Menghitung kendaraan yang melewati garis virtual | Hitung kendaraan masuk/keluar parkir per lane |
| ROI Counting | Menghitung kendaraan masuk/keluar area polygon | Monitor zona drop-off atau loading bay |
| Dwelling | Mendeteksi kendaraan yang berhenti di area tertentu | Alert parkir ilegal, monitor loading bay overtime |
| Density | Estimasi jumlah kendaraan dalam area secara periodik | Real-time occupancy parkir, kepadatan traffic |
Varian MVAA menambahkan klasifikasi atribut per kendaraan:
| Atribut | Nilai yang Didukung | Catatan |
|---|---|---|
| Warna | black, white, gray, silver, red, blue, yellow, orange, brown, green, maroon, golden, purple, other | Warna dominan body kendaraan |
| Tipe | SUV, MPV, wagon, hatchback, sedan, pickup, convertible, van, truck, other | Untuk label bus dan truck di-override otomatis ke bus/truck; untuk motorcycle field type tidak dikirim |
| Merek | Toyota, Honda, Mercedes-Benz, BMW, Suzuki, Daihatsu, Mitsubishi, Nissan, Hyundai, Mazda, Wuling, Lexus, MINI, Land Rover, Porsche, Ford, Volkswagen, Chevrolet, KIA, Jeep, Chery, Isuzu, MG, Audi, other | Dinonaktifkan secara default; untuk motorcycle field brand tidak dikirim |
Apabila confidence atribut di bawah threshold yang dikonfigurasi, label akan menjadi unknown.
Yang TIDAK Dilakukan
- Vehicle Analytics tidak mendeteksi pejalan kaki — label
pedestrianotomatis diabaikan. Gunakan People Analytics untuk deteksi orang. - Vehicle Analytics tidak membaca nomor plat kendaraan. Gunakan License Plate Recognition untuk pembacaan plat.
- Untuk motorcycle, atribut
typedanbrandtidak tersedia — hanyacoloryang dideteksi.
Use Cases
Parkir & Occupancy Monitoring
Real-time occupancy per zona menggunakan Density + ROI Counting. Kombinasikan dengan MVAA untuk identifikasi kendaraan tanpa LPR.
Traffic Flow & Volume Counting
Hitung volume kendaraan per lane di jalan raya atau persimpangan menggunakan Counting logic dengan multi-line.
Toll Gate Classification
Counting per gate dengan klasifikasi tipe kendaraan (MVAA) untuk penerapan tarif diferensial.
Deteksi Parkir Ilegal
Alert otomatis saat kendaraan berhenti lebih dari durasi yang dikonfigurasi di zona terlarang menggunakan Dwelling logic.
Loading Bay Management
Monitor durasi kendaraan di area bongkar-muat dan kirim notifikasi jika melebihi batas waktu operasional.
Cara Kerja
Video stream masuk dan diproses frame per frame pada 12 FPS. Setiap frame dianalisis oleh detektor kendaraan yang menghasilkan bounding box beserta confidence score dan label kelas. Deteksi pedestrian langsung dibuang, sedangkan deteksi kendaraan diteruskan ke tracker untuk mempertahankan identitas objek lintas frame.
Pada varian MVAA, setiap kendaraan yang di-track dikirim ke tahap klasifikasi atribut yang mengekstrak warna, tipe, dan merek dari area crop kendaraan. Hasil deteksi dan atribut kemudian diproses oleh keempat sub-analitik secara paralel, dan event yang dihasilkan dikirim ke event bus untuk dikonsumsi oleh sistem hilir.
Persyaratan
Persyaratan Kamera
| Aspek | Minimum | Rekomendasi |
|---|---|---|
| Resolusi | 480 × 360 (480p) | 1280 × 720 (720p) atau lebih tinggi |
| Frame Rate | 12 FPS | 15–30 FPS |
| Codec | H.264 | H.264 / H.265 |
| Sudut pemasangan | 15° dari horizontal | 20°–45° dari horizontal |
| Tinggi pemasangan | 3 meter | 4–6 meter |
| Field of View | Mencakup seluruh jalur | Tanpa blind spot pada area target |
Persyaratan Lingkungan
| Kondisi | Keterangan |
|---|---|
| Pencahayaan | Pencahayaan merata; hindari backlight atau bayangan besar langsung pada kendaraan |
| Malam hari | Kamera IR atau dengan cahaya lampu jalan yang cukup. Akurasi atribut warna menurun pada kondisi gelap. |
| Cuaca buruk | Hujan lebat atau kabut pekat dapat menurunkan akurasi deteksi; turunkan object_confidence_threshold |
Dependensi
- Visionaire API berjalan dan dapat diakses pada
VISIONAIRE_API_URL(defaulthttp://localhost:4004) - Stream video aktif dan dapat diakses oleh Visionaire sebelum pipeline dibuat
- Lisensi
NFV4-MVAatauNFV4-MVAAtersedia (seat tidak penuh)
Setting Up
Pilih Varian Analitik
Tentukan apakah Anda membutuhkan atribut kendaraan:
- NFV4-MVA — counting, dwelling, density tanpa atribut. Lebih ringan di GPU (~16–20%).
- NFV4-MVAA — semua fitur MVA ditambah klasifikasi warna, tipe, dan merek (~19–23% GPU).
Gunakan MVAA hanya jika informasi atribut dibutuhkan oleh sistem hilir Anda.
Tentukan Sub-Analitik yang Aktif
Aktifkan hanya sub-analitik yang diperlukan untuk meminimalkan overhead pemrosesan. Setiap sub-analitik memiliki konfigurasi independen:
| Sub-Analitik | Kapan Diaktifkan |
|---|---|
counting | Perlu data masuk/keluar per garis |
roi_counting | Perlu data masuk/keluar per zona polygon |
dwelling | Perlu alert kendaraan berhenti terlalu lama |
density | Perlu laporan kepadatan periodik |
Konfigurasi Garis dan Zona
Untuk counting, definisikan garis virtual menggunakan koordinat ternormalisasi (0–1 relatif terhadap dimensi frame). Letakkan garis di area dengan traffic flow lancar, bukan di dekat lampu merah atau area perlambatan.
Untuk ROI counting, dwelling, dan density, definisikan polygon zona. Gunakan minimal 3 titik per zona.
Semua koordinat dalam format [[x1, y1], [x2, y2]] untuk garis dan [[x1,y1], [x2,y2], ...] untuk polygon, di mana 0,0 adalah pojok kiri atas dan 1,1 adalah pojok kanan bawah frame.
Buat Pipeline via API
Kirim POST /pipeline/{node_num}/{stream_id}/{analytic_id} dengan request body berisi konfigurasi lengkap. Lihat API Reference untuk contoh request body.
Pipeline mulai memproses segera setelah respons 200 diterima.
Verifikasi dengan Snapshot atau MJPEG
Gunakan endpoint /snapshot atau /mjpeg untuk memverifikasi bahwa garis counting dan zona ROI sudah berada di posisi yang tepat sebelum pipeline digunakan secara penuh.
Konfigurasi
Parameter API
Parameter Global
| Parameter | Tipe | Default | Kapan Disesuaikan |
|---|---|---|---|
object_confidence_threshold | float | 0.4 | Naikkan (0.5–0.6) untuk mengurangi false positive; turunkan (0.25–0.35) untuk menangkap motor kecil atau kondisi cuaca buruk |
colordet_crop_w | float | 0.8 | Turunkan jika terdapat noise pada tepi kendaraan mempengaruhi deteksi warna |
colordet_crop_h | float | 0.8 | Turunkan jika bagian atas/bawah kendaraan mengganggu klasifikasi warna |
Counting Logic
| Parameter | Tipe | Default | Kapan Disesuaikan |
|---|---|---|---|
dumping_sampling_time | int (ms) | 1000 | Turunkan (500–800) untuk kendaraan cepat di highway; naikkan (2000–3000) untuk toll gate |
dump_ignore_iou_threshold | float | 0.2 | Naikkan (0.3–0.5) jika terjadi double counting pada kendaraan lambat |
enable_group_tracking | bool | false | Aktifkan untuk traffic padat dengan banyak motor berkelompok |
maximum_tracking_objects | int | 30 | Naikkan (50–100) untuk jalan padat; turunkan (15–20) untuk menghemat memori |
minimum_tracking_height | float | 0.05 | Turunkan untuk mendeteksi kendaraan yang jauh dari kamera |
Konfigurasi garis (field areas di dalam logic counting):
| Setting | Apa yang Dilakukan | Default |
|---|---|---|
name | Nama tampilan garis | — |
points | Dua titik garis [{"x":x1,"y":y1},{"x":x2,"y":y2}] dalam koordinat normalized 0–1 | — |
direction | "in", "out", atau "both" | "both" |
bidirection | true jika menghitung kedua arah | true |
Untuk roi_counting, dwelling, dan density, gunakan areas berisi polygon (points minimal 3 titik dengan format {x, y}).
Dwelling Logic
| Parameter | Tipe | Default | Kapan Disesuaikan |
|---|---|---|---|
dwelling_treshold_alert_sec | int (detik) | 0 | Set durasi alert (misal 60 untuk parkir ilegal >1 menit, 0 = nonaktifkan alert) |
minimum_dwelling_sec | int (detik) | 2 | Naikkan untuk mengurangi noise event dari kendaraan yang sekadar melambat |
idle_time_sec | int (detik) | 1 | Naikkan (10–30) jika kendaraan sering hilang sesaat dari deteksi (occlusion singkat) |
object_intersect_threshold | float | 0.85 | Turunkan ke 0.7 jika kendaraan di tepi ROI tidak terdeteksi |
minimum_object_area_size | int (piksel²) | 5000 | Turunkan untuk kendaraan yang lebih kecil/jauh dari kamera |
Penulisan dwelling_treshold_alert_sec dengan typo (treshold bukan threshold) sesuai dengan kunci konfigurasi yang diterima oleh source code.
Density Logic
| Parameter | Tipe | Default | Kapan Disesuaikan |
|---|---|---|---|
interval | int (detik) | 10 | Naikkan (30–120) untuk mengurangi volume event; turunkan untuk update lebih sering |
inside | bool | true | Set false untuk menghitung kendaraan di luar ROI |
dump_attributes | bool | true | Set false jika rincian atribut per objek tidak diperlukan pada laporan density (lebih ringan) |
Atribut MVAA
Konfigurasi atribut diletakkan di dalam field attributes pada masing-masing sub-analytic.
| Parameter | Tipe | Default | Kapan Disesuaikan |
|---|---|---|---|
color | bool | true | Set false untuk menghemat resource jika warna tidak diperlukan |
color_confidence_threshold | float | 0.4 | Naikkan (0.5–0.6) jika warna sering salah; pertimbangkan pencahayaan |
type | bool | true | Set false untuk menghemat resource jika tipe tidak diperlukan |
type_confidence_threshold | float | 0.4 | Naikkan (0.5–0.6) untuk toll gate dengan tarif diferensial |
brand | bool | false | Aktifkan hanya jika resolusi kamera memadai (kendaraan minimal 100×100 px) |
brand_confidence_threshold | float | 0.3 | Sesuaikan setelah mengaktifkan brand detection |
Output yang Dihasilkan
Setiap event memiliki struktur top-level berikut, dengan detail spesifik logic berada di field pipeline_data. Setiap event mewakili satu hasil sub-analytic — bukan array deteksi.
| Field Top-Level | Tipe | Deskripsi |
|---|---|---|
analytic_id | string | NFV4-MVA atau NFV4-MVAA |
stream_id | string | ID stream yang menghasilkan event |
stream_name | string | Nama stream |
node_num | integer | Nomor node yang memproses |
timestamp | integer (ms) | Unix timestamp event |
primary_text | string | Teks utama (mis. label kendaraan atau nama area) |
secondary_text | string | Teks pelengkap (mis. arah, durasi, jumlah) |
image_jpeg | string (base64) | Cuplikan frame saat event |
pipeline_data | object | Payload utama (lihat di bawah) |
Field pipeline_data per Logic
| Field | Tipe | Tersedia Pada |
|---|---|---|
logic | string | semua |
label | string | counting, roi_counting, dwelling (car/motorcycle/bus/truck) |
confidence | float | counting, roi_counting, dwelling |
tracker_id | integer | counting, roi_counting, dwelling |
group_id | integer | counting, roi_counting, dwelling |
area_name | string | counting, roi_counting, dwelling |
direction | string | counting, roi_counting |
time_in / time_out / time_alert | integer (ms) | dwelling |
duration | float (detik) | dwelling |
attributes | object | semua varian; lebih lengkap di MVAA (color/type/brand) |
area | string | density (nama ROI) |
estimation | integer | density (jumlah kendaraan dalam ROI) |
interval | integer (detik) | density |
detected | array | density (rincian per kendaraan dengan tracker_id, bbox, label, confidence, dan attributes saat MVAA + dump_attributes: true) |
event_id | string | semua |
Contoh Event
{
"analytic_id": "NFV4-MVA",
"stream_id": "stream_001",
"timestamp": 1705314600000,
"primary_text": "car",
"secondary_text": "in",
"pipeline_data": {
"logic": "counting",
"label": "car",
"confidence": 0.88,
"tracker_id": 12,
"group_id": 0,
"area_name": "Gate A",
"direction": "in",
"attributes": {
"vehicle": { "label": "car", "confidence": 0.88 }
},
"event_id": "1705314600000-3a1f9d4c"
}
}{
"analytic_id": "NFV4-MVAA",
"stream_id": "stream_001",
"timestamp": 1705314600000,
"primary_text": "car",
"secondary_text": "in",
"pipeline_data": {
"logic": "counting",
"label": "car",
"confidence": 0.88,
"tracker_id": 12,
"area_name": "Gate A",
"direction": "in",
"attributes": {
"vehicle": { "label": "car", "confidence": 0.88 },
"color": { "label": "white", "confidence": 0.91 },
"type": { "label": "SUV", "confidence": 0.85 },
"brand": { "label": "Toyota","confidence": 0.72 }
}
}
}{
"analytic_id": "NFV4-MVA",
"stream_id": "stream_001",
"timestamp": 1705314600000,
"primary_text": "No Parking Zone",
"secondary_text": "180.000 s",
"pipeline_data": {
"logic": "dwelling",
"label": "truck",
"confidence": 0.78,
"tracker_id": 5,
"area_name": "No Parking Zone",
"time_in": 1705314420000,
"time_out": null,
"time_alert": 1705314480000,
"duration": 180.0,
"attributes": {
"vehicle": { "label": "truck", "confidence": 0.78 },
"from": { "label": "", "confidence": 0 },
"to": { "label": "", "confidence": 0 }
}
}
}{
"analytic_id": "NFV4-MVA",
"stream_id": "stream_001",
"timestamp": 1705314600000,
"primary_text": "Parking Lot",
"secondary_text": "45",
"pipeline_data": {
"logic": "density",
"interval": 10,
"area": "Parking Lot",
"estimation": 45,
"detected": [
{
"tracker_id": 11,
"label": "car",
"confidence": 0.84,
"bbox": { "top": 220, "left": 310, "width": 180, "height": 120 }
}
]
}
}Best Practices
Penempatan Kamera
| Skenario | Sudut | Tinggi | Catatan |
|---|---|---|---|
| Jalan raya / highway | 20°–35° | 5–8 meter | Posisi agak menyamping terhadap arah traffic; shutter speed tinggi untuk motion blur |
| Parkir / area terbuka | 30°–45° | 3–5 meter | Pastikan seluruh area target masuk frame |
| Persimpangan | 25°–40° | 4–6 meter | Hindari posisi menghadap langsung lampu kendaraan |
| Toll gate | 20°–30° | 3–4 meter | Satu kamera per lane untuk akurasi tertinggi |
Konfigurasi Garis Counting
- Letakkan garis di area dengan flow lancar, bukan di dekat lampu merah atau area antrean
- Untuk toll gate, gunakan
dumping_sampling_time: 2000karena kendaraan bergerak lambat - Hindari garis yang terlalu pendek; pastikan seluruh lebar jalur tercakup
- Test konfigurasi dengan berbagai jenis kendaraan (motor, truk) sebelum go-live
Konfigurasi Zona (ROI/Dwelling/Density)
- Zona dwelling sebaiknya mengecualikan area keluar-masuk agar kendaraan yang sekadar melintas tidak memicu event
- Untuk parking occupancy, definisikan zona per area (bukan satu zona besar) untuk granularitas yang lebih baik
- Set
idle_time_secsesuai dengan pola traffic — area dengan occlusion tinggi perlu nilai lebih besar
Limitations
- Occlusion traffic padat — pada kondisi kendaraan yang sangat berdekatan atau bertumpuk, beberapa kendaraan mungkin tidak terdeteksi atau tracker kehilangan ID
- Malam tanpa inframerah — akurasi deteksi menurun signifikan pada kondisi sangat gelap tanpa pencahayaan buatan atau kamera IR
- Sudut ekstrem (top-down) — sudut kamera mendekati 90° (langsung ke bawah) mengurangi akurasi deteksi tipe kendaraan; sudut 20°–45° optimal
- Kecepatan sangat tinggi — kendaraan bergerak lebih cepat dari ~120 km/jam pada jarak jauh dapat menyebabkan motion blur yang mengurangi akurasi
- Warna kendaraan gelap di malam hari — klasifikasi warna (MVAA) dapat kurang akurat pada kondisi pencahayaan rendah atau kendaraan kotor
- Motorcycle — atribut
typedanbrandtidak tersedia untuk label motorcycle
Modul Terkait
API Reference — People Analytics
Endpoint REST API untuk membuat, mengelola, dan memantau pipeline People Analytics (MPA/MPAA).
API Reference — Vehicle Analytics
Referensi endpoint REST API untuk pipeline Vehicle Analytics (MVA/MVAA) — spawn, status, update konfigurasi, hapus, MJPEG stream, dan snapshot.