Demo interaktif — chat & suara memakai mesin bawaan browser Anda (bukan Whisper/Gemini/Piper self-hosted seperti aplikasi asli), tapi analisis ekspresi wajah, kontak mata, postur, dan nada suara SUNGGUHAN berjalan — teknik & kode yang sama dengan aplikasi lengkap. Lihat tabel "Apa yang Nyata" di bawah.
Virtual Patient
Platform AIGC — Virtual Patient

Ngobrol langsung dengan pasien virtual yang membaca bahasa tubuh Anda.

Bicara atau ketik ke Bu Mien (77 th, sesak napas). Nyalakan kamera di panel kiri — ekspresi wajah, kontak mata, dan postur Anda dibaca sungguhan di browser, lalu ikut memengaruhi balasan pasien, termasuk kapan ia balik bertanya kalau raut/nada Anda yang sama muncul berulang.

🙂 Ekspresi wajah — nyata 👁️ Kontak mata — nyata 🧍 Postur tubuh — nyata 🎙️ Nada suara — nyata (di browser) 💬 Balasan — Gemini via proxy aman, jatuh ke skrip kalau tidak tersedia
Memeriksa Gemini…

Analisis Non-Verbal

Berjalan langsung di browser Anda (MediaPipe) — video & audio tidak pernah dikirim ke mana pun.

Izinkan akses kamera untuk analisis ekspresi & postur langsung.
Ekspresi
–
Kontak mata
–
Postur
–
Nada suara
–
Aktifkan kamera untuk melihat pembacaan Anda di sini.

Bu Mien
Pasien lansia, 77 tahun · Sesak napas
Menunggu
Kasus: Sesak napas yang memberat 2–3 hari terakhir. Anda berperan sebagai mahasiswa keperawatan melakukan anamnesis awal.
Yang dipahami sistem

Empat kanal non-verbal, satu reaksi yang terasa manusiawi

Di aplikasi lengkap, semua ini masuk ke prompt pasien AI per giliran secara real-time (lihat _nonverbal_block di prompt_builder.py), dan jadi bukti untuk penilaian 8 dimensi komunikasi di akhir sesi.

🙂

Ekspresi wajah

MediaPipe Face Landmarker membaca blendshape wajah lalu mengklasifikasikannya jadi senang, marah, sedih, takut, terkejut, jijik, atau netral — langsung dari kamera, di browser.

Nyata di demo ini
👁️

Kontak mata

Arah hadap kepala dari transformation matrix wajah: apakah Anda menatap kamera atau sering menoleh.

Nyata di demo ini
🧍

Postur & gestur

MediaPipe Pose Landmarker mendeteksi lipat tangan, condong depan/belakang, dan gerakan tangan gelisah.

Nyata di demo ini
🎚️

Nada suara

Energi & variasi pitch (autokorelasi) dihitung dari mikrofon Anda — port langsung dari heuristik backend, dijalankan di browser.

Nyata di demo ini
🧠

Reaksi real-time

Sinyal non-verbal giliran itu ikut membentuk balasan pasien — bukan cuma dicatat untuk nilai akhir.

Ditiru di demo ini
🔁

Pola berulang → ditanya

Di aplikasi asli, LLM yang memutuskan kapan menyinggungnya. Demo ini memakai aturan sederhana: sinyal negatif yang sama 2 giliran berturut-turut → pasien menyinggungnya.

Diadaptasi di demo ini
🎭

Bahasa tubuh pasien

Balasan pasien memicu gestur tubuh nyata pada avatar 3D — anggukan, menghela napas, meringis, tangan di dada — dari tabel animasi yang sama persis dengan components/gestures.ts aplikasi utama.

Nyata di demo ini
📋

Skoring & validasi

8 dimensi kompetensi komunikasi dinilai otomatis oleh LLM, hasilnya baru terbuka setelah divalidasi Edukator.

Tidak ada di demo
Transparansi

Apa yang sungguhan berjalan vs yang disederhanakan

Demo ini statis (Vercel tidak menjalankan backend Python), jadi sebagian komponen diganti tiruan browser-native. Berikut peta jujurnya.

BagianStatus di demo ini
Nama & identitas pasienNyata — Bu Mien, 77 tahun, kasus sesak napas, persis sama dengan skenario aplikasi utama
Avatar 3DNyata — model asli ibu-senang.glb/ibu-sedih.glb, dirender three.js, kepala & rahang bereaksi live
Gestur/bahasa tubuh pasienNyata — tabel animasi (17 gestur) & distribusi ke tulang Head/Neck/Chest/Hips di-porting langsung dari components/gestures.ts & Avatar3DScene.tsx
Ekspresi wajah (senang/marah/sedih/takut/terkejut/jijik/netral), kontak mata & posturNyata — MediaPipe Face + Pose Landmarker, heuristik classifyExpression yang sama dengan lib/useNonverbalSignal.ts (bukan model emosi terlatih — lihat komentar di kode)
Nada suara (energi & pitch)Nyata — RMS energi + pitch autokorelasi dihitung dari mikrofon, port dari backend/app/services/voice_signal/analyzer.py
Pola non-verbal berulang → pasien bertanyaDiadaptasi — aplikasi asli membiarkan LLM memutuskan kapan menyinggung (prompt_builder.py); demo statis ini memakai aturan "pola sama 2 giliran berturut-turut" karena tidak ada LLM sungguhan di sini
Ucapan → teks & teks → ucapanDisederhanakan — Web Speech API bawaan browser, bukan faster-whisper + Piper self-hosted
Balasan pasienDisederhanakan — skrip aturan kata kunci di browser, bukan Gemini + guardrail + prompt builder
Skoring 8 dimensi & validasi EdukatorTidak ada — butuh backend + database, di luar cakupan demo statis
Di balik layar aplikasi lengkap

Self-hosted & berorientasi latency rendah

Baris di bawah menggambarkan aplikasi penuh (apps/virtual-patient-lansia + backend) — bukan demo statis ini.

Ucapan → Teks
faster-whisper (self-hosted, CPU)
Teks → Ucapan
Piper CLI + prosodi per-karakter
Otak percakapan
Gemini streaming + guardrail etik, fallback offline
Avatar
3D Three.js, viseme + 17 gestur, dirender di browser mahasiswa
Non-verbal
MediaPipe Face + Pose Landmarker, semua client-side
Backend
FastAPI + PostgreSQL, WebSocket per sesi
Penilaian
8 dimensi komunikasi, divalidasi Edukator
Target skala
70 pengguna bersamaan, per-instance sticky WebSocket