Nodeflux Central
PPE Analytics

PPE Analytics

Analitik real-time untuk monitoring kepatuhan Personal Protective Equipment (PPE) — helmet, vest, gloves, masker, dan atribut keselamatan kerja lainnya.

PPE Analytics

PPE Analytics (NFV4-PPE) adalah modul analitik video real-time untuk memantau kepatuhan penggunaan Personal Protective Equipment (PPE) di area industri, konstruksi, manufaktur, dan lingkungan kerja berisiko. Sistem mendeteksi setiap orang dalam frame, lalu mengklasifikasikan atribut PPE yang dikenakan (head protection, gloves, safety harness, face mask, protective clothing, dan lain-lain) beserta confidence-nya. Hasilnya dikirim sebagai event sehingga sistem downstream dapat menentukan compliance dan men-trigger alert non-compliance.

Pada akhir halaman ini Anda akan memahami kemampuan PPE Analytics, atribut PPE yang dideteksi, sub-analytics yang tersedia (counting, ROI counting, dwelling, density), serta persyaratan kamera dan konfigurasi yang diperlukan.


Apa yang Dilakukan

Kemampuan

PPE Analytics menggabungkan deteksi orang dengan attribute classification khusus PPE. Atribut berikut diklasifikasikan untuk setiap orang yang terdeteksi:

AtributDeskripsi
head_protectionPenggunaan pelindung kepala (helmet)
helmet_colorWarna helmet yang dikenakan
safety_glassesPenggunaan safety glasses / kacamata pengaman
face_shieldPenggunaan face shield
face_maskPenggunaan masker
glovesPenggunaan sarung tangan
protective_clothingPenggunaan pakaian pelindung (vest, coverall, dsb.)
protective_clothing_colorWarna protective clothing
safety_harnessPenggunaan safety harness (untuk pekerjaan ketinggian)
footwear_typeJenis alas kaki (mis. safety boots)
work_contextKonteks lingkungan kerja yang terdeteksi

Bila confidence atribut di bawah threshold yang dikonfigurasi, label otomatis berubah menjadi Unknown. Aturan compliance (misalnya "non-compliant jika head_protection.label != "Helmet"") dilakukan oleh sistem downstream berdasarkan payload event.

PPE Analytics juga mewarisi seluruh sub-analytics dari multi-logics framework:

Sub-AnalyticDeskripsiContoh Penggunaan
CountingHitung orang yang melewati garis virtual beserta atribut PPEHitung pekerja masuk area kerja dan PPE yang dikenakan
ROI CountingHitung orang yang masuk/keluar polygonAudit compliance per zona kerja
DwellingDeteksi orang berdiam di areaAudit compliance pekerja di stasiun kerja statis
DensityEstimasi periodik jumlah orang dalam ROISnapshot compliance occupancy area kerja

Yang TIDAK Dilakukan

  • Identifikasi atau pengenalan wajah pekerja — gunakan Face Recognition untuk itu
  • Penegakan rule compliance secara langsung — modul ini menghasilkan klasifikasi atribut, bukan keputusan compliance/non-compliance
  • Deteksi kecelakaan kerja, kejatuhan, atau perilaku tidak aman (slip, trip, fall)
  • Pelacakan orang lintas kamera (cross-camera tracking)
  • Pengenalan plat kendaraan — gunakan License Plate Recognition

Use Cases

Konstruksi — Helmet & Vest Compliance

Pastikan setiap pekerja di area konstruksi memakai head protection dan protective clothing. Generate event setiap pekerja melewati gate masuk area kerja.

Pabrik — Masker & Sarung Tangan

Monitor compliance face mask dan gloves di production line, area food processing, atau lingkungan kerja yang membutuhkan kebersihan tinggi.

Tambang & Migas — Compliance 24/7

Pantau penggunaan helmet, protective clothing, dan safety harness di area operasi tambang atau site migas berisiko tinggi.

Pekerjaan Ketinggian

Verifikasi penggunaan safety harness untuk pekerja yang beraktivitas di area ketinggian seperti scaffolding atau rooftop maintenance.

Gudang & Logistik

Pastikan visibility vest digunakan di area lalu-lintas forklift dan loading dock untuk mencegah insiden.

Lab & Fasilitas Medis

Audit penggunaan face mask, gloves, dan protective clothing untuk staff lab atau area klinis.


Cara Kerja

Input Deteksi PPE Attribute Classification Multi-Logics Output Video Stream Frame Decoder Person Detection Object Tracker head_protection / helmet_color gloves / safety_harness face_mask / safety_glasses / face_shield protective_clothing / footwear_type / work_context Counting ROI Counting Dwelling Density Event Aggregator Event Bus

Setiap frame video didekode dan dilewatkan ke person detector. Tracker melacak identitas setiap individu lintas frame menggunakan bounding box dan confidence score. Untuk setiap orang yang terdeteksi, attribute classifier menghasilkan nilai untuk seluruh atribut PPE beserta confidence masing-masing.

Hasil tracking dan atribut diproses oleh sub-analytics yang aktif (counting, ROI counting, dwelling, density). Setiap event yang dihasilkan berisi atribut PPE per orang sehingga sistem downstream dapat menentukan compliance, mengirim alert, atau menyimpan untuk audit.


Persyaratan

Kamera

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

Pemasangan kamera (panduan operasional umum):

  • Sudut 30–45 derajat dari horizontal — top-down penuh menyulitkan klasifikasi atribut tubuh bagian atas
  • Tinggi 2,5–4 meter, sesuaikan dengan area cakupan
  • Pastikan keseluruhan tubuh pekerja terlihat jika atribut seperti protective_clothing atau footwear_type perlu dievaluasi
  • Hindari backlight kuat dan posisi melawan matahari langsung

Lingkungan

  • GPU NVIDIA (TensorRT) atau Intel (OpenVINO) untuk akselerasi inferensi
  • RAM minimal 2 GB per pipeline
  • CPU minimal 3 core per pipeline
  • Pencahayaan area minimal cukup untuk deteksi warna (panduan operasional umum: ≥150 lux)

Dependencies

  • Visionaire API berjalan di port default 4004
  • Stream video sudah terdaftar dan dapat diakses oleh Visionaire
  • Model PPE attribute classification (ppe_attribute) ter-deploy di node yang menjalankan pipeline

Setting Up

Siapkan Stream Video

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

Tentukan Sub-Analytics yang Dibutuhkan

Pilih sub-analytics yang relevan dengan use case Anda:

  • Counting — untuk gate masuk/keluar area kerja
  • ROI Counting — untuk audit per zona kerja yang berbentuk polygon
  • Dwelling — untuk stasiun kerja statis di mana pekerja diam dalam waktu lama
  • Density — untuk snapshot periodik compliance pada area tertentu

Nonaktifkan sub-analytic yang tidak digunakan dengan "is_active": false untuk menghemat resource.

Tentukan Atribut PPE yang Relevan

Tidak semua atribut perlu dievaluasi pada tiap use case. Misalnya:

  • Konstruksi: fokus pada head_protection, protective_clothing, footwear_type
  • Lab/medis: fokus pada face_mask, gloves, protective_clothing
  • Pekerjaan ketinggian: tambahkan safety_harness

Atribut yang tidak perlu dapat di-filter di sisi sistem downstream berdasarkan field yang dihasilkan.

Buat Pipeline via API

Kirim request POST /pipeline/{node_num}/{stream_id}/NFV4-PPE dengan konfigurasi sub-analytics dan threshold atribut yang dirancang.

Verifikasi dengan MJPEG Stream

Akses endpoint /pipeline/{node_num}/{stream_id}/NFV4-PPE/mjpeg di browser untuk memverifikasi pipeline berjalan dan overlay deteksi 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 klasifikasi atribut warna0.4Jarang perlu diubah
colordet_crop_hRasio tinggi crop untuk klasifikasi atribut warna0.4Jarang perlu diubah

Counting Logic

SettingApa yang DilakukanDefaultKapan Disesuaikan
dumping_sampling_timeInterval agregasi event saat orang melewati garis (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
enable_visual_labelTampilkan label pada visualisasifalseAktifkan untuk debugging

Dwelling Logic

SettingApa yang DilakukanDefaultKapan Disesuaikan
dwelling_treshold_alert_secDurasi (detik) sebelum alert dikirim (0 = nonaktif)0Set sesuai kebutuhan loitering / static-station audit
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
sharpness_filter_thresholdThreshold sharpness untuk dump dwelling0Naikkan jika banyak frame blur ter-dump
only_dump_exitHanya dump saat orang keluar ROIfalseAktifkan jika butuh laporan akhir saja

Penulisan dwelling_treshold_alert_sec mengikuti kunci konfigurasi yang diterima oleh source code (typo treshold adalah disengaja sesuai source).

Density Logic

SettingApa yang DilakukanDefaultKapan Disesuaikan
intervalInterval pelaporan kepadatan (detik)5Naikkan ke 60 untuk audit periodik; 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 atribut PPE per orang dalam event densitytrueNonaktifkan untuk hemat bandwidth

PPE Attribute Thresholds

Setiap atribut PPE memiliki threshold confidence-nya sendiri. Bila confidence di bawah threshold, label atribut tersebut diset menjadi Unknown.

SettingApa yang DilakukanDefault
head_protection_confidence_thresholdThreshold deteksi pelindung kepala0.5
helmet_color_confidence_thresholdThreshold deteksi warna helmet0.5
safety_glasses_confidence_thresholdThreshold deteksi safety glasses0.5
face_shield_confidence_thresholdThreshold deteksi face shield0.5
face_mask_confidence_thresholdThreshold deteksi face mask0.5
gloves_confidence_thresholdThreshold deteksi gloves0.5
safety_harness_confidence_thresholdThreshold deteksi safety harness0.5
protective_clothing_confidence_thresholdThreshold deteksi protective clothing0.5
protective_clothing_color_confidence_thresholdThreshold warna protective clothing0.5
footwear_type_confidence_thresholdThreshold jenis alas kaki0.5
work_context_confidence_thresholdThreshold konteks lingkungan kerja0.5

Naikkan threshold ke 0.70.8 untuk atribut yang menjadi dasar penilaian compliance ketat (mis. head_protection_confidence_threshold di area konstruksi) untuk mengurangi false positive.


Output yang Dihasilkan

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

Field Top-LevelTipeDeskripsi
analytic_idstringSelalu NFV4-PPE
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 atau jumlah)
image_jpegstring (base64)Cuplikan frame saat event terjadi
pipeline_dataobjectPayload utama hasil sub-analytic (lihat di bawah)

Field pipeline_data

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 (jika enable_group_tracking: true)
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 — berisi atribut PPE per orang
areastringdensity (nama ROI)
estimationintegerdensity (jumlah orang dalam ROI)
intervalinteger (detik)density
detectedarraydensity (rincian per orang dengan tracker_id, bbox, label, confidence, dan attributes saat dump_attributes: true)
event_idstringsemua (hash unik per event)

Field attributes berisi map atribut PPE yang aktif. Setiap atribut adalah objek { "label": "...", "confidence": 0.0–1.0 }. Atribut dengan confidence di bawah threshold akan memiliki label: "Unknown".

Contoh Event

{
  "analytic_id": "NFV4-PPE",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "person",
  "secondary_text": "in",
  "pipeline_data": {
    "logic": "counting",
    "label": "person",
    "confidence": 0.86,
    "tracker_id": 5,
    "group_id": 0,
    "area_name": "Site Entrance",
    "direction": "in",
    "attributes": {
      "head_protection": { "label": "Helmet", "confidence": 0.91 },
      "helmet_color": { "label": "Yellow", "confidence": 0.83 },
      "safety_glasses": { "label": "Unknown", "confidence": 0.42 },
      "face_shield": { "label": "No Face Shield", "confidence": 0.88 },
      "face_mask": { "label": "No Face Mask", "confidence": 0.81 },
      "gloves": { "label": "Gloves", "confidence": 0.74 },
      "safety_harness": { "label": "No Safety Harness", "confidence": 0.79 },
      "protective_clothing": { "label": "Vest", "confidence": 0.87 },
      "protective_clothing_color": { "label": "Orange", "confidence": 0.84 },
      "footwear_type": { "label": "Safety Boots", "confidence": 0.71 },
      "work_context": { "label": "Construction", "confidence": 0.66 }
    },
    "event_id": "1705314600000-3a1f9d4c"
  }
}
{
  "analytic_id": "NFV4-PPE",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "person",
  "secondary_text": "in",
  "pipeline_data": {
    "logic": "roi_counting",
    "label": "person",
    "confidence": 0.82,
    "tracker_id": 9,
    "area_name": "Welding Bay",
    "direction": "in",
    "attributes": {
      "head_protection": { "label": "Helmet", "confidence": 0.93 },
      "face_shield": { "label": "Face Shield", "confidence": 0.89 },
      "gloves": { "label": "Gloves", "confidence": 0.81 },
      "protective_clothing": { "label": "Coverall", "confidence": 0.84 }
    }
  }
}
{
  "analytic_id": "NFV4-PPE",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "Restricted Area",
  "secondary_text": "120.000 s",
  "pipeline_data": {
    "logic": "dwelling",
    "label": "person",
    "confidence": 0.78,
    "tracker_id": 12,
    "area_name": "Restricted Area",
    "time_in": 1705314480000,
    "time_out": null,
    "time_alert": 1705314600000,
    "duration": 120.0,
    "attributes": {
      "head_protection": { "label": "Unknown", "confidence": 0.34 },
      "protective_clothing": { "label": "Vest", "confidence": 0.82 }
    }
  }
}
{
  "analytic_id": "NFV4-PPE",
  "stream_id": "stream_001",
  "timestamp": 1705314600000,
  "primary_text": "Loading Dock",
  "secondary_text": "8",
  "pipeline_data": {
    "logic": "density",
    "interval": 5,
    "area": "Loading Dock",
    "estimation": 8,
    "detected": [
      {
        "tracker_id": 7,
        "label": "person",
        "confidence": 0.84,
        "bbox": { "top": 150, "left": 100, "width": 80, "height": 220 },
        "attributes": {
          "head_protection": { "label": "Helmet", "confidence": 0.9 },
          "protective_clothing": { "label": "Vest", "confidence": 0.86 }
        }
      }
    ]
  }
}

Best Practices

Penempatan Kamera

  • Sudut 30–45 derajat dari horizontal — top-down penuh menyulitkan klasifikasi atribut tubuh bagian atas (helmet, vest)
  • Pastikan keseluruhan tubuh pekerja terlihat jika atribut footwear_type perlu dievaluasi
  • Ukuran orang minimal 50×100 piksel di frame agar attribute classification berjalan andal
  • Hindari backlight kuat dan posisi melawan matahari langsung

Definisi Compliance Rule di Sisi Downstream

  • PPE Analytics tidak menentukan compliance/non-compliance — sistem downstream harus mendefinisikan rule berdasarkan field attributes
  • Contoh rule sederhana: non-compliant jika attributes.head_protection.label != "Helmet" ATAU attributes.protective_clothing.label == "Unknown"
  • Pertimbangkan threshold confidence per atribut sebelum mem-flag non-compliance untuk mengurangi false alert

Threshold Tuning

  • Naikkan threshold (mis. 0.7) untuk atribut critical (head_protection, safety_harness) agar Unknown lebih konservatif daripada salah klasifikasi
  • Atribut sekunder (helmet_color, work_context) dapat dibiarkan di default 0.5

Konfigurasi Sub-Analytics

  • Gunakan Counting di gate masuk area kerja untuk audit compliance setiap shift change
  • Gunakan ROI Counting untuk audit per zona kerja (welding bay, area ketinggian, dsb.) dengan threshold PPE berbeda per zona di sisi downstream
  • Gunakan Dwelling untuk stasiun kerja statis dengan dwelling_treshold_alert_sec agar dapat alert pekerja yang lama tidak compliant
  • Gunakan Density dengan dump_attributes: true untuk snapshot compliance occupancy periodik

Limitations

  • Atribut ≠ keputusan compliance: Modul ini menghasilkan klasifikasi atribut PPE; logika "compliant vs non-compliant" harus diimplementasikan di sistem downstream
  • Occlusion parah: Jika lebih dari 50% tubuh tertutup, akurasi atribut PPE menurun signifikan
  • Atribut warna pada motif/pattern: Warna helmet/vest bermotif akan dideteksi sebagai warna dominan yang mungkin tidak akurat
  • Top-down penuh (bird's eye view): Sudut ini menyulitkan klasifikasi atribut karena bagian tubuh tertentu (vest depan, face mask, gloves) tidak terlihat jelas
  • Pencahayaan rendah: Akurasi attribute classification turun drastis di kondisi gelap; pastikan area kerja cukup terang
  • Footwear_type: Atribut ini hanya andal jika seluruh tubuh termasuk kaki terlihat di frame
  • Tidak ada cross-camera tracking: Setiap kamera berjalan independen; identifikasi pekerja yang sama di beberapa kamera bukan kapabilitas modul ini

Modul Terkait

On this page