Nodeflux Central
Snapshot Detection

API Reference — Snapshot Detection

Endpoint REST API untuk membuat, mengelola, dan memantau pipeline Snapshot Detection (varian NFV4D-*).

Semua endpoint pada halaman ini menggunakan basis URL dari variabel VISIONAIRE_API_URL yang dikonfigurasi pada instalasi Visionaire (default: http://localhost:4004). Tidak ada autentikasi tambahan yang diperlukan selain akses jaringan ke host tersebut — pastikan port sudah dapat dijangkau dari klien Anda.


Manajemen Pipeline

Endpoint untuk membuat, memantau, dan menghapus pipeline Snapshot Detection. Setiap pipeline diidentifikasi oleh kombinasi node_num, stream_id, dan analytic_id.

{analytic_id} adalah salah satu dari 15 varian NFV4D-* (lihat Daftar Varian di bawah). Semua varian menggunakan path endpoint yang sama — perbedaannya hanya pada isi config body saat pembuatan.

Buat Pipeline Snapshot Detection

POST /pipeline/{node_num}/{stream_id}/{analytic_id}

Parameter Path

ParameterTipeDeskripsi
node_numintegerNomor node tempat pipeline akan berjalan (0 = master).
stream_idstringID stream yang akan dianalisis.
analytic_idstringID varian Snapshot Detection (NFV4D-FISO, NFV4D-OVOD, dll.).

Contoh per Varian

FISO menggunakan OVOD dengan kelas yang sudah ditetapkan. Anda hanya perlu menentukan address Snapshot API dan opsional dump_confidence.

curl -X POST http://localhost:4004/pipeline/0/stream_factory_01/NFV4D-FISO \
  -H "Content-Type: application/json" \
  -d '{
    "config": {
      "address": "http://snapshot-api:4008",
      "dump_interval": 5,
      "dump_confidence": 0.30,
      "areas": [
        {
          "name": "Zona Produksi",
          "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}
          ]
        }
      ]
    }
  }'

PSMO mendeteksi orang merokok menggunakan OVOD dengan context person wrap cigarette.

curl -X POST http://localhost:4004/pipeline/0/stream_warehouse_03/NFV4D-PSMO \
  -H "Content-Type: application/json" \
  -d '{
    "config": {
      "address": "http://snapshot-api:4008",
      "dump_interval": 5,
      "dump_confidence": 0.30,
      "areas": [
        {
          "name": "Area No Smoking",
          "points": [
            {"x": 0.0, "y": 0.0},
            {"x": 1.0, "y": 0.0},
            {"x": 1.0, "y": 1.0},
            {"x": 0.0, "y": 1.0}
          ]
        }
      ]
    }
  }'

OVOD memerlukan daftar classes yang ingin dideteksi. Anda dapat menambahkan additional_params untuk relasi antar objek.

curl -X POST http://localhost:4004/pipeline/0/stream_lobby_07/NFV4D-OVOD \
  -H "Content-Type: application/json" \
  -d '{
    "config": {
      "address": "http://snapshot-api:4008",
      "dump_interval": 5,
      "classes": ["person", "backpack", "luggage"],
      "confidence": 0.5,
      "additional_params": {
        "box_th": 0.3,
        "text_th": 0.25
      },
      "areas": [
        {
          "name": "Main Lobby",
          "points": [
            {"x": 0.1, "y": 0.2},
            {"x": 0.9, "y": 0.2},
            {"x": 0.9, "y": 0.95},
            {"x": 0.1, "y": 0.95}
          ]
        }
      ]
    }
  }'

VMFG menggunakan VLM multi-Frame. images_num dan interval_capture mengontrol collage yang dikirim ke VLM.

curl -X POST http://localhost:4004/pipeline/0/stream_publicarea_02/NFV4D-VMFG \
  -H "Content-Type: application/json" \
  -d '{
    "config": {
      "address": "http://snapshot-api:4008",
      "dump_interval": 10,
      "images_num": 4,
      "interval_capture": 0.5,
      "is_dump_collage": true
    }
  }'

Response Sukses (201 Created)

{
  "status": "success",
  "message": "Pipeline NFV4D-FISO created on node 0 stream stream_factory_01"
}

Status Pipeline

GET /pipeline/{node_num}/{stream_id}/{analytic_id}

Mengembalikan status pipeline yang sedang berjalan, termasuk konfigurasi aktif dan informasi node.

curl http://localhost:4004/pipeline/0/stream_factory_01/NFV4D-FISO

Response

{
  "analytic_id": "NFV4D-FISO",
  "stream_id": "stream_factory_01",
  "node_num": 0,
  "status": "running",
  "config": {
    "address": "http://snapshot-api:4008",
    "dump_interval": 5,
    "dump_confidence": 0.30
  }
}

Hapus Pipeline

DELETE /pipeline/{node_num}/{stream_id}/{analytic_id}

Menghentikan dan menghapus pipeline. Pipeline yang sudah dihapus tidak dapat dipulihkan; buat ulang jika diperlukan.

curl -X DELETE http://localhost:4004/pipeline/0/stream_factory_01/NFV4D-FISO

Response Sukses (200 OK)

{
  "status": "success",
  "message": "Pipeline NFV4D-FISO deleted from node 0 stream stream_factory_01"
}

Update Konfigurasi Pipeline

PUT /pipeline/{node_num}/{stream_id}/{analytic_id}/config

Memperbarui parameter konfigurasi pipeline yang sedang berjalan tanpa perlu me-restart. Hanya field yang disertakan dalam body yang akan diperbarui.

curl -X PUT http://localhost:4004/pipeline/0/stream_factory_01/NFV4D-FISO/config \
  -H "Content-Type: application/json" \
  -d '{
    "config": {
      "dump_confidence": 0.45,
      "dump_interval": 8
    }
  }'

Daftar Varian

Semua 15 varian NFV4D-* yang tersedia, dengan nama dan use case singkat.

Analytic IDNama PipelineUse CaseSnapshot API Backend
NFV4D-OVODOpen Vocabulary Object DetectionDeteksi objek custom via prompt teksNFFS-OVOD
NFV4D-OVICOpen Vocabulary Image ClassificationKlasifikasi gambar custom via deskripsi teksNFFS-OVIC
NFV4D-WLMWater Level MonitoringPengukuran level air dari garis acuanNFFS-WLM
NFV4D-FLODFlood MonitoringDeteksi banjir / genangan jalanNFFS-OVIC
NFV4D-PSMOPerson Smoking DetectionDeteksi orang merokokNFFS-OVOD
NFV4D-PPHOPerson Using Phone DetectionDeteksi orang menggunakan handphoneNFFS-OVOD
NFV4D-FISOFire and Smoke DetectionDeteksi api dan asapNFFS-OVOD
NFV4D-PPFAPeople with Firearm DetectionDeteksi orang membawa senjata apiNFFS-OVOD
NFV4D-VMFGPeople FightingDeteksi perkelahianNFFS-VLM
NFV4D-VMVDVandalismDeteksi vandalismeNFFS-VM
NFV4D-VMBGATM BurglaryDeteksi pembobolan ATMNFFS-VM
NFV4D-RIOTRiotDeteksi kerusuhan massaNFFS-VLM
NFV4D-VLMVLM (Vision Language Model)Analisis Frame berbasis prompt VLM bebasNFFS-VLM
NFV4D-ARVMAction RecognitionPengenalan aksi via VLMNFFS-VM
NFV4D-RCMARoad Crash MonitoringDeteksi kecelakaan lalu lintasNFFS-VM

Parameter Konfigurasi

Parameter Umum (untuk semua varian)

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 (beberapa varian 10)Interval minimum antar siklus inferensi/dump. Minimum 1; untuk WLM minimum 10. Berfungsi sebagai cooldown.
always_dumpbooleanfalseBila true, event tetap diterbitkan walau tidak ada deteksi positif.
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. Minimum 0.1.
is_dump_collagebooleantrueUntuk varian VLM/AR: bila true snapshot yang dikirim adalah collage; bila false satu Frame tunggal.
areasarray polygon[]Daftar ROI dalam koordinat normalized 0–1. Hanya berlaku untuk varian dengan dukungan ROI.

Parameter Khusus per Varian

ParameterTipeDefaultDeskripsi
classesarray string— (wajib diisi)Daftar nama objek yang ingin dideteksi.
confidencefloat0.5Threshold confidence minimum untuk menerbitkan event.
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.relationstringTipe relasi: distance, iou, count_inside, atau wrap.
additional_params.context.operationstringOperator pembanding (mis. equal, more_than).
additional_params.context.valueanyNilai pembanding.
intersect_thresholdfloat0.1Threshold interseksi bbox dengan ROI.
ParameterTipeDefaultDeskripsi
descriptionsarray string— (wajib diisi)Daftar deskripsi referensi (mis. "a person standing").
labels_idobject— (wajib diisi)Mapping nama label ke daftar index descriptions.
confidencefloat0.2Threshold confidence (dikalikan 100 di sisi API).
softmaxbooleantrueAktifkan softmax di sisi API.
ParameterTipeDefaultDeskripsi
areasarray— (wajib diisi)Daftar garis acuan, masing-masing berisi value (level) dan points (dua titik dalam koordinat normalized 0–1).
levelinteger3Jumlah level acuan.
dump_intervalinteger10Minimum 10 detik untuk WLM (otomatis dinaikkan bila lebih kecil).

FLOD menggunakan model OVIC dengan referensi tetap — tidak memerlukan classes atau descriptions tambahan.

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

Keempat varian ini berbasis OVOD dengan prompt classes yang sudah ditetapkan oleh service. Anda hanya perlu mengoverride threshold bila diperlukan.

VarianPrompt Classes (internal)Relasi (internal)dump_confidence defaultbox_thresholdtext_threshold
PSMOperson, cigaretteperson wrap cigarette0.300.350.25
PPHOperson, handphoneperson wrap handphone0.300.300.25
FISOsmoke, fire, cloud, fog(tidak ada)0.300.300.15
PPFAperson, firearmperson wrap firearm0.300.100.10

Parameter yang dapat dioverride via konfigurasi pipeline: dump_confidence, dump_interval, address, areas.

Varian ini menggunakan VLM untuk menjawab pertanyaan tentang Frame atau collage Frame.

Varianevent_name (internal)min_answer_choiceprompts_sizedump_interval default
VMFGpeople fighting2310
VMVDvandalism event1110
VMBGATM burglary event1110
RIOTriot event2310
ARVM— (wajib diisi)1110

Parameter yang dapat dioverride via konfigurasi pipeline: event_name (wajib untuk ARVM), dump_interval, address, images_num, interval_capture, is_dump_collage.

ParameterTipeDefaultDeskripsi
event_namestringvlmNama event.
is_raw_answer_dumpbooleantrueBila true, jawaban VLM langsung dijadikan label event.

min_answer_choice diset ke 1000 sehingga setiap dispatch menghasilkan event berisi jawaban mentah VLM — tidak ada agregasi yes/no.

ParameterTipeDefaultDeskripsi
event_namestringunexpected vehicle crashNama event (digunakan dalam prompt VLM).
labelstringcrashLabel event yang dipublikasikan saat VLM menjawab "yes".
dump_intervalinteger10Cooldown antar dispatch.

Format Event

Field Top-Level

Semua event Snapshot Detection memiliki struktur top-level yang sama:

FieldTipeDeskripsi
analytic_idstringID 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
attributes.classification.confidencefloatFLOD
levelnumberWLM
eventbooleanVLM-based (VMFG, VMVD, VMBG, RIOT, VLM, ARVM, RCMA)
answerstringVLM-based — jawaban mentah dari VLM
attributesobjectVLM-based (opsional)
detectionsarrayVLM-based (opsional)

Contoh Event

{
  "analytic_id": "NFV4D-FISO",
  "stream_id": "stream_factory_01",
  "node_num": 1,
  "timestamp": 1714800000000,
  "primary_text": "fire",
  "secondary_text": "0.812000",
  "image_jpeg": "<base64-encoded JPEG>",
  "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",
  "image_jpeg": "<base64-encoded JPEG>",
  "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",
  "image_jpeg": "<base64-encoded JPEG>",
  "pipeline_data": {
    "dump": true
  }
}
{
  "analytic_id": "NFV4D-VMFG",
  "stream_id": "stream_publicarea_02",
  "node_num": 1,
  "timestamp": 1714800600000,
  "primary_text": "People Fighting is Detected",
  "secondary_text": "",
  "image_jpeg": "<base64-encoded collage JPEG>",
  "pipeline_data": {
    "event": true,
    "answer": "yes"
  }
}

Subscribe Event Channel (WebSocket)

WS /event_channel/{node_num}/{stream_id}/{analytic_id}

Visionaire4 mendorong setiap event hasil deteksi melalui WebSocket. Setelah koneksi terbuka, server langsung mengirim event tanpa handshake atau pesan subscribe tambahan.

Parameter Path

ParameterTipeDeskripsi
node_numintegerNomor node tempat pipeline berjalan (0 = master).
stream_idstringID Stream yang dipantau.
analytic_idstringID varian Snapshot Detection (mis. NFV4D-FISO).

Contoh Koneksi

const ws = new WebSocket(
  'ws://localhost:4004/event_channel/0/stream_factory_01/NFV4D-FISO'
);

ws.onmessage = (msg) => {
  const event = JSON.parse(msg.data);
  console.log(event.primary_text, event.pipeline_data);
};

ws.onerror = (err) => console.error('WebSocket error', err);
ws.onclose = () => console.log('Disconnected');
import asyncio
import json
import websockets

async def listen():
    url = "ws://localhost:4004/event_channel/0/stream_factory_01/NFV4D-FISO"
    async with websockets.connect(url) as ws:
        async for msg in ws:
            event = json.loads(msg)
            print(event["primary_text"], event["pipeline_data"])

asyncio.run(listen())
curl --no-buffer \
  -H "Connection: Upgrade" \
  -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
  -H "Sec-WebSocket-Version: 13" \
  http://localhost:4004/event_channel/0/stream_factory_01/NFV4D-FISO

Endpoint Channel Lainnya

EndpointCakupan
WS /event_channel/Semua event dari seluruh node
WS /event_channel/{node_num}/Semua event dari satu node
WS /event_channel/{node_num}/{stream_id}Semua event dari satu stream (semua analitik)

Visualisasi (MJPEG)

GET /mjpeg/{node_num}/{stream_id}/{analytic_id}?fps=15&height=480

Menghasilkan stream MJPEG dari pipeline yang sedang berjalan. Berguna untuk memverifikasi bahwa ROI dan overlay sudah dikonfigurasi dengan benar.

Query Parameter

ParameterTipeDefaultDeskripsi
fpsinteger15Frame per detik output MJPEG.
heightinteger480Tinggi output dalam piksel (aspek rasio dipertahankan).

Contoh

# Buka di browser atau media player yang mendukung MJPEG
http://localhost:4004/mjpeg/0/stream_factory_01/NFV4D-FISO?fps=10&height=720

Modul Terkait

On this page