Bicara Isyarat
Aplikasi mobile yang dirancang untuk membantu pengguna belajar bahasa isyarat. Aplikasi ini menggunakan AI on-device untuk deteksi bahasa isyarat, sehingga dapat digunakan secara offline. Terdapat fitur gamifikasi seperti streaks, poin XP, dan badges untuk memotivasi pengguna. Deteksi mendukung input video dan foto, dan pengguna dapat mengunggah foto untuk analisis. Aplikasi ini juga memiliki kamus bahasa isyarat dan sistem riwayat deteksi yang disimpan di penyimpanan lokal.
2026
Aplikasi Mobile
Flutter, TensorFlow Lite, MediaPipe, SQLite, Riverpod
Masalah
Mempelajari bahasa isyarat (American Sign Language / ASL) sering terkendala oleh minimnya sarana latihan interaktif yang bisa memberikan umpan balik langsung. Sebagian besar aplikasi yang ada bergantung pada koneksi internet dan API server cloud untuk inferensi AI, yang menimbulkan latensi, biaya server, dan masalah privasi. Selain itu, ada tantangan teknis mendasar dalam pengenalan isyarat tangan: 24 huruf (A–Y ekskl. J/Z) adalah gestur statis, sedangkan huruf J dan Z adalah gestur dinamis (memiliki lintasan gerakan). Menggabungkan kedua karakteristik ini dalam aplikasi mobile yang berjalan mulus dan sepenuhnya offline membutuhkan arsitektur AI on-device yang terstruktur.
Peran saya
Proyek ini dikembangkan oleh tim 5 orang (PBL Semester 5). Saya bertanggung jawab atas arsitektur inti aplikasi mobile Flutter, integrasi model inferensi AI on-device, sistem penyimpanan lokal, dan gamifikasi pembelajaran:
- Arsitektur pipeline deteksi hybrid: Mengintegrasikan model CNN TFLite untuk 24 pose statis dan menghubungkan pipeline GRU berbasis landmark trajectory untuk gestur gerakan dinamis (J dan Z) langsung di perangkat.
- Optimasi performa & frame pipeline: Mengimplementasikan isolasi komputasi TFLite, frame throttling (interval analisis CNN ~260 ms, interval deteksi tangan ~320 ms), serta mekanisme pembatalan (generation tagging) agar frame lama tidak menumpuk di memori.
- Penyimpanan lokal & migrasi database: Merancang skema SQLite (
sqflitev2) untuk riwayat latihan offline, metadata keyakinan (confidence score), tracking sumber (kamera live, foto, upload), serta jalur gambar/video. - Sistem gamifikasi & progress: Membangun gamification engine berbasis state (Riverpod) yang menghitung streak hari latihan, akumulasi poin XP, penguasaan 26 huruf alfabet, serta sistem lencana penghargaan (badges) beserta dialog pencapaian (unlocked dialog).
- Halaman & fitur aplikasi: Mengembangkan layar kamera multi-mode (video live, foto, upload gambar), kamus isyarat interaktif, riwayat latihan, dan dashboard pencapaian.
Arsitektur sistem
Aplikasi berjalan 100% offline di sisi klien tanpa memerlukan server backend atau koneksi internet:
- Flutter + Dart (Riverpod State Management): Mengelola siklus hidup kamera, status sesi latihan bebas vs latihan target, dan state reaktif progres belajar.
- Pipeline Statis (24 Huruf): Stream kamera
YUV420diproses oleh detektor tangan MediaPipe CPU untuk mengekstraksi 21 titik koordinat tangan. Gambar tangan di-crop, dikoreksi orientasi, diubah ke skala abu-abu 28×28 piksel, lalu diklasifikasikan oleh model CNN TFLite (model_float16.tflite, ukuran hanya 318 KiB). Huruf baru dikomit jika keyakinan $\ge 60%$ dan stabil minimal 2 frame berturut-turut. - Pipeline Dinamis (J dan Z): Gerakan dinamis direkam melalui monotonic timer (Stopwatch) pada frame rate stabil hingga 15 FPS. Rangkaian koordinat 21 titik tangan dinormalisasi terhadap pergelangan tangan (wrist-relative) dan diinterpolasi menjadi sekuens 48 timesteps dengan 64 fitur (
[1, 48, 64]), kemudian dievaluasi oleh model Recurrent Neural Network (GRU TFLite, 224 KiB) untuk menghasilkan satu prediksi:J,Z, atauOTHER. - Database Lokal (SQLite via
sqflite): Menyimpan histori setiap sesi latihan lengkap dengan timestamp, akurasi, tingkat keyakinan, sumber input, dan path file bukti.
Modul & layanan utama
Karena aplikasi ini berjalan tanpa server backend, peran API digantikan oleh service modules dan contracts internal di dalam arsitektur Dart/Flutter:
| Modul / Service | Peran & Kontrak | Output / Perilaku |
|---|---|---|
StaticCameraPipeline |
Membungkus detektor MediaPipe dan generation tagging | Stream observasi tangan yang terikat pada ID generasi sesi |
SignClassifier |
Singleton inferensi CNN 24 huruf pada background isolate | Prediksi huruf statis, confidence score, dan input preview |
JzRecognitionService |
State machine gestur temporal (startClip, addCameraFrame, finishClip) |
Hasil JzClipResult (label huruf, confidence, metrik kualitas FPS) |
JzSequencePreprocessor |
Normalisasi koordinat tangan 3D & interpolasi sekuens waktu | Tensor berdimensi [1, 48, 64] siap inferensi GRU |
DatabaseHelper |
SQLite store dengan migrasi skema v2 | Operasi CRUD riwayat latihan terisolasi dan persisten |
GamificationProgress |
Kalkulasi komparasi progres alfabet & rules lencana | Status streak, total XP, persentase 26 huruf, dan daftar badge |
Tantangan teknis
1. Menghindari tabrakan antara deteksi statis dan dinamis.
Tantangan terbesar muncul saat pengguna melakukan gerakan huruf J atau Z. Pose awal tangan saat hendak mengayunkan huruf J sering kali menyerupai huruf statis (seperti I atau D). Jika pipeline statis dibiarkan aktif, CNN akan salah mencatat huruf statis sebelum gerakan selesai. Solusinya, aplikasi menerapkan generation ID: saat tombol gestur dinamis ditekan, semua hasil CNN dan observasi detektor statis yang masih antre dibatalkan secara instan. Selain itu, setelah gerakan dinamis selesai, sistem mewajibkan tangan diturunkan keluar dari area deteksi (hand release barrier) sebelum deteksi statis diizinkan membaca huruf berikutnya.
2. Inferensi real-time di perangkat mobile tanpa lagging. Menjalankan deteksi MediaPipe dan klasifikasi TFLite secara terus-menerus pada stream kamera 30–60 FPS dengan cepat menyebabkan frame drops dan ponsel panas. Solusinya adalah membedakan siklus kerja:
- Deteksi keberadaan tangan dibatasi setiap 320 ms.
- Inferensi CNN klasifikasi huruf dibatasi setiap 260 ms dan dieksekusi di worker isolate (
IsolateInterpreter), sehingga UI thread tetap responsif pada 60 FPS. - Frame baru yang masuk saat inferensi sebelumnya belum selesai akan langsung dilewati (busy skip), mencegah penumpukan antrean memori.
3. Reduksi false positive pada gestur dinamis.
Model GRU dilatih tidak hanya untuk membedakan huruf J dan Z, melainkan juga kelas negatif (OTHER) untuk menolak gerakan tangan acak atau saat tangan sekadar bergerak santai. Setiap klip gerakan divalidasi dengan aturan ketat: durasi minimal 0,25 detik, batas timeout otomatis 10 detik, minimal 6 observasi tangan dengan deteksi tangan konsisten $\ge 60%$. Jika tangan hilang di tengah gerakan selama $>0,55$ detik, klip otomatis digugurkan tanpa mengotori riwayat latihan.
4. Integritas data latihan & gamifikasi tanpa ketergantungan jaringan. Agar sistem streak dan badge dapat diandalkan secara offline, mesin gamifikasi diturunkan secara deterministik langsung dari riwayat transaksi SQLite lokal. Poin XP dihitung berdasarkan jumlah latihan dan huruf unik yang berhasil dikuasai, sementara status streak dihitung dari kesinambungan tanggal kalender pada log histori. Hal ini mencegah inkonsistensi state saat aplikasi ditutup paksa atau perangkat kehabisan daya.
Rencana pengembangan ke depan
- Continuous Sentence Recognition: Mengembangkan algoritma segmentation otomatis berbasis transisi waktu untuk merangkai kata secara langsung tanpa pemisahan tombol manual antar-huruf.
- Fine-tuning model dengan data kamera riil: Melatih ulang model GRU dengan dataset video gestur OTHER dari berbagai variasi pencahayaan dan gerakan tangan nyata sehari-hari.
- Sinkronisasi cloud opsional: Menambahkan opsi sinkronisasi akun dan backup progres ke cloud via Supabase atau Firebase saat perangkat terhubung ke internet.
Proyek Lainnya

Backend platform e-learning dengan profil Siswa dan Kolaborator berbasis akun Mejakita.
- Node.js (Express)
- MySQL
- Git

Backend ASP.NET untuk aplikasi mobile rumus dan tips belajar dengan konten dari pengguna.
- ASP.NET Core 7
- C#
- Entity Framework Core
- +2

Situs tiket dan FAQ untuk dukungan pengguna Mejakita, dibangun dengan ASP.NET dan SQL Server.
- ASP.NET
- SQL Server
- Git