Author: dr. Yanuar Iman Santosa, Sp.T.H.T.B.K.L., Subsp.A.I. (K), M.Si.Med

Platform: otoscopy.medinovatech.com

Date: Juni 2026

Version: v5.0 · Claude AI Gate · OOD

Platform AI screening telinga berbasis otoskopi — membantu tenaga kesehatan di faskes primer mengklasifikasikan kelainan telinga dan mengambil keputusan rujukan lebih cepat. Klasifikasi citra berjalan self-hosted di server sendiri (MobileNetV2, tanpa cloud AI pihak ketiga); interpretasi klinis memakai Claude Sonnet 4.6 (Anthropic) sebagai relevance gate & interpretasi klinis — deteksi otomatis gambar non-telinga (out-of-distribution / OOD) + narasi klinis PNPK OMSK 2018.
5
Kelas Diagnosis
100%
Best Val Acc V2
6.967
Lines of Code
V1 + V2
+ Claude
Model Stack
Model V1 — CV
99.7%
MobileNetV2 · image-only · best val acc
test 99.0% · 5 kelas
Model V2 — Multimodal
100%
MobileNetV2 + 29-dim anamnesis · SupCon · best val acc
test 99.7% · 5 kelas
Claude AI Gate
Sonnet 4.6
OOD gate 3-lapis · PNPK guidance · urgency triage
OtoskopiAI Clinical Platform Overview
Gambar: Ikhtisar platform klinis OtoskopiAI
Ilustrasi ini memperlihatkan bagaimana OtoskopiAI bekerja dalam alur kerja klinis sehari-hari. Dokter atau tenaga kesehatan mengambil foto telinga, lalu platform AI menganalisisnya secara otomatis — mulai dari klasifikasi kelainan, pengecekan apakah gambar memang telinga (OOD detection), hingga rekomendasi rujukan. Semua dirancang agar dokter tetap menjadi pengambil keputusan akhir, bukan digantikan oleh mesin.
Problem & Solution
Indonesia: 10.000+ faskes primer vs ±1.827 Sp.THT. OMSK prevalensi 3,9% dari 287,9 juta penduduk — gap diagnostik telinga sangat besar.
Target userDokter umum, bidan, perawat di faskes primer
InputFoto otoskopi + anamnesis klinis (opsional)
OutputKlasifikasi + confidence + urgency triage + narasi klinis AI + rekomendasi rujukan
ApproachTransfer learning MobileNetV2 + Claude AI semantic gate + Grad-CAM XAI
PrivacyKlasifikasi citra self-hosted di server sendiri · interpretasi klinis dikirim ke API Claude (Anthropic) · citra tidak disimpan permanen
Tech Stack
FrontendVanilla HTML/CSS/JS + GSAP animations
BackendPython 3.12 + FastAPI + Uvicorn
AI/ML FrameworkPyTorch 2.12 + TorchVision
Model CVMobileNetV2 (transfer learning ImageNet)
Model LLMClaude Sonnet 4.6 via CLI · relevance gate + interpretasi klinis
XAIGrad-CAM heatmap · energy-based OOD score
DatabaseSQLite self-hosted (zero-cost)
InfraNginx + systemd · self-hosted VPS · 16GB RAM
TrainingTransfer Learning + FixMatch SSL + SupCon Loss
Arsitektur Sistem
OtoskopiAI System Architecture
Gambar: Arsitektur sistem OtoskopiAI — dari input foto hingga output keputusan klinis
Diagram ini menunjukkan alur kerja OtoskopiAI dari awal sampai akhir. Foto telinga masuk, lalu dibaca oleh model AI (MobileNetV2 — sejenis ‘mata digital’ yang dilatih mengenali pola dari ribuan gambar otoskopi). Sebelum hasil keluar, ada ‘gerbang pengaman’ tiga lapis: pertama, pengecekan entropi (seberapa yakin AI); kedua, skor energi (apakah gambar ini ‘mirip’ dengan data yang pernah dipelajari); ketiga, Claude Sonnet 4.6 yang memeriksa secara semantik apakah gambar ini memang relevan. Jika lolos ketiga filter, hasilnya keluar: diagnosis + tingkat keyakinan + saran rujukan berbasis PNPK OMSK 2018, dengan dokter tetap sebagai pengambil keputusan akhir.
Model Performance · Dataset · Lines of Code
Model Stack
V1 — CV
99.7%
best val acc · test 99.0% · 5 kelas
V2 — Multimodal
100%
best val acc · test 99.7% · 5 kelas
Claude Gate
Sonnet
4.6
OOD 3-lapis · PNPK · urgency
Lines of Code
FileBarisFungsi
index.html2.518UI + Dual-panel + OOD
app_screening.py2.216FastAPI + Claude Gate + OOD Engine
train_screening_v2.py648Multimodal training + SupCon
train_screening.py598CV training + OOD class
dashboard.html543Analytics + Labeling UI
TOTAL6.967
Dataset Training — 2.209 Gambar · 5 Kelas
Normal
472
Cerumen
458
Perforation
462
OMA
384
Timpanoskl.
433
Dataset balanced — gap antar kelas < 19%
5 Kelas Diagnosis Final
Normal Cerumen Perforation OMA Timpanosklerosis
Riwayat Training — Dataset → Akurasi
Insight Kunci: Lompatan akurasi 91.7% → 99.4% bukan karena model berubah drastis — tapi karena dataset berkembang. Persis seperti dokter yang makin banyak kasus dipelajari, kemampuan diagnosisnya langsung melonjak.
26 Mei — Dataset Kecil
~73 gambar
91.7%
Model maksimal tapi data kurang
28 Mei — Data Bertambah
~200 gambar
91.7%
Masih mentok — validasi set terlalu kecil
30 Mei — Dataset Lengkap
3.038 gambar
99.4% ⭐
Dataset cukup — model konvergen sempurna
30 Mei — Dataset 3.038 Gambar (Hasil Terbaik)
SesiVersiEpochAcc TrainAcc Val AkhirAcc Val TerbaikLoss Val
v1_061449V15776.4%91.1%91.1% (ep5)
v1_062008V113994.6%97.8%98.9% (ep29)0.0449
v2_063231V223797.9%99.4%100% (ep21) ⭐⭐0.0117
🔑 Kesimpulan: V2 loss 0.0117 vs V1 loss 0.0449 — decision boundary V2 3.8× lebih kuat. Dataset adalah kunci, bukan kompleksitas model.
Teknik Training — Bukan Fine-Tuning Biasa
Kombinasi Transfer Learning + Fine-Tuning + FixMatch (SSL) + SupCon Loss. Sepenuhnya self-hosted, reproducible, tanpa AutoML cloud.
1. Transfer Learning: MobileNetV2 pre-trained ImageNet → fine-tune backbone + head untuk otoscopy. Training time menit (bukan jam), data requirement jauh lebih sedikit.
2. Semi-Supervised Learning (FixMatch): Unlabeled images + pseudo-label thresholding + augmentasi otomatis. Meningkatkan data efektif tanpa labeling manual tambahan.
3. Supervised Contrastive Learning (SupCon): Loss function yang push intra-class similarity + inter-class dissimilarity. Meningkatkan margin decision boundary — mengurangi confusion Normal ↔ Cerumen ↔ Patologi.
V1 — Image-Only (CV)
BackboneMobileNetV2 (pre-trained ImageNet)
Input224×224 RGB otoskopi foto
Parameters3.4 juta (lightweight, CPU-friendly)
File size13–14 MB .pth checkpoint
Best Val Acc99.7% @ epoch 29
Val Loss0.0449
Inference~1–2 detik/foto (CPU)
V2 — Multimodal (Image + Anamnesis)
Input Image224×224 RGB otoskopi foto
Input Anamnesis29-dim clinical vector (onset, symptom, trauma…)
FusionConcatenation → Dense → classification head
Parameters~3.6–3.8M (+ fusion layers)
Best Val Acc100% @ epoch 21 ⭐
Val Loss0.0117 (3.8× lebih rendah dari V1)
Inference~2–3 detik/kasus (image + anamnesis fusion)
V1 vs V2 — Comparison Matrix
AspekV1 — Image-OnlyV2 — Multimodal
InputFoto otoskopi sajaFoto + 29-dim anamnesis vektor
ComplexityRendah (CV backbone saja)Sedang (CV + fusion + SupCon)
Parameters3.4M~3.6–3.8M
Inference Speed1–2 detik2–3 detik
Validation Accuracy99.7% (best val)100% (peak) · 99.7% test
Validation Loss0.04490.0117 (3.8× lebih rendah)
RobustnessBergantung visual sajaVisual + konteks klinis → lebih robust edge case
Anamnesis required?Tidak perluOpsional — fallback ke image-only jika kosong
Use CaseQuick triage, foto berkualitas baikClinical context kritis, edge case, ambiguous image
Data Requirement~500 per kelas~500 per kelas (sama, lebih efisien)
Training Duration~12–15 menit (CPU)~20–30 menit (CPU)
✅ Rekomendasi Produksi: V2 adalah pilihan utama — menggabungkan visual + konteks klinis. Akurasi 99.4% + loss 0.0117 menunjukkan decision boundary sangat kuat. V1 tetap aktif sebagai Panel 1 (fast, image-only) · V2 sebagai Panel 2 (klinis, dengan anamnesis).
Claude AI Gate (Layer 3): Setelah V1+V2 classify, Claude Sonnet 4.6 menjadi relevance gate — menolak gambar non-telinga (OOD), menghasilkan interpretasi klinis berbasis PNPK OMSK 2018, urgency triage 3-level.
V1 vs V2 F1 Comparison
Gambar: Perbandingan F1-score per kelas — V1 (image-only) vs V2 (multimodal) pada dataset Sumotosima
Grafik batang ini membandingkan dua versi model: V1 (hanya membaca foto) vs V2 (foto + data gejala pasien). Keduanya tampil sangat baik dengan skor mendekati 100% di semua kelas. Menambahkan konteks klinis (anamnesis) membuat V2 lebih tahan menghadapi kasus yang membingungkan, meskipun di beberapa kelas V1 sedikit unggul — menunjukkan kedua model saling melengkapi dalam produksi.
Fitur Utama · Development Timeline
Fitur Utama
Screening AIKlasifikasi 2–3 detik (V1 fast / V2 multimodal + anamnesis)
Claude AI GateOOD rejection otomatis · interpretasi klinis · PNPK OMSK 2018
OOD Detection3-layer: entropy + energy-based score + Claude semantic gate
Urgency Triage Non-Urgent Semi-Urgent Emergency
ExplainabilityGrad-CAM heatmap + XAI reasoning klinis per kelas
Dual-Panel UXPanel 1 (fast visual) + Panel 2 async (interpretasi klinis)
Feedback LoopKoreksi dokter → training data · human-in-the-loop retraining
5 Kelas FinalNormal · Cerumen · OMA · Perforation · Timpanosklerosis
DashboardAnalytics real-time + labeling UI + training trigger
BilingualToggle Bahasa Indonesia / English
Development Timeline — 30 Hari
Phase 1 — Landing Page & Setup
15 Mei 2026, 21:49
Phase 2 — Model V1 Training + FastAPI Backend
16 Mei 2026, 05:31 — MobileNetV2 live
Phase 3 — Multimodal V2 + XAI + Dashboard
16 Mei 2026, 06:37 — anamnesis fusion + Grad-CAM
Phase 4 — Kelas Ekspansi + Class Registry
25 Mei 2026 — ekspansi & konsolidasi kelas, class weight fix
Phase 5 — Dataset 3.000+ · 5-kelas · RLHF
30 Mei 2026 — V1 98.9%, V2 99.4%, nightly retrain
Phase 6 — Claude AI Gate + OOD + Safe-AI SaMD
Juni 2026 — 3-layer OOD, PNPK guidance, dual-panel UX
Total: ~50+ jam dalam 30 hari · 30+ commits · 6.967 baris kode
Continuous Learning Loop
Gambar: Siklus pembelajaran berkelanjutan (continuous learning loop) OtoskopiAI
Diagram ini menjelaskan bagaimana OtoskopiAI terus belajar dari waktu ke waktu, mirip proses belajar dokter spesialis yang makin berpengalaman. Setiap kali dokter mengoreksi hasil AI (misalnya: “ini bukan OMA, ini timpanosklerosis”), koreksi itu masuk kembali ke data latih. Proses human-in-the-loop retraining ini memastikan model makin akurat seiring pemakaian — tanpa perlu mengumpulkan data dari awal lagi.
External Validation — Generalisasi ke Dataset Luar
Evaluasi dilakukan pada dua dataset eksternal independen (tidak masuk ke training). Semua evaluasi menggunakan checkpoint yang sama (otoskopi_mobilenetv2_best.pth & otoskopi_multimodal_v2_best.pth).
Dataset Sumotosima — Balanced (500 gambar)
100 gambar/kelas · 5 kelas · sumber data terpisah dari training
KelasV1 F1V2 F1
Cerumen1.00001.0000
Normal0.98480.9529
OMA1.00001.0000
Perforasi0.99500.9756
Timpanosklerosis0.99010.9804
99.4%
V1 Accuracy
98.2%
V2 Accuracy
>0.999
Macro AUC (keduanya)
Dataset EardrumDs — Heterogen (955 gambar)
884 gambar ter-mapping ke 5 kelas · 71 gambar OOD (4 kategori tak dikenali)
MetrikV1V2
Accuracy (5 kelas)13.5%13.5%
Macro AUC0.73660.7376
AUC Cerumen0.89850.9011
AUC Normal0.58020.5642
AUC OMA0.69360.6787
OOD behavior100% gambar OOD diprediksi sebagai OMA → model tidak kenal kondisi di luar distribusi training
Catatan: Accuracy rendah 13.5% disebabkan domain shift — distribusi gambar, akuisisi, dan label konvensi berbeda dari training dataset. AUC >0.73 menunjukkan model masih memiliki discriminative power. Ini dilaporkan secara transparan sebagai limitasi.
Interpretasi: Model menunjukkan generalisasi sangat kuat pada dataset yang secara distribusi mirip dengan training (Sumotosima: 99.4%/98.2%, AUC >0.999). Performa turun drastis pada dataset heterogen (EardrumDs) — konsisten dengan temuan domain shift yang umum pada model CNN medis. Claude Gate berperan penting sebagai lapisan keamanan tambahan untuk kasus edge-case dan gambar non-telinga.
Confusion Matrix — Dataset Sumotosima (Balanced, 500 gambar)
Confusion Matrix V1 Sumotosima
CM V1 — Accuracy 99.4%
Confusion Matrix V2 Sumotosima
CM V2 — Accuracy 98.2%
Tabel warna ini memperlihatkan seberapa sering AI menebak benar. Angka di garis diagonal (kiri-atas ke kanan-bawah) adalah tebakan yang tepat. Semakin gelap dan terkumpul di diagonal, semakin akurat. Di sini hampir semua kotak diagonal terisi penuh — artinya AI sangat jarang salah mengenali jenis kelainan telinga pada data uji dari sumber independen.
ROC Curves — Macro AUC > 0.999
ROC V1 Sumotosima
ROC V1 — Macro AUC 1.0000
ROC V2 Sumotosima
ROC V2 — Macro AUC 1.0000
Grafik ini mengukur kemampuan AI membedakan satu kondisi dari yang lain. Garis yang menempel ke pojok kiri-atas berarti sangat baik. Nilai AUC (luas area di bawah kurva) mendekati 1,0 berarti hampir sempurna. AI kami mencapai >0,999 pada kedua model — bukti kemampuan membedakan yang sangat kuat pada data seimbang dari sumber independen.
Domain Shift & Safety — Kejujuran Ilmiah
Mengapa slide ini penting? Model AI medis yang hanya menunjukkan hasil bagus tanpa melaporkan keterbatasan tidak bisa dipercaya. Slide ini justru menunjukkan kekuatan OtoskopiAI — berani melaporkan kelemahan secara transparan.
Confusion Matrix — Dataset EardrumDs Heterogen (884 mapped images)
Confusion Matrix V1 External Heterogeneous
CM V1 — Accuracy 13.5% (domain shift)
Confusion Matrix V2 External Heterogeneous
CM V2 — Accuracy 13.5% (domain shift)
Ini contoh kejujuran ilmiah. Saat diuji pada data dari sumber yang sangat berbeda (beda kamera, beda resolusi, beda cara labeling), akurasi anjlok ke 13,5% — hampir semua tebakan jatuh ke satu kategori (OMA). Ini bukan berarti AI gagal total (kemampuan memberi peringkat/AUC masih 0,74), tapi menunjukkan AI medis harus diuji di banyak sumber data sebelum dipakai ke pasien nyata. Inilah alasan Claude Gate dibutuhkan.
OOD Distribution — Gambar di Luar Kategori Training
OOD Distribution V1
Distribusi prediksi OOD — semua 71 gambar non-training diprediksi sebagai OMA
Grafik ini justru menunjukkan keterbatasan yang JUJUR kami laporkan. Saat AI diberi gambar kondisi yang TIDAK pernah ia pelajari (misalnya benda asing di telinga, otitis eksterna, pseudomembran), ia tetap memaksakan menebak — dan semuanya jadi ‘OMA’. Ini fenomena umum pada classifier tertutup (closed-set). Inilah alasan kenapa ‘gerbang pengaman’ tiga lapis (entropy + energy score + Claude semantic gate) sangat penting: tanpa itu, AI bisa terlihat percaya diri padahal salah.
Roadmap — Rencana Pengembangan
OtoskopiAI Roadmap
Gambar: Peta jalan pengembangan OtoskopiAI — dari prototipe menuju validasi klinis
Peta jalan ini menunjukkan tahapan pengembangan OtoskopiAI dari prototipe saat ini menuju produk yang siap digunakan di klinik nyata. Langkah selanjutnya meliputi: pengumpulan data prospektif dari faskes primer Indonesia, validasi klinis dengan dokter spesialis THT sebagai pembanding (gold standard), ekspansi kelas diagnosis, dan uji coba multi-center. Setiap tahap dirancang agar AI makin matang — bukan langsung dilepas ke pasien, tapi melalui proses validasi bertahap sesuai kaidah alat kesehatan digital (SaMD).
Estimasi Nilai Proyek & Biaya Operasional
Development Cost
Total lines of code6.967 baris
Dev hours~50+ jam
Rate (AI web medis + LLM)Rp 600K – 1 juta/jam
Subtotal developmentRp 30 – 50 juta
Nilai proyek setaraRp 40 – 60 juta
Operational Cost / Bulan
Cloud AI / inference costRp 0
Claude AI Gate (Claude Pro/Max)Rp 0 extra
Database (SQLite self-hosted)Rp 0
VPS (shared, sudah ada)~Rp 50K alokasi
Total operasional/bulan~Rp 50K
* MobileNetV2 berjalan self-hosted di server sendiri via PyTorch CPU (tanpa cloud AI pihak ketiga). Claude (Anthropic) via subscription CLI — citra dikirim ke API Claude untuk gate & interpretasi, tanpa biaya per-call tambahan.
Claude AI Gate: Claude Sonnet 4.6 sebagai relevance gate — gambar non-telinga ditolak sebelum classifier. Menghasilkan interpretasi klinis PNPK OMSK 2018 + urgency triage 3-level. Berjalan via Claude CLI subscription — tanpa API key terpisah, tanpa biaya per-call untuk pengguna Claude Pro/Max.
Disclaimer: OtoskopiAI adalah alat bantu skrining, bukan pengganti diagnosis klinis. Keputusan akhir tetap pada tenaga medis terlatih. Skor <70% memerlukan review manual. Dirancang sebagai human-in-the-loop tool sesuai kaidah SaMD.
© 2026 Medinovatech · dr. Yanuar Iman Santosa, Sp.T.H.T.B.K.L., Subsp.A.I. (K), M.Si.Med · otoscopy.medinovatech.com PyTorch · FastAPI · Claude Sonnet 4.6 · Grad-CAM · Vanilla JS

Author: dr. Yanuar Iman Santosa, Sp.T.H.T.B.K.L., Subsp.A.I. (K), M.Si.Med

Platform: otoscopy.medinovatech.com

Date: Juni 2026

Version: v5.0 · Claude AI Gate · OOD