API Reference — Crowd Estimation
Endpoint REST API untuk membuat, mengelola, dan memantau pipeline Crowd Estimation (NFV4-CE).
← Kembali ke Crowd Estimation
Penjelasan kemampuan, cara kerja, konfigurasi, dan best practice Crowd Estimation.
People Analytics
Tracking dan counting per orang, attribute classification — pasangan untuk skenario kerumunan kurang padat.
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 Crowd Estimation. Setiap pipeline diidentifikasi oleh kombinasi node_num, stream_id, dan analytic_id (NFV4-CE).
Buat Pipeline
POST /pipeline/{node_num}/{stream_id}/NFV4-CE
Membuat pipeline Crowd Estimation baru pada stream yang telah terdaftar.
curl -X POST http://localhost:4004/pipeline/0/crowd-area-1/NFV4-CE \
-H "Content-Type: application/json" \
-d '{
"areas": {
"Plaza Utama": [
{"x": 0.1, "y": 0.1},
{"x": 0.9, "y": 0.1},
{"x": 0.9, "y": 0.9},
{"x": 0.1, "y": 0.9}
]
},
"interval": 10
}'Update Konfigurasi Pipeline
PATCH /pipeline/{node_num}/{stream_id}/NFV4-CE/config
Memperbarui parameter pipeline yang sedang berjalan tanpa perlu me-restart. Hanya field yang disertakan dalam body yang akan diubah.
curl -X PATCH http://localhost:4004/pipeline/0/crowd-area-1/NFV4-CE/config \
-H "Content-Type: application/json" \
-d '{
"interval": 30
}'Status Pipeline
GET /pipeline/{node_num}/{stream_id}/NFV4-CE
Mengembalikan status dan konfigurasi pipeline yang sedang berjalan.
curl http://localhost:4004/pipeline/0/crowd-area-1/NFV4-CEHapus Pipeline
DELETE /pipeline/{node_num}/{stream_id}/NFV4-CE
Menghentikan dan menghapus pipeline.
curl -X DELETE http://localhost:4004/pipeline/0/crowd-area-1/NFV4-CEParameter Konfigurasi
Body Request
Parameter yang dapat dikirim saat membuat (POST) atau memperbarui (PATCH) pipeline:
| Parameter | Tipe | Default | Wajib | Keterangan |
|---|---|---|---|---|
areas | object | — | Ya | ROI polygon per area. Key adalah nama area (string), value adalah array titik {x, y} dalam koordinat relatif (0.0–1.0). |
interval | integer | 10 | Tidak | Interval dalam detik antara setiap event dump. Rentang valid: 1–99999. |
Format Areas
Setiap entry dalam object areas merepresentasikan satu ROI polygon:
{
"areas": {
"<nama-area>": [
{"x": <float>, "y": <float>},
{"x": <float>, "y": <float>},
...
]
}
}- Key (
<nama-area>): string deskriptif yang akan muncul di fieldareapada setiap event — misalnya"Pintu Masuk Utara"atau"Area Panggung". - Value: array minimal 3 titik
{x, y}yang membentuk polygon tertutup. Koordinat menggunakan nilai relatif (0.0–1.0) terhadap dimensi frame, sehingga ROI tetap proporsional meski resolusi stream berubah.
Contoh dengan beberapa ROI:
{
"areas": {
"Pintu Masuk": [
{"x": 0.0, "y": 0.0},
{"x": 0.4, "y": 0.0},
{"x": 0.4, "y": 1.0},
{"x": 0.0, "y": 1.0}
],
"Area Tengah": [
{"x": 0.4, "y": 0.0},
{"x": 1.0, "y": 0.0},
{"x": 1.0, "y": 1.0},
{"x": 0.4, "y": 1.0}
]
},
"interval": 30
}Setiap ROI menghasilkan event terpisah pada setiap interval. Jika Anda mendefinisikan 3 ROI, setiap interval akan menerbitkan 3 event.
Format Event
Event dialirkan via WebSocket event channel. Setiap event berisi field pipeline_data dengan struktur berikut:
| Field | Tipe | Keterangan |
|---|---|---|
area | string | Nama ROI area sesuai yang didefinisikan dalam konfigurasi areas. |
estimation | integer | Estimasi rata-rata jumlah orang dalam ROI selama interval terakhir. |
history_min | integer | Estimasi minimum yang tercatat selama interval terakhir. |
history_max | integer | Estimasi maksimum yang tercatat selama interval terakhir. |
interval | integer | Durasi interval dalam detik (nilai konfigurasi saat pipeline dibuat). |
Contoh Event
{
"analytic_id": "NFV4-CE",
"stream_id": "crowd-area-1",
"node_num": 0,
"timestamp": "2026-05-04T08:30:00Z",
"pipeline_data": {
"area": "Plaza Utama",
"estimation": 23,
"history_min": 18,
"history_max": 31,
"interval": 10
}
}{
"analytic_id": "NFV4-CE",
"stream_id": "crowd-area-1",
"node_num": 0,
"timestamp": "2026-05-04T20:15:00Z",
"pipeline_data": {
"area": "Plaza Utama",
"estimation": 347,
"history_min": 290,
"history_max": 412,
"interval": 30
}
}Subscribe Event Channel (WebSocket)
WS /event_channel/{node_num}/{stream_id}/NFV4-CE
Visionaire4 mendorong setiap event secara real-time melalui WebSocket. Setelah koneksi terbuka, server langsung mengirimkan event tanpa perlu handshake atau pesan subscribe. Tutup koneksi untuk berhenti menerima event.
Parameter Path
| Parameter | Tipe | Keterangan |
|---|---|---|
node_num | integer | Nomor node tempat stream berjalan (0 = master). |
stream_id | string | ID stream yang akan dipantau. |
const ws = new WebSocket(
'ws://localhost:4004/event_channel/0/crowd-area-1/NFV4-CE'
);
ws.onmessage = (msg) => {
const event = JSON.parse(msg.data);
const { area, estimation } = event.pipeline_data;
console.log(`${area}: ${estimation} orang`);
};
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/crowd-area-1/NFV4-CE"
async with websockets.connect(url) as ws:
async for msg in ws:
event = json.loads(msg)
data = event["pipeline_data"]
print(f"{data['area']}: {data['estimation']} orang")
asyncio.run(listen())wscat -c ws://localhost:4004/event_channel/0/crowd-area-1/NFV4-CEEndpoint Channel Lainnya
Untuk mendengarkan event yang lebih luas (lintas analitik atau lintas stream), gunakan endpoint berikut yang dijelaskan pada Developer Guide:
| Endpoint | Cakupan |
|---|---|
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}/NFV4-CE
Mengembalikan MJPEG stream dengan overlay visualisasi — titik kepadatan dan label estimasi per ROI ditampilkan langsung pada frame.
# Buka di browser atau media player
http://localhost:4004/mjpeg/0/crowd-area-1/NFV4-CE?fps=15&height=480Anda juga dapat menanamnya langsung di halaman web:
<img src="http://localhost:4004/mjpeg/0/crowd-area-1/NFV4-CE?fps=10&height=360"
alt="Crowd Estimation Preview" />| Query Parameter | Default | Keterangan |
|---|---|---|
fps | 15 | Frame rate output MJPEG. |
height | 480 | Tinggi frame output dalam piksel (lebar mengikuti aspek rasio). |