Nodeflux Central
People Analytics (MPA/MPAA)

API Reference — People Analytics

Endpoint REST API untuk membuat, mengelola, dan memantau pipeline People Analytics (MPA/MPAA).

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 People Analytics. Setiap pipeline diidentifikasi oleh kombinasi node_num, stream_id, dan analytic_id.

Gunakan NFV4-MPA untuk analitik counting/dwelling/density tanpa atribut, atau NFV4-MPAA untuk menambahkan attribute classification (usia, gender, masker, kacamata, penutup kepala, warna pakaian).

POST
/pipeline/{node_num}/{stream_id}/NFV4-MPA

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node (0 untuk single-node deployment).

stream_id*string

ID stream video yang akan diproses.

analytic_id*string

ID analitik: NFV4-MPA untuk People Analytics tanpa atribut, NFV4-MPAA untuk People Analytics dengan attribute classification.

Value in"NFV4-MPA" | "NFV4-MPAA"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X POST "http://localhost:4004/pipeline/0/stream_001/NFV4-MPA" \  -H "Content-Type: application/json" \  -d '{    "object_confidence_threshold": 0.53,    "sub_analytics": [      {        "name": "counting",        "is_active": true,        "dumping_sampling_time": 500,        "lines": [          {            "id": "entrance",            "name": "Main Entrance",            "points": [              [                0.2,                0.5              ],              [                0.8,                0.5              ]            ],            "direction": "both"          }        ]      },      {        "name": "roi_counting",        "is_active": false      },      {        "name": "dwelling",        "is_active": false      },      {        "name": "density",        "is_active": false      }    ]  }'
{  "code": 200,  "message": "Pipeline created successfully",  "data": {    "pipeline_id": "NFV4-MPA",    "stream_id": "stream_001",    "status": "running"  }}
{  "code": 400,  "message": "Invalid configuration: lines array is required for counting"}
GET
/pipeline/{node_num}/{stream_id}/NFV4-MPA

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node (0 untuk single-node deployment).

stream_id*string

ID stream video yang akan diproses.

analytic_id*string

ID analitik: NFV4-MPA untuk People Analytics tanpa atribut, NFV4-MPAA untuk People Analytics dengan attribute classification.

Value in"NFV4-MPA" | "NFV4-MPAA"

Response Body

application/json

application/json

curl -X GET "http://localhost:4004/pipeline/0/stream_001/NFV4-MPA"
{  "code": 200,  "data": {    "analytic_id": "NFV4-MPA",    "stream_id": "stream_001",    "status": "running",    "uptime_seconds": 3600,    "processed_frames": 25200  }}
{  "code": 404,  "message": "Pipeline not found"}
DELETE
/pipeline/{node_num}/{stream_id}/NFV4-MPA

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node (0 untuk single-node deployment).

stream_id*string

ID stream video yang akan diproses.

analytic_id*string

ID analitik: NFV4-MPA untuk People Analytics tanpa atribut, NFV4-MPAA untuk People Analytics dengan attribute classification.

Value in"NFV4-MPA" | "NFV4-MPAA"

Response Body

application/json

application/json

curl -X DELETE "http://localhost:4004/pipeline/0/stream_001/NFV4-MPA"
{  "code": 200,  "message": "Pipeline deleted successfully"}
{  "code": 404,  "message": "Pipeline not found"}

Konfigurasi Pipeline

Endpoint untuk memperbarui parameter pipeline yang sedang berjalan tanpa perlu me-restart. Berguna untuk menyesuaikan threshold, mengaktifkan/menonaktifkan sub-analytics, atau mengubah posisi garis dan zona secara dinamis.

PUT
/pipeline/{node_num}/{stream_id}/NFV4-MPA/config

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node.

stream_id*string

ID stream video.

analytic_id*string

ID analitik.

Value in"NFV4-MPA" | "NFV4-MPAA"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X PUT "http://localhost:4004/pipeline/0/stream_001/NFV4-MPA/config" \  -H "Content-Type: application/json" \  -d '{    "object_confidence_threshold": 0.6,    "sub_analytics": [      {        "name": "counting",        "is_active": true,        "object_confidence_threshold": 0.6      }    ]  }'
{  "code": 200,  "message": "Configuration updated successfully"}
{  "code": 400,  "message": "Cannot update configuration: invalid parameter value"}

Visual Output

Endpoint untuk mendapatkan output visual dari pipeline yang berjalan — berguna untuk verifikasi konfigurasi garis counting dan polygon ROI.

GET
/pipeline/{node_num}/{stream_id}/NFV4-MPA/mjpeg

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node.

stream_id*string

ID stream video.

analytic_id*string

ID analitik.

Value in"NFV4-MPA" | "NFV4-MPAA"

Query Parameters

quality?integer

Kualitas JPEG (1–100).

Default80
Range1 <= value <= 100
fps?integer

Target frame rate stream.

Default7
Range1 <= value <= 30

Response Body

multipart/x-mixed-replace

curl -X GET "http://localhost:4004/pipeline/0/stream_001/NFV4-MPA/mjpeg"
"string"
GET
/pipeline/{node_num}/{stream_id}/NFV4-MPA/snapshot

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

node_num*integer

Nomor node.

stream_id*string

ID stream video.

analytic_id*string

ID analitik.

Value in"NFV4-MPA" | "NFV4-MPAA"

Response Body

image/jpeg

curl -X GET "http://localhost:4004/pipeline/0/stream_001/NFV4-MPA/snapshot"
"string"

Event Streaming (WebSocket)

Visionaire4 mengirim setiap event hasil deteksi/inferensi melalui WebSocket. Untuk berlangganan event yang dihasilkan oleh pipeline People Analytics pada stream tertentu, buka koneksi WebSocket ke endpoint berikut:

ws://<host>:4004/event_channel/{node_num}/{stream_id}/NFV4-MPA

Setelah koneksi terbuka, server akan langsung mendorong (push) setiap event ke client tanpa perlu handshake atau pesan subscribe. Tutup koneksi untuk berhenti menerima event.

Parameter Path

ParameterTipeDeskripsi
node_numintegerNomor node tempat stream berjalan (0 = master)
stream_idstringID stream yang akan dipantau

Query Parameter (Opsional)

ParameterTipeDeskripsi
logicstringFilter event berdasarkan nama logic rule yang aktif pada pipeline. Tanpa parameter ini, semua event dari analitik akan dikirim.

Format Pesan

Setiap event yang diterima berbentuk JSON dengan struktur berikut:

{
  "event_id": "evt_123456",
  "stream_id": "<stream_id>",
  "analytic_id": "NFV4-MPA",
  "node_num": 0,
  "timestamp_ms": 1674123456789,
  "primary_text": "5 people detected",
  "secondary_text": "Zone A",
  "pipeline_data": {
    /* field spesifik module — lihat "Output yang Dihasilkan" pada index.mdx */
  },
  "image_jpeg": "base64-encoded JPEG..."
}

Detail field pipeline_data untuk People Analytics dijelaskan pada Output yang Dihasilkan di halaman utama.

Contoh Koneksi

const ws = new WebSocket(
  'ws://localhost:4004/event_channel/0/<stream_id>/NFV4-MPA'
);

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_id>/NFV4-MPA"
    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())

Filter Berdasarkan Logic

Jika pipeline menjalankan beberapa logic rule (misalnya line-counting, ROI density), Anda dapat memfilter event hanya untuk satu logic dengan menambahkan query parameter:

ws://<host>:4004/event_channel/{node_num}/{stream_id}/NFV4-MPA?logic=<logic_name>

Endpoint Channel Lainnya

Untuk mendengarkan event yang lebih luas (lintas analitik atau lintas stream), gunakan endpoint berikut yang dijelaskan pada Developer Guide:

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)

On this page