Nodeflux Central
Snapshot Detection

Konfigurasi

Referensi lengkap parameter pipeline Snapshot Detection per varian, mode VLM (persona & prompt bebas), dan environment variable.

Parameter di halaman ini dikirim sebagai body JSON saat membuat pipeline (POST /pipeline/{node_num}/{stream_id}/{analytic_id}) atau mengubahnya (PUT pada endpoint yang sama). Semua parameter bersifat opsional kecuali disebutkan wajib.

Snapshot Detection tidak memiliki preset konfigurasi (tidak ada add_config_preset di kode) dan sebagian besar varian tidak mendaftarkan default terverbose ke endpoint GET /config/pipeline/{analytic_id}/ — hanya NFV4D-RIOT dan NFV4D-VLM yang melakukannya. Untuk varian lain, gunakan tabel di halaman ini sebagai referensi default, bukan endpoint config.

Parameter Umum

Parameter berikut didefinisikan di snapshot_cfg_base dan menjadi basis bagi hampir semua varian:

ParameterTipeDefaultDeskripsi
addressstringBerbeda per kelompok varian — lihat Persyaratan — DependensiBase URL layanan AI eksternal. Otomatis dinormalisasi (ditambahkan http:// dan trailing /).
dump_intervalinteger (detik)5 untuk hampir semua varianInterval minimum antar siklus inferensi/dump. Lihat catatan default di bawah — beberapa nilai yang tampak di kode ternyata tidak dipakai saat runtime.
always_dumpbooleanfalseBila true, event tetap diterbitkan walau kondisi target tidak terpenuhi.
images_numinteger4Untuk varian VLM multi-Frame: jumlah Frame yang dikumpulkan menjadi collage. Dipaksa ke rentang 1–6 (nilai di luar rentang otomatis dipangkas, disertai LOG(WARNING)).
interval_capturefloat (detik)0.5Untuk varian VLM multi-Frame: jeda antar capture Frame yang akan disusun menjadi collage.
is_dump_collagebooleantrueUntuk varian VLM multi-Frame: bila true snapshot yang dikirim/didump adalah collage; bila false satu Frame tunggal.
areasarray[]Format berbeda per kelompok — polygon ROI untuk varian deteksi, garis acuan untuk WLM. Lihat tab per varian di bawah.

Default dump_interval yang sebenarnya dipakai

Kode di configs.hpp mendeklarasikan dump_interval berbeda-beda per struct config terluar (mis. flood_config::dump_interval = 10, vmfg_config::dump_interval = 10, rcma_config::dump_interval = 10). Nilai-nilai ini tidak pernah dibaca oleh dispatcher — snapshot.cpp selalu membaca SnapshotType::routine_cfg::dump_interval, yaitu struct *_prompt_cfg yang mewarisi snapshot_cfg_base tanpa override. Akibatnya, default dump_interval yang benar-benar dipakai saat parameter tidak dikirim adalah 5 detik untuk semua varian, kecuali:

  • NFV4D-WLM — dipaksa naik ke minimum 10 detik saat runtime (wlm_loop()), berapapun nilai yang dikirim.
  • NFV4D-RIOT — default diambil dari environment variable V4_RIOT_DUMP_INTERVAL (default "10"), bukan 5.

Endpoint GET /config/pipeline/NFV4D-VLM/ juga menampilkan default dump_interval: 30 dan always_dump: true — ini adalah nilai tampilan verbose-config yang berbeda dari nilai runtime sebenarnya (5 detik, false). Jika perilaku spesifik dibutuhkan, kirim dump_interval/always_dump secara eksplisit alih-alih mengandalkan default.

Format areas (ROI polygon)

Berlaku untuk NFV4D-OVOD, NFV4D-PSMO, NFV4D-PPHO, NFV4D-FISO, NFV4D-PPFA:

{
  "areas": [
    {
      "name": "Zona Produksi",
      "roi_type": "whitelist",
      "points": [
        { "x": 0.1, "y": 0.1 },
        { "x": 0.9, "y": 0.1 },
        { "x": 0.9, "y": 0.9 },
        { "x": 0.1, "y": 0.9 }
      ]
    }
  ]
}
  • points minimal 3 titik, koordinat normalized 0–1 (nilai di luar 0–1 dipangkas ke tepi frame).
  • roi_type bernilai whitelist (default bila tidak dikirim) atau blacklist.
  • Bila areas tidak dikirim, ROI default mencakup seluruh frame (whitelist).
  • intersect_threshold (float, default 0.1) mengatur rasio irisan minimum antara bounding box objek dan polygon agar dianggap berada di dalam area.

Parameter Khusus per Varian

NFV4D-OVOD menerima daftar classes (prompt teks) bebas yang akan dideteksi.

ParameterTipeDefaultDeskripsi
classesarray string["person"] bila tidak dikirim atau bukan arrayDaftar nama objek yang ingin dideteksi. Wajib berisi minimal satu string non-kosong — bila kosong, pipeline melempar error "input classes are empty" saat dispatch.
confidencefloat0.5Confidence minimum agar deteksi diterbitkan sebagai event.
additional_params.box_thfloat—Box confidence threshold di sisi layanan AI eksternal.
additional_params.text_thfloat—Text confidence threshold di sisi layanan AI eksternal.
additional_params.context.namestringDigenerate dari source_label/target_label bila kosongNama label custom hasil relasi antar objek.
additional_params.context.source_labelstringpersonLabel sumber relasi.
additional_params.context.target_labelstringpersonLabel target relasi.
additional_params.context.relationstringdistanceJenis relasi: distance, iou, count_inside, atau wrap.
additional_params.context.operationstringequalOperator pembanding (mis. equal, more_than).
additional_params.context.valueint / float / boolMenyesuaikan relationNilai pembanding.
intersect_thresholdfloat0.1Threshold interseksi bbox dengan ROI.

Jika additional_params.context dikonfigurasi, hanya objek dengan label yang sama dengan context.name yang di-dump; bila tidak, semua objek yang lolos confidence di-dump.

NFV4D-OVIC menggunakan deskripsi teks sebagai referensi klasifikasi, dan layanan eksternal yang mengembalikan hasil sudah dalam bentuk boolean per label.

ParameterTipeDefaultDeskripsi
descriptionsarray string[] (wajib diisi)Daftar deskripsi referensi (mis. "a person standing").
labels_idobject{} (wajib diisi)Mapping nama label ke daftar index descriptions (mis. { "is_person": [0] }).
confidencefloat0.2Dikirim ke layanan eksternal sebagai thresh dikalikan 100 (unit persen).
softmaxbooleantrueAktifkan softmax di sisi layanan eksternal.

Event diterbitkan bila minimal satu label pada respons bernilai true; pipeline_data.labels berisi seluruh map label → boolean apa adanya dari respons.

NFV4D-WLM mengukur level air dari dua garis acuan yang Anda gambar.

ParameterTipeDefaultDeskripsi
areasarray, harus persis 2 entri3 garis bawaan pada posisi tetap (lihat catatan)Setiap entri berisi value (nilai level pada garis itu) dan points (dua titik {x, y} normalized 0–1) yang mendefinisikan garis acuan terendah dan tertinggi.
levelinteger3, hanya berubah bila dikirim lebih besar dari 3Jumlah level/garis yang diinterpolasi antara garis terendah dan tertinggi.
dump_intervalintegerDipaksa minimum 10Nilai di bawah 10 otomatis dinaikkan ke 10 saat runtime.

Bila areas tidak berisi tepat 2 entri, kode diam-diam memakai 3 garis bawaan pada posisi tetap (bukan error) — periksa jumlah entri areas Anda jika level yang dilaporkan tidak sesuai ekspektasi. Begitu pula level hanya berlaku jika nilainya lebih besar dari 3; mengirim level: 2 tidak akan mengubah apa pun.

NFV4D-FLOD memakai model klasifikasi gambar dengan referensi tetap "normal dry road" vs "waterlogged road" — classes/descriptions tidak dapat diubah dari luar. Event diterbitkan saat label waterlogged terdeteksi dengan confidence di atas threshold.

ParameterTipeDefaultDeskripsi
dump_confidencefloat0.50Threshold (0–1) untuk menerbitkan event waterlogged; dikonversi ×100 saat dibandingkan dengan respons layanan eksternal.

pipeline_data FLOD berisi baik key top-level bernama sesuai label (mis. "waterlogged": 87.3) maupun attributes.classification.{label, confidence} — lihat Struktur Event.

Keempat varian ini berbasis deteksi objek dengan prompt classes yang sudah ditetapkan di kode — Anda hanya dapat mengoverride dump_confidence, address, dan areas.

VarianClasses (tetap)Relasi (tetap)dump_confidence defaultbox_thresholdtext_threshold
NFV4D-PSMOperson, cigaretteperson wrap cigarette0.300.350.25
NFV4D-PPHOperson, handphoneperson wrap handphone0.300.300.25
NFV4D-FISOsmoke, fire, cloud, fogTidak ada — dump bila label terdeteksi adalah smoke atau fire0.300.300.15
NFV4D-PPFAperson, firearmperson wrap firearm0.300.100.10

Parameter yang dapat dikirim: dump_confidence (float), address (string), areas (ROI polygon).

Kelima varian ini menggunakan VLM untuk menjawab pertanyaan tentang Frame (atau collage Frame). Semua memakai routine yang sama (MultiFrameVLMRoutineAR) dengan pertanyaan/threshold berbeda yang tertanam di kode dan tidak dapat diubah lewat konfigurasi, kecuali NFV4D-ARVM yang wajib mengisi event_name.

Varianevent_name (tetap kecuali ARVM)Ambang jawaban "yes" internalJumlah prompt
NFV4D-VMFGpeople fighting≥ 2 dari 3 prompt menjawab yes3
NFV4D-VMVDvandalism event≥ 1 dari 1 prompt1
NFV4D-VMBGATM burglary event≥ 1 dari 1 prompt1
NFV4D-RIOTriot event≥ 2 dari 3 prompt3
NFV4D-ARVMWajib diisi via event_name — kosong akan melempar error saat dispatch≥ 1 dari 1 prompt1

Parameter yang dapat dikirim untuk semua varian di grup ini: dump_interval, address, images_num, interval_capture, is_dump_collage, always_dump, event_name (untuk ARVM, wajib; untuk varian lain diabaikan karena nama event sudah ditetapkan), answer_debug (boolean, default false — bila true, setiap jawaban VLM ikut di-dump sebagai event debug), dan prompts (array string opsional yang menggantikan prompt otomatis; hanya elemen pertama yang dipakai, menggantikan seluruh alur verifikasi bertingkat).

Khusus NFV4D-RIOT: seluruh parameter dasar (address, always_dump, dump_interval, images_num, interval_capture, is_dump_collage, enable_visual) juga dapat diatur lewat environment variable V4_RIOT_* di sisi node — lihat bagian Environment Variable.

Parameter persona dan min_votes (dijelaskan di tab "VLM Bebas & Persona") diproses oleh routine yang sama pada kelima varian ini, karena resolusi mode VLM (resolve_vlm_mode) berjalan universal untuk semua pipeline berbasis MultiFrameVLMRoutineAR. Namun hanya NFV4D-VLM yang secara resmi mengiklankan parameter ini lewat endpoint config verbose — pada varian lain di grup ini, gunakan dengan hati-hati dan uji langsung sebelum mengandalkannya di produksi.

NFV4D-VLM adalah satu-satunya varian yang secara resmi mendukung tiga mode operasi, dipilih lewat parameter persona:

ModeCara memilihPerilaku
LEGACY_RAW (default)persona tidak dikirim atau kosongSatu prompt (otomatis atau dari prompts[0] bila Anda mengirim array prompts), jawaban mentah VLM langsung menjadi label event.
FREE_COTpersona: "free"Menjalankan setiap prompt di prompts sebagai pertanyaan yes/no terpisah, lalu voting mayoritas. Wajib mengirim prompts (minimal 2 entri) dan event_name non-kosong — bila tidak, pipeline melempar error saat konfigurasi.
PRESET_PERSONApersona bernilai salah satu presetMenjalankan 3 pertanyaan observasi bawaan persona, lalu merangkumnya menjadi satu baris [severity: X] deskripsi yang diparse menjadi field severity dan answer. event_name dan prompts yang Anda kirim diabaikan (memakai milik persona).
ParameterTipeDefaultDeskripsi
personastring"" (LEGACY_RAW)Kosongkan untuk LEGACY_RAW; "free" untuk FREE_COT; atau salah satu preset: public_safety, traffic_monitoring, industrial_safety, retail_loss_prevention. ID persona lain akan melempar error "unknown persona id".
promptsarray string["what activity in 3 words?"]LEGACY_RAW: hanya elemen pertama dipakai. FREE_COT: seluruh array dijalankan sebagai CoT vote (wajib ≥ 2 entri). Diabaikan pada PRESET_PERSONA.
event_namestring""Wajib diisi non-kosong untuk FREE_COT (dipakai sebagai label event). Diabaikan pada LEGACY_RAW (memakai default "vlm") dan PRESET_PERSONA (memakai nama event bawaan persona).
min_votesinteger0 (berarti mayoritas ketat: N/2 + 1, mis. 3→2, 4→3, 5→3)Hanya berlaku pada FREE_COT — jumlah minimum jawaban "yes" agar event bernilai true.
is_raw_answer_dumpbooleantrueHanya relevan pada LEGACY_RAW — bila true, jawaban VLM mentah langsung menjadi label event tanpa normalisasi "yes"/"no".
always_dumpbooleanfalse (walau endpoint config verbose menampilkan true — lihat catatan default di atas)Bila true, event tetap diterbitkan meski jawaban bukan "yes" (khusus LEGACY_RAW/FREE_COT).

Persona preset yang tersedia beserta vocabulary severity-nya:

PersonaVocabulary Severity
public_safetynormal, suspicious, aggressive, critical
traffic_monitoringnormal, degraded, incident, emergency
industrial_safetynormal, violation, hazard, emergency
retail_loss_preventionnormal, suspicious, confrontation, theft

Bila jawaban ringkasan VLM tidak mengikuti format [severity: X] deskripsi yang diharapkan, severity diisi "parse_failed"; bila X di luar vocabulary persona, diisi "out_of_vocab".

NFV4D-RCMA memakai VLM single-Frame dengan prompt yang dibangun dari event_name.

ParameterTipeDefaultDeskripsi
event_namestringunexpected vehicle crashDisisipkan ke prompt otomatis "is there any {event_name} in the frame?". Wajib tidak kosong — bila kosong, pipeline melempar error saat dispatch.
addressstringLihat Persyaratan — DependensiBase URL layanan AI eksternal.

Label event RCMA tidak dapat dikonfigurasi — selalu "crash is Detected" (dari konstanta label = "crash" di kode), berapapun event_name yang Anda kirim. event_name hanya memengaruhi isi prompt yang dikirim ke VLM, bukan label event yang diterbitkan.

Berbeda dari varian VLM multi-Frame, RCMA tidak mendukung always_dump, images_num, persona, atau prompts — event hanya diterbitkan saat VLM menjawab mengandung "yes".


Environment Variable

Hanya NFV4D-RIOT yang membaca konfigurasi dari environment variable node (dibaca sekali saat proses start, dengan utils::get_env):

VariableSetara parameter APIDefault
V4_RIOT_ADDRESSaddresshttp://localhost:4008
V4_RIOT_ALWAYS_DUMPalways_dump0 (false)
V4_RIOT_DUMP_INTERVALdump_interval10
V4_RIOT_IMAGES_NUMimages_num4
V4_RIOT_INTERVAL_CAPTUREinterval_capture0.5
V4_RIOT_IS_DUMP_COLLAGEis_dump_collage0 (false)
V4_RIOT_ENABLE_VISUALOverlay bounding box hasil VLM di live view1 (true)

Varian lain (termasuk NFV4D-VLM) tidak memiliki environment variable khusus — semua konfigurasi dikirim lewat body pipeline.


Argumen Aplikasi

Argumen berikut berlaku untuk seluruh node dan tidak spesifik ke Snapshot Detection, tetapi menentukan alamat default layanan AI eksternal untuk 9 dari 15 varian (lihat Persyaratan — Dependensi):

ArgumenDefaultFungsi
--fremis-coordinator-address127.0.0.1:4006Alamat fallback untuk address pada OVOD, OVIC, WLM, PSMO, PPHO, FISO, PPFA, FLOD, RCMA bila tidak dikirim di body pipeline. Argumen yang sama juga dipakai layanan atribut Face Recognition.

Penjelasan lengkap ada di Configuration Reference.

On this page