Nodeflux Central
Snapshot Detection

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:

Belum Ya Tidak Ya Stream Video Frame Decoder dump_intervalterlampaui? Capture Frame / Kumpulan Frame Encode Base64 + kirim keSnapshot API Kondisi eventterpenuhi? Skiptidak ada event dump_eventpipeline_data + image Event Bus / Webhook Reset timer

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 (default 5 detik untuk sebagian besar varian; 10 detik 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_data ringkas — tanpa tracker_id, tanpa area_count, tanpa dwelling_duration. Setiap event berdiri sendiri.

Daftar Varian

Tersedia 15 varian Snapshot Detection. Semuanya menggunakan prefix Analytic ID NFV4D-*.

Analytic IDNama PipelineUse Case Singkat
NFV4D-OVODOVOD (Open Vocabulary Object Detection)Deteksi objek custom via prompt teks (classes)
NFV4D-OVICOVIC (Open Vocabulary Image Classification)Klasifikasi gambar custom via deskripsi teks
NFV4D-WLMWater Level MonitoringPengukuran level air dari garis-garis acuan
NFV4D-FLODFlood MonitoringDeteksi banjir / genangan jalan
NFV4D-PSMOPerson Smoking DetectionDeteksi orang merokok
NFV4D-PPHOPerson Using Phone DetectionDeteksi orang menggunakan handphone
NFV4D-FISOFire and Smoke DetectionDeteksi api dan asap
NFV4D-PPFAPeople with Firearm DetectionDeteksi orang membawa senjata api
NFV4D-VMFGPeople FightingDeteksi perkelahian
NFV4D-VMVDVandalismDeteksi vandalisme
NFV4D-VMBGATM BurglaryDeteksi pembobolan ATM
NFV4D-RIOTRiotDeteksi kerusuhan massa
NFV4D-VLMVLM (Vision Language Model)Analisis Frame berbasis prompt VLM bebas
NFV4D-ARVMAction RecognitionPengenalan aksi/aktivitas via VLM
NFV4D-RCMARoad Crash MonitoringDeteksi 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_id lintas 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


Persyaratan

Kamera

RequirementMinimumRekomendasi
Resolusi720p1080p
Frame Rate Sumber5 fps15–25 fps
CodecH.264H.264 / H.265
PencahayaanCukup di siang hariPencahayaan 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-detection untuk OVOD, PSMO, PPHO, FISO, PPFA
    • NFFS-OVIC/v1/image-classification untuk OVIC, FLOD
    • NFFS-WLM/v1/predict untuk WLM
    • NFFS-VM/v1/image-recognition untuk VMVD, VMBG, ARVM, RCMA
    • NFFS-VLM/v1/image-recognition untuk VMFG, RIOT, VLM
  • Konfigurasi address di pipeline harus mengarah ke base URL Snapshot API server (default http://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):

ParameterTipeDefaultDeskripsi
addressstringhttp://localhost:4008Base URL Snapshot API server. Otomatis dinormalisasi (ditambahkan http:// dan trailing /).
dump_intervalinteger (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_dumpbooleanfalseBila true, event tetap diterbitkan walau tidak ada deteksi positif. Default false agar hanya event positif yang dikirim.
images_numinteger4Untuk varian VLM/AR multi-Frame: jumlah Frame yang dikumpulkan menjadi collage. Range valid 1–6.
interval_capturefloat (detik)0.5Untuk varian VLM/AR multi-Frame: jeda antar capture Frame yang akan disusun menjadi collage. Minimum 0.1.
is_dump_collagebooleantrueUntuk varian VLM/AR: bila true snapshot yang dikirim adalah collage; bila false adalah satu Frame tunggal.
areasarray 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:

GroupVarianROIMekanisme
ROI snapshotOVOD, PSMO, PPHO, FISO, PPFAYaDispatcher mengirim Frame full + Snapshot API mengembalikan bounding box. Pipeline memfilter hanya yang berada dalam ROI.
VLM multi-FrameVMFG, VMVD, VMBG, RIOT, VLM, ARVMTidakMengumpulkan beberapa Frame, menyusun collage atau Frame tunggal, lalu mengirim ke VLM dengan prompt.
WLMWLMGaris acuanMenggambar garis level + nilai; hasil API berupa level yang sedang aktif.
CommonOVIC, FLOD, RCMATidakDispatch 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).

ParameterTipeDeskripsi
classesarray stringDaftar nama objek yang ingin dideteksi. Wajib diisi (tidak boleh kosong).
confidencefloatConfidence minimum agar deteksi diterbitkan sebagai event. Default 0.5.
additional_params.box_thfloatBox confidence threshold di sisi API.
additional_params.text_thfloatText confidence threshold di sisi API.
additional_params.context.namestringNama label custom hasil relasi.
additional_params.context.source_labelstringLabel sumber relasi.
additional_params.context.target_labelstringLabel target relasi.
additional_params.context.relationstringRelasi: distance, iou, count_inside, atau wrap.
additional_params.context.operationstringOperasi pembanding (mis. equal, more_than).
additional_params.context.valueanyNilai pembanding (tipenya menyesuaikan relation).
intersect_thresholdfloatThreshold interseksi bbox dengan ROI. Default 0.1.

OVIC menggunakan deskripsi teks sebagai referensi klasifikasi.

ParameterTipeDeskripsi
descriptionsarray stringDaftar deskripsi referensi (mis. "a person standing").
labels_idobjectMapping nama label ke daftar index descriptions (mis. { "is_person": [0] }).
confidencefloatThreshold confidence (dikalikan 100 di sisi API). Default 0.2.
softmaxbooleanAktifkan softmax di sisi API. Default true.

WLM mengukur level air berdasarkan garis-garis acuan yang Anda gambar.

ParameterTipeDeskripsi
areasarrayDaftar garis acuan, masing-masing berisi value (level) dan points (dua titik garis dalam koordinat normalized 0–1).
levelintegerJumlah level acuan. Default 3.
dump_intervalintegerMinimum 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.

ParameterTipeDefaultDeskripsi
dump_confidencefloat0.50Threshold untuk menerbitkan event waterlogged.
dump_intervalinteger10Cooldown khusus FLOD.

Empat varian ini sama-sama berbasis OVOD dengan prompt classes yang sudah ditetapkan, plus relasi opsional antar objek.

VarianPrompt ClassesRelasi (context)dump_confidencebox_thresholdtext_threshold
PSMOperson, cigaretteperson wrap cigarette0.300.350.25
PPHOperson, handphoneperson wrap handphone0.300.300.25
FISOsmoke, fire, cloud, fog(tidak ada — dump bila label = smoke atau fire)0.300.300.15
PPFAperson, firearmperson wrap firearm0.300.100.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.

Varianevent_nameEndpointmin_answer_choiceprompts_size
VMFGpeople fightingNFFS-VLM/v1/image-recognition23
VMVDvandalism eventNFFS-VM/v1/image-recognition11
VMBGATM burglary eventNFFS-VM/v1/image-recognition11
RIOTriot eventNFFS-VLM/v1/image-recognition23
ARVM(kosong — wajib diisi via konfigurasi)NFFS-VM/v1/image-recognition11

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.

ParameterTipeDeskripsi
event_namestringNama event (default vlm).
is_raw_answer_dumpbooleanDefault 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.

ParameterTipeDefaultDeskripsi
event_namestringunexpected vehicle crashNama event (digunakan dalam prompt).
labelstringcrashLabel event yang dipublikasikan saat VLM menjawab "yes".
dump_intervalinteger10Cooldown 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-LevelTipeDeskripsi
analytic_idstringSalah satu ID dari daftar varian (NFV4D-*).
stream_idstringID Stream sumber.
node_numintegerNode yang menjalankan pipeline.
timestampinteger (ms)Unix timestamp event dalam millisecond.
primary_textstringTeks utama event (label objek, jawaban VLM, atau nama event).
secondary_textstringTeks pelengkap (mis. confidence atau jawaban mentah).
image_jpegstring (base64)Cuplikan Frame atau cropped object.
pipeline_dataobjectPayload spesifik per varian (lihat di bawah).

Field pipeline_data per Tipe Varian

FieldTipeTersedia Pada
labelstringDetection (OVOD, PSMO, PPHO, FISO, PPFA)
confidencefloatDetection (OVOD, PSMO, PPHO, FISO, PPFA)
dumpbooleanOVOD (penanda dump)
labelsobjectOVIC (mapping label → boolean)
attributes.classification.labelstringFLOD (klasifikasi)
attributes.classification.confidencefloatFLOD (klasifikasi)
levelnumberWLM
eventbooleanVLM-based (VMFG, VMVD, VMBG, RIOT, VLM, ARVM, RCMA) — true bila kondisi target terpenuhi
answerstringVLM-based — jawaban mentah dari VLM
attributesobjectVLM-based (opsional) — dapat berisi label hasil parsing
detectionsarrayVLM-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_interval rendah (5 detik) agar response cepat.
  • Untuk skenario rate-limited (RIOT, VMFG), pertahankan dump_interval di 10 detik atau lebih agar event tidak meledak saat insiden berlangsung lama.
  • Untuk WLM atau monitoring lingkungan yang lambat berubah, naikkan dump_interval ke 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_confidence adalah 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_interval detik, 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_classes FISO) memerlukan perubahan di sisi service Snapshot API.

Modul Terkait

On this page