Snapshot Detection
Event-driven detection analytics (fire, smoking, fighting, dll.) berbasis Snapshot Dispatcher Visionaire 4.
Snapshot Detection
Snapshot Detection adalah keluarga analitik event-driven di Visionaire yang menjalankan deteksi berbasis Snapshot — bukan tracking per Frame. Modul ini bertindak sebagai dispatcher yang mengambil Frame dari Stream pada interval tertentu, mengirimkannya ke Snapshot API yang sesuai (deteksi objek, klasifikasi, atau VLM), lalu menerbitkan event hanya bila kejadian target benar-benar terdeteksi.
Berbeda dengan modul People Analytics atau Vehicle Analytics yang berfokus pada counting, dwelling, atau attribute classification berbasis tracker, Snapshot Detection difokuskan untuk mendeteksi kejadian (incident) dalam satu Frame atau kumpulan Frame — misalnya kebakaran, perkelahian, perilaku merokok, atau objek custom dari prompt teks.
Pada akhir halaman ini Anda akan memahami mekanisme bersama Snapshot Detection, daftar 15 varian yang tersedia, parameter umum dan khusus per varian, serta struktur event yang dihasilkan.
Pengenalan / Cara Kerja Umum
Semua varian Snapshot Detection berbagi pipeline yang sama:
Karakteristik utama:
- Event-driven, bukan per Frame. Pipeline tidak menerbitkan event setiap Frame; ia menunggu kondisi deteksi terpenuhi (confidence di atas ambang, label cocok, jawaban VLM = "yes", dll.).
- Cooldown via
dump_interval. Antara dua siklus inferensi terdapat jeda minimum (default5detik untuk sebagian besar varian;10detik untuk kategori VLM/event). Ini juga berperan sebagai mekanisme rate limiting agar event tidak meledak. - Backend Snapshot API terpisah. Pipeline Visionaire bertindak sebagai dispatcher; inferensi sebenarnya dilakukan oleh service Snapshot API (NFFS-OVOD, NFFS-OVIC, NFFS-VM, NFFS-VLM) yang harus berjalan terpisah.
- Output minimal. Setiap event berisi snapshot Frame (atau cropped object) plus payload
pipeline_dataringkas — tanpatracker_id, tanpaarea_count, tanpadwelling_duration. Setiap event berdiri sendiri.
Daftar Varian
Tersedia 15 varian Snapshot Detection. Semuanya menggunakan prefix Analytic ID NFV4D-*.
| Analytic ID | Nama Pipeline | Use Case Singkat |
|---|---|---|
NFV4D-OVOD | OVOD (Open Vocabulary Object Detection) | Deteksi objek custom via prompt teks (classes) |
NFV4D-OVIC | OVIC (Open Vocabulary Image Classification) | Klasifikasi gambar custom via deskripsi teks |
NFV4D-WLM | Water Level Monitoring | Pengukuran level air dari garis-garis acuan |
NFV4D-FLOD | Flood Monitoring | Deteksi banjir / genangan jalan |
NFV4D-PSMO | Person Smoking Detection | Deteksi orang merokok |
NFV4D-PPHO | Person Using Phone Detection | Deteksi orang menggunakan handphone |
NFV4D-FISO | Fire and Smoke Detection | Deteksi api dan asap |
NFV4D-PPFA | People with Firearm Detection | Deteksi orang membawa senjata api |
NFV4D-VMFG | People Fighting | Deteksi perkelahian |
NFV4D-VMVD | Vandalism | Deteksi vandalisme |
NFV4D-VMBG | ATM Burglary | Deteksi pembobolan ATM |
NFV4D-RIOT | Riot | Deteksi kerusuhan massa |
NFV4D-VLM | VLM (Vision Language Model) | Analisis Frame berbasis prompt VLM bebas |
NFV4D-ARVM | Action Recognition | Pengenalan aksi/aktivitas via VLM |
NFV4D-RCMA | Road Crash Monitoring | Deteksi kecelakaan lalu lintas |
Pengelompokan berdasarkan Use Case
Apa yang Dilakukan / Yang TIDAK Dilakukan
Kemampuan Bersama
- Event-driven dispatch. Event hanya diterbitkan saat kondisi target terpenuhi (deteksi positif, klasifikasi cocok, atau jawaban VLM = "yes").
- Snapshot per kejadian. Setiap event membawa cuplikan Frame (atau crop bounding box) yang menjadi bukti deteksi.
- Konfigurasi seragam. Semua varian menerima parameter dasar yang sama:
address,dump_interval, dll. - Dukungan ROI. Sebagian varian (lihat tabel di bawah) memfilter deteksi hanya pada polygon yang Anda definisikan.
- Dukungan VLM multi-Frame. Varian VMFG, VMVD, VMBG, RIOT, ARVM, dan VLM dapat menggabungkan beberapa Frame menjadi satu collage untuk meningkatkan konteks temporal.
Yang TIDAK Dilakukan
- Tidak melakukan tracking. Tidak ada
tracker_idlintas event; tidak bisa menjawab pertanyaan "apakah orang yang sama muncul lagi?". - Tidak melakukan counting/dwelling. Untuk metrik kuantitatif gunakan People Analytics atau Vehicle Analytics.
- Tidak melakukan recognition identitas. Untuk identifikasi wajah gunakan Face Recognition; untuk plat nomor gunakan License Plate Recognition.
- Tidak realtime per Frame. Inferensi terjadi pada interval
dump_interval(default 5–10 detik). Bukan untuk skenario yang memerlukan latensi sub-detik per Frame.
Use Cases
Smart City Monitoring
Kombinasi NFV4D-FISO, NFV4D-FLOD, dan NFV4D-RCMA untuk pemantauan bencana dan kecelakaan di pusat kota.
Industrial Safety
Pakai NFV4D-PSMO + NFV4D-PPHO + NFV4D-FISO untuk monitoring kepatuhan dan deteksi kebakaran di pabrik.
Bank / ATM Security
Gabungkan NFV4D-VMBG (pembobolan), NFV4D-RIOT (kerusuhan), dan NFV4D-PPFA (senjata api) untuk perimeter security.
Public Safety
NFV4D-VMFG, NFV4D-VMVD, dan NFV4D-RIOT untuk pemantauan area publik, terminal, atau stasiun.
Custom Detection (Open Vocabulary)
NFV4D-OVOD dan NFV4D-VLM untuk skenario yang belum tercakup model siap pakai — cukup tulis prompt teks.
Persyaratan
Kamera
| Requirement | Minimum | Rekomendasi |
|---|---|---|
| Resolusi | 720p | 1080p |
| Frame Rate Sumber | 5 fps | 15–25 fps |
| Codec | H.264 | H.264 / H.265 |
| Pencahayaan | Cukup di siang hari | Pencahayaan merata, hindari backlight |
Catatan tambahan per kategori:
- FISO/FLOD/WLM — pasang kamera dengan view yang jelas terhadap area pengamatan; hindari obstruksi vegetasi atau struktur.
- VMFG/VMVD/RIOT/PPFA — sudut pandang luas dengan ketinggian sedang (3–5 meter) agar konteks aksi tertangkap.
- PSMO/PPHO — resolusi orang minimal 100×200 piksel agar objek kecil (rokok, handphone) terlihat.
- OVOD/OVIC — tergantung target prompt; sesuaikan resolusi dengan ukuran objek terkecil.
Lingkungan
- CPU 3 core dan RAM 2 GB untuk pipeline dispatcher Visionaire.
- GPU resource sebagian besar berada di sisi Snapshot API server (terpisah).
- Konektivitas low-latency antara Visionaire dan Snapshot API.
Dependensi
- Snapshot API sesuai varian harus berjalan dan dapat dijangkau:
NFFS-OVOD/v1/object-detectionuntuk OVOD, PSMO, PPHO, FISO, PPFANFFS-OVIC/v1/image-classificationuntuk OVIC, FLODNFFS-WLM/v1/predictuntuk WLMNFFS-VM/v1/image-recognitionuntuk VMVD, VMBG, ARVM, RCMANFFS-VLM/v1/image-recognitionuntuk VMFG, RIOT, VLM
- Konfigurasi
addressdi pipeline harus mengarah ke base URL Snapshot API server (defaulthttp://localhost:4008). - Stream video sudah terdaftar di Visionaire dan dapat diakses oleh node yang akan menjalankan pipeline.
Setting Up
Pilih varian yang sesuai
Tentukan Analytic ID yang ingin dijalankan (misalnya NFV4D-FISO untuk deteksi api). Lihat Daftar Varian.
Siapkan Snapshot API
Pastikan Snapshot API yang sesuai (NFFS-OVOD, NFFS-OVIC, NFFS-VM, atau NFFS-VLM) berjalan dan dapat dihubungi dari node Visionaire. Catat alamat dan port-nya.
Pasang kamera & verifikasi feed
Posisikan kamera sesuai pedoman di atas. Verifikasi bahwa Stream sudah terdaftar di Visionaire dan Frame dapat dibaca tanpa error.
Buat pipeline via API
Kirim request POST /pipeline/{node_num}/{stream_id}/{NFV4D-XYZ} dengan konfigurasi yang sesuai. Untuk varian Open (OVOD/OVIC/VLM), sertakan prompt teks pada body konfigurasi.
Subscribe event
Berlangganan event channel via WebSocket atau atur Webhook penerima untuk menerima setiap event yang dihasilkan pipeline.
Verifikasi melalui MJPEG
Akses endpoint MJPEG pipeline untuk memverifikasi bahwa pipeline berjalan dan ROI/overlay (bila ada) sudah benar.
Konfigurasi
Parameter API Umum
Parameter berikut tersedia untuk semua varian Snapshot Detection (didefinisikan di snapshot_cfg_base):
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
address | string | http://localhost:4008 | Base URL Snapshot API server. Otomatis dinormalisasi (ditambahkan http:// dan trailing /). |
dump_interval | integer (detik) | 5 (sebagian varian 10) | Interval minimum antar siklus inferensi/dump. Minimum 1. Untuk WLM minimum 10. Berfungsi juga sebagai cooldown agar event tidak meledak. |
always_dump | boolean | false | Bila true, event tetap diterbitkan walau tidak ada deteksi positif. Default false agar hanya event positif yang dikirim. |
images_num | integer | 4 | Untuk varian VLM/AR multi-Frame: jumlah Frame yang dikumpulkan menjadi collage. Range valid 1–6. |
interval_capture | float (detik) | 0.5 | Untuk varian VLM/AR multi-Frame: jeda antar capture Frame yang akan disusun menjadi collage. Minimum 0.1. |
is_dump_collage | boolean | true | Untuk varian VLM/AR: bila true snapshot yang dikirim adalah collage; bila false adalah satu Frame tunggal. |
areas | array polygon | [] | Daftar ROI dalam koordinat normalized 0–1. Hanya berlaku untuk varian dengan ROI (lihat catatan di bawah). |
Sebagian default per varian dapat berbeda. Misalnya FLOD, FISO, PPFA, VMFG, VMVD, VMBG, RIOT, VLM, ARVM, dan RCMA mengoverride dump_interval menjadi 5 atau 10. Khusus NFV4D-RIOT, semua field dasar juga dapat dioverride lewat environment variable V4_RIOT_* di sisi node.
ROI dan Group Loop
Penanganan loop dan dukungan ROI berbeda per varian:
| Group | Varian | ROI | Mekanisme |
|---|---|---|---|
| ROI snapshot | OVOD, PSMO, PPHO, FISO, PPFA | Ya | Dispatcher mengirim Frame full + Snapshot API mengembalikan bounding box. Pipeline memfilter hanya yang berada dalam ROI. |
| VLM multi-Frame | VMFG, VMVD, VMBG, RIOT, VLM, ARVM | Tidak | Mengumpulkan beberapa Frame, menyusun collage atau Frame tunggal, lalu mengirim ke VLM dengan prompt. |
| WLM | WLM | Garis acuan | Menggambar garis level + nilai; hasil API berupa level yang sedang aktif. |
| Common | OVIC, FLOD, RCMA | Tidak | Dispatch periodik tanpa ROI; dump bila kondisi terpenuhi. |
Parameter Khusus per Varian
OVOD menerima daftar classes (prompt teks) yang akan dideteksi, dengan confidence sebagai threshold dump dan additional_params opsional untuk relasi antar objek (context).
| Parameter | Tipe | Deskripsi |
|---|---|---|
classes | array string | Daftar nama objek yang ingin dideteksi. Wajib diisi (tidak boleh kosong). |
confidence | float | Confidence minimum agar deteksi diterbitkan sebagai event. Default 0.5. |
additional_params.box_th | float | Box confidence threshold di sisi API. |
additional_params.text_th | float | Text confidence threshold di sisi API. |
additional_params.context.name | string | Nama label custom hasil relasi. |
additional_params.context.source_label | string | Label sumber relasi. |
additional_params.context.target_label | string | Label target relasi. |
additional_params.context.relation | string | Relasi: distance, iou, count_inside, atau wrap. |
additional_params.context.operation | string | Operasi pembanding (mis. equal, more_than). |
additional_params.context.value | any | Nilai pembanding (tipenya menyesuaikan relation). |
intersect_threshold | float | Threshold interseksi bbox dengan ROI. Default 0.1. |
OVIC menggunakan deskripsi teks sebagai referensi klasifikasi.
| Parameter | Tipe | Deskripsi |
|---|---|---|
descriptions | array string | Daftar deskripsi referensi (mis. "a person standing"). |
labels_id | object | Mapping nama label ke daftar index descriptions (mis. { "is_person": [0] }). |
confidence | float | Threshold confidence (dikalikan 100 di sisi API). Default 0.2. |
softmax | boolean | Aktifkan softmax di sisi API. Default true. |
WLM mengukur level air berdasarkan garis-garis acuan yang Anda gambar.
| Parameter | Tipe | Deskripsi |
|---|---|---|
areas | array | Daftar garis acuan, masing-masing berisi value (level) dan points (dua titik garis dalam koordinat normalized 0–1). |
level | integer | Jumlah level acuan. Default 3. |
dump_interval | integer | Minimum 10 detik untuk WLM (akan otomatis dinaikkan bila lebih kecil). |
FLOD menggunakan model OVIC dengan referensi tetap "normal dry road" dan "waterlogged road". Event diterbitkan saat label waterlogged terdeteksi dengan confidence di atas threshold.
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
dump_confidence | float | 0.50 | Threshold untuk menerbitkan event waterlogged. |
dump_interval | integer | 10 | Cooldown khusus FLOD. |
Empat varian ini sama-sama berbasis OVOD dengan prompt classes yang sudah ditetapkan, plus relasi opsional antar objek.
| Varian | Prompt Classes | Relasi (context) | dump_confidence | box_threshold | text_threshold |
|---|---|---|---|---|---|
| PSMO | person, cigarette | person wrap cigarette | 0.30 | 0.35 | 0.25 |
| PPHO | person, handphone | person wrap handphone | 0.30 | 0.30 | 0.25 |
| FISO | smoke, fire, cloud, fog | (tidak ada — dump bila label = smoke atau fire) | 0.30 | 0.30 | 0.15 |
| PPFA | person, firearm | person wrap firearm | 0.30 | 0.10 | 0.10 |
Anda dapat mengoverride dump_confidence melalui konfigurasi pipeline.
Varian ini menggunakan model VLM untuk menjawab pertanyaan tentang Frame (atau collage Frame). Event diterbitkan bila jawaban VLM memenuhi min_answer_choice.
| Varian | event_name | Endpoint | min_answer_choice | prompts_size |
|---|---|---|---|---|
| VMFG | people fighting | NFFS-VLM/v1/image-recognition | 2 | 3 |
| VMVD | vandalism event | NFFS-VM/v1/image-recognition | 1 | 1 |
| VMBG | ATM burglary event | NFFS-VM/v1/image-recognition | 1 | 1 |
| RIOT | riot event | NFFS-VLM/v1/image-recognition | 2 | 3 |
| ARVM | (kosong — wajib diisi via konfigurasi) | NFFS-VM/v1/image-recognition | 1 | 1 |
Untuk ARVM, parameter event_name wajib diisi melalui konfigurasi pipeline; bila kosong, pipeline akan melempar error saat menjalankan inferensi.
dump_interval default 10 detik dan fps capture default 20.
NFV4D-VLM digunakan untuk skenario open-ended di mana Anda ingin mengirim Frame ke VLM dengan prompt bebas dan menerima jawaban natural language sebagai event.
| Parameter | Tipe | Deskripsi |
|---|---|---|
event_name | string | Nama event (default vlm). |
is_raw_answer_dump | boolean | Default true — jawaban VLM langsung dijadikan label event. |
Karena min_answer_choice = 1000, varian ini tidak menggunakan agregasi yes/no — setiap dispatch akan mengeluarkan event berisi jawaban mentah dari VLM.
RCMA menggunakan VLM single-Frame dengan prompt tetap.
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
event_name | string | unexpected vehicle crash | Nama event (digunakan dalam prompt). |
label | string | crash | Label event yang dipublikasikan saat VLM menjawab "yes". |
dump_interval | integer | 10 | Cooldown antar dispatch. |
Beberapa default ditetapkan di kode (mis. konfigurasi context PSMO/PPHO/FISO/PPFA, prompt FLOD, prompt RIOT). Hanya parameter yang dapat dioverride melalui konfigurasi pipeline yang dijabarkan di atas. Untuk override mendalam (mis. mengubah classes FISO atau prompt VMFG di luar konfigurasi pipeline), perubahan harus dilakukan di sisi service Snapshot API atau melalui environment variable yang relevan.
Output yang Dihasilkan
Struktur Event
Semua event Snapshot Detection memiliki struktur top-level yang sama dengan event analitik Visionaire lainnya. Payload spesifik per varian berada di field pipeline_data.
| Field Top-Level | Tipe | Deskripsi |
|---|---|---|
analytic_id | string | Salah satu ID dari daftar varian (NFV4D-*). |
stream_id | string | ID Stream sumber. |
node_num | integer | Node yang menjalankan pipeline. |
timestamp | integer (ms) | Unix timestamp event dalam millisecond. |
primary_text | string | Teks utama event (label objek, jawaban VLM, atau nama event). |
secondary_text | string | Teks pelengkap (mis. confidence atau jawaban mentah). |
image_jpeg | string (base64) | Cuplikan Frame atau cropped object. |
pipeline_data | object | Payload spesifik per varian (lihat di bawah). |
Field pipeline_data per Tipe Varian
| Field | Tipe | Tersedia Pada |
|---|---|---|
label | string | Detection (OVOD, PSMO, PPHO, FISO, PPFA) |
confidence | float | Detection (OVOD, PSMO, PPHO, FISO, PPFA) |
dump | boolean | OVOD (penanda dump) |
labels | object | OVIC (mapping label → boolean) |
attributes.classification.label | string | FLOD (klasifikasi) |
attributes.classification.confidence | float | FLOD (klasifikasi) |
level | number | WLM |
event | boolean | VLM-based (VMFG, VMVD, VMBG, RIOT, VLM, ARVM, RCMA) — true bila kondisi target terpenuhi |
answer | string | VLM-based — jawaban mentah dari VLM |
attributes | object | VLM-based (opsional) — dapat berisi label hasil parsing |
detections | array | VLM-based (opsional) — bounding box hasil parsing |
Contoh Event
{
"analytic_id": "NFV4D-FISO",
"stream_id": "stream_factory_01",
"node_num": 1,
"timestamp": 1714800000000,
"primary_text": "fire",
"secondary_text": "0.812000",
"pipeline_data": {
"label": "fire",
"confidence": 0.812
}
}{
"analytic_id": "NFV4D-PSMO",
"stream_id": "stream_warehouse_03",
"node_num": 1,
"timestamp": 1714800120000,
"primary_text": "person smoking",
"secondary_text": "0.421000",
"pipeline_data": {
"label": "person smoking",
"confidence": 0.421
}
}{
"analytic_id": "NFV4D-OVOD",
"stream_id": "stream_lobby_07",
"node_num": 2,
"timestamp": 1714800300000,
"primary_text": "Main Lobby: person",
"secondary_text": "0.762000",
"pipeline_data": {
"dump": true
}
}{
"analytic_id": "NFV4D-RIOT",
"stream_id": "stream_publicarea_02",
"node_num": 1,
"timestamp": 1714800600000,
"primary_text": "Riot is Detected",
"secondary_text": "",
"pipeline_data": {
"event": true,
"answer": "yes"
}
}{
"analytic_id": "NFV4D-WLM",
"stream_id": "stream_river_05",
"node_num": 1,
"timestamp": 1714800900000,
"primary_text": "900",
"secondary_text": "",
"pipeline_data": {
"level": 900
}
}Best Practices
Setting dump_interval
- Untuk skenario keselamatan kritis (FISO, PPFA), gunakan
dump_intervalrendah (5 detik) agar response cepat. - Untuk skenario rate-limited (RIOT, VMFG), pertahankan
dump_intervaldi 10 detik atau lebih agar event tidak meledak saat insiden berlangsung lama. - Untuk WLM atau monitoring lingkungan yang lambat berubah, naikkan
dump_intervalke 30–60 detik untuk hemat resource.
Penggunaan ROI
- Untuk varian yang mendukung ROI (OVOD, PSMO, PPHO, FISO, PPFA), definisikan polygon yang membatasi area pengamatan untuk mengurangi false positive di area tidak relevan.
- ROI juga membantu memberi konteks lokasi (nama area) pada event.
Tuning threshold
dump_confidenceadalah filter terakhir di sisi pipeline. Untuk environment dengan banyak false positive, naikkan ke 0.5–0.7.- Untuk skenario yang tidak boleh ada miss (mis. fire detection di gudang material berbahaya), turunkan ke 0.2–0.3 dan terima trade-off lebih banyak alert.
Reliability Webhook
- Untuk event critical (RIOT, VMBG, FISO), gunakan transport dengan retry/idempotency.
- Pertimbangkan persistensi event di sisi receiver agar lost event dapat di-replay.
Pemilihan multi-Frame vs single-Frame VLM
- VMFG dan RIOT (
prompts_size = 3) menggunakan dua-tahap verifikasi: jawaban awal + verifikasi tambahan. Akurasi lebih tinggi, latensi lebih besar. - VMVD, VMBG, ARVM (
prompts_size = 1) hanya satu prompt — lebih cepat, tetapi lebih rentan false positive.
Limitations
- Tidak ada tracking. Setiap event berdiri sendiri; tidak bisa menjawab pertanyaan "apakah orang yang sama muncul lagi 5 detik kemudian?".
- Tidak ada counting/dwelling. Untuk metrik kuantitatif (berapa orang, berapa lama), gunakan modul People Analytics atau Vehicle Analytics.
- Akurasi sangat bergantung pada kondisi lapangan. Pencahayaan, sudut kamera, occlusion, dan kualitas codec semuanya berpengaruh.
- Resource VLM/OVOD lebih berat. Varian VLM (VMFG, VMVD, VMBG, RIOT, VLM, ARVM) dan OVOD memerlukan GPU memory dan compute lebih besar di sisi Snapshot API server.
- Latency dispatch. Karena event hanya muncul tiap
dump_intervaldetik, kejadian yang lebih singkat dari interval bisa terlewat. - Snapshot API harus tersedia. Bila Snapshot API tidak dapat dijangkau, pipeline akan men-set side message error tetapi tidak menerbitkan event.
- Beberapa default tertanam di service. Mengubah classes/prompt di luar yang dapat dikonfigurasi (mis. mengganti list
dump_classesFISO) memerlukan perubahan di sisi service Snapshot API.
Modul Terkait
People Analytics
Counting, dwelling, density, dan attribute classification berbasis tracker.
Vehicle Analytics
Counting kendaraan, klasifikasi jenis, dan monitoring zona.
Face Recognition
Identifikasi wajah secara real-time dengan enrollment dan matching.
License Plate Recognition
Deteksi dan pengenalan plat kendaraan dari Stream video.