Nodeflux Central
People Analytics (MPA/MPAA)

People Analytics (MPAA / MPA2)

Analitik real-time untuk mendeteksi, menghitung, dan menganalisis orang dalam video — counting, dwelling, kepadatan, dan atribut demografis. Tersedia dalam dua varian: NFV4-MPAA dan NFV4-MPA2.

People Analytics (MPAA / MPA2)

People Analytics adalah modul analitik video real-time untuk mendeteksi orang, menghitung pergerakan, mengukur durasi tinggal, mengestimasi kepadatan, serta mengklasifikasi atribut visual seperti usia, gender, dan warna pakaian. Modul ini tersedia dalam dua varian publik: NFV4-MPAA (model atribut generasi pertama) dan NFV4-MPA2 (model atribut generasi baru dengan cakupan atribut yang jauh lebih luas).

Pada akhir halaman ini Anda akan memahami kemampuan People Analytics, perbedaan kedua varian, cara kerjanya, serta persyaratan kamera dan konfigurasi yang diperlukan. Untuk referensi endpoint REST API secara lengkap, lihat API Reference.


Pilih Varian

Kedua varian memiliki kemampuan analitik dasar yang identik (counting, ROI counting, dwelling, density) dan berbagi konfigurasi inti yang sama. Perbedaan utama terletak pada model klasifikasi atribut yang digunakan.

AspekNFV4-MPAANFV4-MPA2
Pipeline name (internal)People Analytic With AttributePeople Analytic With Attribute 2
Model atributGenerasi pertamaGenerasi baru (lebih banyak atribut)
Jumlah kelas atribut714
Atribut dasarage, gender, mask, glasses, head_covering, upper_color, lower_colorsemua atribut MPAA
Atribut tambahangloves, upper_cloth, lower_cloth, body_type, face_expression, footwear_color, belonging
Kelas usiaChild, Adult, ElderlyChild, Teen, Adult, Elderly
Palet warna pakaian11 warna13 warna (menambah Beige + reorganisasi label)
Label head_coveringHat, Hijab, NoneHat, Hijab, Helmet, Hoodie cap, Other, No head covering, Unknown
Resolusi input deteksi512 × 352512 × 352
FPS internal pipeline77
object_confidence_threshold default0.530.53

Kapan memilih NFV4-MPAA: ketika kebutuhan atribut terbatas pada demografi dasar (usia, gender) dan informasi pakaian sederhana, dan Anda ingin tetap kompatibel dengan integrasi yang sudah dirancang untuk skema atribut versi pertama.

Kapan memilih NFV4-MPA2: ketika Anda membutuhkan atribut visual yang lebih kaya — misalnya jenis pakaian (T-shirt, Jacket, Dress), warna alas kaki, ekspresi wajah, atau deteksi barang bawaan (belonging seperti Backpack, Handbag, Handphone, Carrying child, dll.). MPA2 juga memiliki granularitas usia lebih baik (memisahkan Teen dari Adult) dan label head_covering yang lebih lengkap (termasuk Helmet untuk konteks keselamatan kerja).

Kedua varian sama-sama mendukung empat sub-analytics. Memilih MPA2 tidak mengubah cara Anda menyusun konfigurasi sub-analytics; hanya payload attributes di output yang lebih kaya.


Kemampuan

Sub-AnalyticDeskripsiContoh Penggunaan
CountingMenghitung orang yang melewati garis virtualHitung pengunjung masuk/keluar pintu
ROI CountingMenghitung orang yang masuk/keluar area polygonMonitor zona tertentu dalam ruangan
DwellingMendeteksi orang yang berdiam di area tertentuAlert loitering, pantau antrian
DensityEstimasi jumlah orang dalam area secara periodikMonitor occupancy ruangan atau zona publik

Atribut yang Didukung

Kedua varian memberikan setiap deteksi orang sekumpulan atribut. Bila confidence atribut di bawah threshold yang dikonfigurasi, label otomatis menjadi Unknown (untuk multi-class) atau dinegasikan menjadi No <label> (untuk binary seperti mask/glasses/gloves).

Atribut bersama (MPAA dan MPA2):

AtributMPAA — Nilai yang DidukungMPA2 — Nilai yang Didukung
AgeChild, Adult, ElderlyChild, Teen, Adult, Elderly
GenderMale, FemaleMale, Female
MaskMask, No maskMask, No mask
GlassesGlasses, No glassesGlasses, No glasses
Head CoveringHat, Hijab, NoneHat, Hijab, Helmet, Hoodie cap, Other, No head covering, Unknown
Upper ColorYellow, White, Red, Grey, Blue, Brown, Green, Pink, Purple, Orange, BlackBlack, White, Grey, Red, Green, Blue, Brown, Pink, Purple, Orange, Yellow, Beige, Unknown
Lower Color(sama dengan Upper Color)(sama dengan Upper Color)

Atribut tambahan eksklusif MPA2:

AtributNilai yang Didukung
GlovesGloves, No gloves
Upper ClothT-shirt, Shirt, Jacket, Hoodie, Sweater, Dress, Robe, Safety vest, Other, Unknown
Lower ClothTrousers, Shorts, Short skirt, Long skirt, Other, Unknown
Body TypeSlim, Average, Heavy-set
Face ExpressionHappy, Angry, Sad, Neutral, Unknown
Footwear Color(sama dengan palet warna MPA2 di atas)
BelongingBackpack, Handbag, Shoulder bag, Suitcase, Box, Carrying baby, Accompanying baby, Carrying child, Accompanying child, Firearms, Sharp weapon, Handphone, Other (multi-label: array berisi semua item yang terdeteksi di atas threshold)

Yang TIDAK Dilakukan


Use Cases


Cara Kerja

Input Deteksi Atribut Multi-Logics Output Video Stream Frame Decoder Person Detection Object Tracker Attribute Classification Counting ROI Counting Dwelling Density Event Aggregator Event Bus

Setiap frame video didekode dan dilewatkan ke komponen deteksi orang. Tracker kemudian melacak identitas setiap individu lintas frame menggunakan bounding box dan confidence score. Setiap deteksi dikirim ke attribute classifier yang menghasilkan nilai atribut beserta confidence-nya — model yang digunakan ditentukan oleh varian (MPAA atau MPA2).

Hasil tracking kemudian diproses secara paralel oleh empat sub-analytics: Counting (crossing garis virtual), ROI Counting (masuk/keluar polygon), Dwelling (durasi tinggal di area), dan Density (estimasi jumlah orang periodik). Event dihasilkan sesuai logic yang aktif dan dikirim melalui event bus ke sistem downstream.


Persyaratan

Kamera

RequirementMinimumRekomendasi
Resolusi480 × 360 px720p atau lebih
Frame Rate7 fps15–30 fps
CodecH.264H.264 / H.265

Pemasangan untuk Counting:

  • Sudut kamera 30–45 derajat dari horizontal — hindari top-down penuh karena mengurangi akurasi tracking
  • Tinggi optimal 2,5–3,5 meter
  • Pastikan seluruh lebar jalur masuk/keluar terlihat tanpa obstruksi

Pemasangan untuk Density / Crowd:

  • Posisi lebih tinggi (3–5 meter) dengan sudut lebih curam untuk cakupan area lebih luas
  • Hindari backlight atau sumber cahaya langsung ke lensa
  • Pencahayaan minimal 100 lux di area yang dimonitor

Lingkungan

  • GPU NVIDIA (TensorRT) atau Intel (OpenVINO) untuk akselerasi inferensi
  • RAM minimal 2 GB per pipeline
  • GPU memory: ~700 MB per pipeline (kedua varian membundel deteksi orang + classifier atribut). MPA2 menggunakan model atribut generasi baru — pantau penggunaan memori aktual saat deployment, terutama bila menjalankan banyak pipeline paralel.
  • CPU: minimal 3 core per pipeline

Dependencies

  • Visionaire API berjalan di port default 4004
  • Stream video sudah terdaftar dan dapat diakses oleh Visionaire

Setting Up

Siapkan Stream Video

Pastikan stream video sudah terdaftar di Visionaire dan dapat diakses. Catat stream_id yang akan digunakan.

Pilih Varian Pipeline

Pilih antara NFV4-MPAA atau NFV4-MPA2 berdasarkan kebutuhan atribut Anda. Gunakan MPAA jika cukup dengan atribut dasar (usia, gender, mask, glasses, head_covering, upper/lower color). Gunakan MPA2 jika Anda membutuhkan atribut tambahan seperti jenis pakaian, ekspresi wajah, warna alas kaki, atau deteksi barang bawaan.

Lihat tabel di bagian Pilih Varian untuk daftar perbedaan lengkap antara kedua model.

Rancang Konfigurasi Sub-Analytics

Tentukan sub-analytics mana yang akan diaktifkan dan konfigurasinya:

  • Counting: tentukan posisi garis virtual (areas berisi dua titik) dalam koordinat normalized (0.0–1.0)
  • ROI Counting / Dwelling / Density: tentukan polygon zona (areas dengan minimal 3 titik)
  • Nonaktifkan sub-analytics yang tidak dibutuhkan dengan "is_active": false untuk menghemat resource

Lihat bagian Konfigurasi di bawah untuk detail semua parameter.

Buat Pipeline via API

Kirim request POST /pipeline/{node_num}/{stream_id}/{analytic_id} dengan konfigurasi yang telah dirancang. analytic_id adalah NFV4-MPAA atau NFV4-MPA2. Detail endpoint dan contoh request ada di halaman API Reference.

Verifikasi dengan MJPEG Stream

Akses endpoint /pipeline/{node_num}/{stream_id}/{analytic_id}/mjpeg di browser untuk memverifikasi pipeline berjalan dan overlay garis/ROI sudah benar.


Konfigurasi

Parameter API

Global

SettingApa yang DilakukanDefaultKapan Disesuaikan
object_confidence_thresholdConfidence minimum untuk deteksi orang0.53Turunkan ke 0.4 jika banyak miss detection; naikkan ke 0.7 untuk mengurangi false positive
colordet_crop_wRasio lebar crop untuk deteksi warna pakaian0.4Jarang perlu diubah
colordet_crop_hRasio tinggi crop untuk deteksi warna pakaian0.4Jarang perlu diubah

Counting Logic

SettingApa yang DilakukanDefaultKapan Disesuaikan
dumping_sampling_timeInterval agregasi event (ms)500Naikkan ke 1000ms untuk traffic lambat; turunkan untuk respon lebih cepat
dump_ignore_iou_thresholdThreshold IoU untuk deduplication crossing0.8Naikkan ke 0.9 jika terjadi double count
enable_group_trackingAktifkan group/crowd trackingfalseAktifkan untuk area padat
minimum_tracking_heightTinggi minimum bbox (rasio terhadap frame)0.05Turunkan jika orang terlihat kecil di frame
maximum_tracking_objectsJumlah maksimum objek yang di-track30Naikkan ke 50–100 untuk area ramai

Konfigurasi garis (field areas di dalam logic counting):

SettingApa yang DilakukanDefault
nameNama tampilan garis
pointsDua titik garis [{"x":x1,"y":y1},{"x":x2,"y":y2}] dalam koordinat normalized 0–1
directionArah yang dihitung: "in", "out", atau "both""both"
bidirectiontrue jika menghitung kedua arahtrue

Contoh ringkas:

{
  "name": "counting",
  "is_active": true,
  "areas": [
    {
      "name": "Main Entrance",
      "points": [{"x": 0.2, "y": 0.5}, {"x": 0.8, "y": 0.5}],
      "direction": "both"
    }
  ]
}

Untuk roi_counting, dwelling, dan density, gunakan field areas berisi polygon (minimal 3 titik) dengan format points yang sama.

Dwelling Logic

SettingApa yang DilakukanDefaultKapan Disesuaikan
dwelling_treshold_alert_secDurasi (detik) sebelum alert dikirim (0 = nonaktif)0Set 30–120 untuk security alert
minimum_dwelling_secDurasi minimum dwelling untuk generate event2Naikkan untuk filter gerakan singkat
idle_time_secGrace period setelah keluar ROI sebelum timer direset1Naikkan ke 3–5 untuk toleransi gerakan kecil
object_intersect_thresholdThreshold interseksi orang dengan ROI0.85Turunkan ke 0.7 jika orang di tepi ROI tidak terdeteksi
minimum_object_area_sizeArea minimum bbox dalam piksel²2000Turunkan jika orang jauh dari kamera

Penulisan dwelling_treshold_alert_sec dengan typo (treshold bukan threshold) sesuai dengan kunci konfigurasi yang diterima oleh source code.

Density Logic

SettingApa yang DilakukanDefaultKapan Disesuaikan
intervalInterval pelaporan kepadatan (detik)10Naikkan ke 60 untuk occupancy monitoring; turunkan untuk respon cepat
insideHitung orang di dalam ROI (true) atau di luar (false)trueUbah ke false untuk menghitung orang di luar zona tertentu
dump_attributesSertakan ringkasan atribut per objek dalam eventtrueNonaktifkan untuk hemat bandwidth

Attribute Thresholds

Semua threshold di bawah ini berlaku untuk kedua varian dengan default 0.5. Naikkan threshold untuk hasil lebih konservatif (lebih banyak label menjadi Unknown atau dinegasikan); turunkan untuk recall lebih tinggi.

Threshold bersama (MPAA & MPA2):

SettingApa yang DilakukanDefault
age_confidence_thresholdThreshold confidence klasifikasi usia0.5
gender_confidence_thresholdThreshold confidence deteksi gender0.5
mask_confidence_thresholdThreshold confidence deteksi masker0.5
glasses_confidence_thresholdThreshold confidence deteksi kacamata0.5
head_covering_confidence_thresholdThreshold confidence penutup kepala0.5
upper_color_confidence_thresholdThreshold confidence warna pakaian atas0.5
lower_color_confidence_thresholdThreshold confidence warna pakaian bawah0.5

Threshold tambahan eksklusif MPA2:

SettingApa yang DilakukanDefault
gloves_confidence_thresholdThreshold confidence deteksi sarung tangan0.5
upper_cloth_confidence_thresholdThreshold confidence jenis pakaian atas0.5
lower_cloth_confidence_thresholdThreshold confidence jenis pakaian bawah0.5
body_type_confidence_thresholdThreshold confidence body type0.5
face_expression_confidence_thresholdThreshold confidence ekspresi wajah0.5
footwear_color_confidence_thresholdThreshold confidence warna alas kaki0.5
belonging_confidence_thresholdThreshold confidence item bawaan (item dengan confidence di bawah threshold akan difilter dari array)0.5

Mengirim threshold MPA2 ke pipeline MPAA tidak akan error tetapi diabaikan, karena MPAA tidak memiliki kelas atribut tersebut. Sebaliknya, threshold dasar (age, gender, mask, dst.) berlaku di kedua varian.


Output yang Dihasilkan

Setiap event memiliki struktur top-level berikut, dengan detail spesifik logic berada di field pipeline_data:

Field Top-LevelTipeDeskripsi
analytic_idstringNFV4-MPAA atau NFV4-MPA2
stream_idstringID stream yang diproses
stream_namestringNama stream
node_numintegerNomor node yang memproses
timestampinteger (ms)Unix timestamp event (millisecond)
primary_textstringTeks utama event (mis. label objek atau nama area)
secondary_textstringTeks pelengkap (mis. arah, durasi, atau jumlah)
image_jpegstring (base64)Cuplikan frame saat event terjadi
pipeline_dataobjectPayload utama hasil sub-analytic (lihat di bawah)

Field pipeline_data per Logic

Setiap event mewakili satu hasil dari sub-analytic — bukan array. Misalnya satu event counting berisi satu orang yang melewati garis.

FieldTipeTersedia Pada
logicstringsemua (counting, roi_counting, dwelling, density)
labelstringcounting, roi_counting, dwelling (selalu "person")
confidencefloatcounting, roi_counting, dwelling
tracker_idintegercounting, roi_counting, dwelling
group_idintegercounting, roi_counting, dwelling
area_namestringcounting, roi_counting, dwelling
directionstringcounting, roi_counting ("in" / "out")
time_in / time_out / time_alertinteger (ms)dwelling
durationfloat (detik)dwelling
attributesobjectcounting, roi_counting, dwelling (cakupan field bergantung pada varian — MPA2 menyertakan field tambahan)
areastringdensity (nama ROI)
estimationintegerdensity (jumlah orang dalam ROI)
intervalinteger (detik)density
detectedarraydensity (rincian per objek dengan tracker_id, bbox, label, confidence, dan attributes saat dump_attributes: true)
event_idstringsemua (hash unik per event)

Contoh Event

{
  "analytic_id": "NFV4-MPAA",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "person",
  "secondary_text": "in",
  "pipeline_data": {
    "logic": "counting",
    "label": "person",
    "confidence": 0.85,
    "tracker_id": 5,
    "area_name": "Main Entrance",
    "direction": "in",
    "attributes": {
      "person": { "label": "person", "confidence": 0.85 },
      "age": { "label": "Adult", "confidence": 0.88 },
      "gender": { "label": "Male", "confidence": 0.92 },
      "mask": { "label": "No mask", "confidence": 0.95 },
      "glasses": { "label": "No glasses", "confidence": 0.88 },
      "head_covering": { "label": "None", "confidence": 0.81 },
      "upper_color": { "label": "Blue", "confidence": 0.79 },
      "lower_color": { "label": "Black", "confidence": 0.84 }
    },
    "event_id": "1705314600000-3a1f9d4c"
  }
}
{
  "analytic_id": "NFV4-MPA2",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "person",
  "secondary_text": "in",
  "pipeline_data": {
    "logic": "counting",
    "label": "person",
    "confidence": 0.85,
    "tracker_id": 5,
    "area_name": "Main Entrance",
    "direction": "in",
    "attributes": {
      "person": { "label": "person", "confidence": 0.85 },
      "age": { "label": "Adult", "confidence": 0.88 },
      "gender": { "label": "Male", "confidence": 0.92 },
      "mask": { "label": "No mask", "confidence": 0.95 },
      "glasses": { "label": "No glasses", "confidence": 0.88 },
      "gloves": { "label": "No gloves", "confidence": 0.91 },
      "head_covering": { "label": "No head covering", "confidence": 0.83 },
      "upper_color": { "label": "Blue", "confidence": 0.79 },
      "lower_color": { "label": "Black", "confidence": 0.84 },
      "upper_cloth": { "label": "T-shirt", "confidence": 0.77 },
      "lower_cloth": { "label": "Trousers", "confidence": 0.81 },
      "body_type": { "label": "Average", "confidence": 0.74 },
      "face_expression": { "label": "Neutral", "confidence": 0.69 },
      "footwear_color": { "label": "Black", "confidence": 0.72 },
      "belonging": [
        { "label": "Backpack", "confidence": 0.82 },
        { "label": "Handphone", "confidence": 0.66 }
      ]
    },
    "event_id": "1705314600000-3a1f9d4c"
  }
}
{
  "analytic_id": "NFV4-MPAA",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "Restricted Zone",
  "secondary_text": "45.000 s",
  "pipeline_data": {
    "logic": "dwelling",
    "label": "person",
    "confidence": 0.75,
    "tracker_id": 12,
    "area_name": "Restricted Zone",
    "time_in": 1705314555000,
    "time_out": null,
    "time_alert": null,
    "duration": 45.0,
    "attributes": {
      "person": { "label": "person", "confidence": 0.75 },
      "from": { "label": "", "confidence": 0 },
      "to": { "label": "", "confidence": 0 }
    }
  }
}
{
  "analytic_id": "NFV4-MPA2",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "Lobby",
  "secondary_text": "25",
  "pipeline_data": {
    "logic": "density",
    "interval": 10,
    "area": "Lobby",
    "estimation": 25,
    "detected": [
      {
        "tracker_id": 7,
        "label": "person",
        "confidence": 0.82,
        "bbox": { "top": 150, "left": 100, "width": 80, "height": 220 }
      }
    ]
  }
}

Best Practices

Penempatan Kamera

  • Gunakan sudut 30–45 derajat dari horizontal — top-down penuh menurunkan akurasi tracking
  • Tinggi optimal 2,5–3,5 meter untuk counting; 3–5 meter untuk density/crowd coverage
  • Pastikan coverage area tanpa blind spot dan hindari backlight atau cahaya langsung ke lensa
  • Resolusi objek terkecil yang dimonitor minimal 50×100 piksel di frame

Konfigurasi Counting

  • Letakkan garis 1–2 meter di dalam ruangan dari pintu untuk menghindari false count dari orang yang hanya lewat di depan
  • Gunakan direction: "both" untuk pintu dua arah; pisahkan garis in/out untuk jalur searah
  • Sesuaikan dumping_sampling_time dengan kecepatan jalan rata-rata di area tersebut

Konfigurasi Dwelling

  • ROI harus mencakup seluruh area target — margin sedikit lebih besar lebih baik
  • Set minimum_dwelling_sec sesuai definisi "loitering" untuk konteks Anda
  • Gunakan idle_time_sec yang cukup agar orang yang bergerak sedikit tidak mereset timer

Akurasi Atribut

  • Atribut wajah (age, gender, mask, glasses, face_expression) membutuhkan resolusi wajah minimal 50×50 piksel — kamera tidak boleh terlalu jauh
  • Atribut pakaian dan body_type bekerja optimal pada bbox orang penuh (tidak ter-occlude di bawah pinggang)
  • Pastikan pencahayaan frontal dan merata; hindari situasi backlit
  • Filter hasil dengan attribute threshold yang sesuai konteks (mis. naikkan threshold mask untuk compliance monitoring ketat)

Limitations

  • Occlusion parah: Jika lebih dari 50% tubuh tertutup (oleh orang lain atau objek), akurasi tracking menurun dan dapat menyebabkan ID tracker berganti
  • Kerumunan sangat padat (>50 orang): Tracking individual menjadi tidak andal; pertimbangkan menggunakan Crowd Estimation (NFV4-CE) untuk estimasi kepadatan tinggi
  • Top-down penuh (bird's eye view): Angle ini menyulitkan tracker untuk mempertahankan identity linkage; gunakan sudut miring 30–45 derajat
  • Atribut dalam kondisi pencahayaan rendah: Akurasi attribute classification turun signifikan di bawah 100 lux
  • Warna pakaian bermotif: Warna pattern/motif akan dideteksi sebagai warna dominan yang mungkin tidak selalu akurat
  • Memilih varian: Setelah pipeline dibuat, varian tidak bisa diubah — Anda harus menghapus pipeline dan membuat ulang dengan analytic_id baru. Pilih varian sejak awal sesuai kebutuhan atribut (lihat Pilih Varian)
  • Atribut MPA2 lanjutan: body_type, face_expression, dan belonging memiliki keandalan yang bervariasi tergantung sudut dan kualitas frame; selalu validasi dengan threshold yang sesuai sebelum digunakan untuk decision-making otomatis

Modul Terkait

On this page