7.0 KiB
Aplikasi Penerjemah Bahasa Isyarat Indonesia Menggunakan MediaPipe Hands, Face Mesh, dan Temporal Convolutional Network (TCN)
Deskripsi
Project ini merupakan backend machine learning untuk aplikasi penerjemah Bahasa Isyarat Indonesia (SIBI dan BISINDO) menggunakan MediaPipe Hands, MediaPipe Face Mesh, dan Temporal Convolutional Network (TCN).
Model dibagi menjadi empat kategori agar sesuai dengan alur aplikasi frontend.
- Abjad Bisindo
- Abjad SIbi
- Angka
- Kata
Setiap kategori memiliki model TCN tersendiri sehingga proses inferensi lebih cepat dan akurasi lebih baik.
Pipeline Project
Raw Video
│
▼
Extract Landmark
│
▼
Normalize Landmark
│
▼
Split Dataset
│
├── Train 80%
└── Test 20%
│
▼
Training TCN
│
▼
Testing Model
│
▼
Realtime Camera
│
▼
Frontend ReactJS
Struktur Folder
backend/
│
├── dataset/
│
│ ├── raw/
│ │
│ │ ├── abjad_bisindo/
│ │ │
│ │ ├── abjad_sibi/
│ │ │
│ │ ├── angka/
│ │ │
│ │ └── kata/
│ │
│ ├── landmark/
│ │
│ ├── normalized/
│ │
│ ├── train/
│ │
│ └── test/
│
│
├── models/
│
│ ├── abjad_bisindo/
│ │
│ ├── abjad_sibi/
│ │
│ ├── angka/
│ │
│ └── kata/
│
│
├── outputs/
│
│ ├── confusion_matrix/
│ │
│ ├── classification_report/
│ │
│ ├── accuracy/
│ │
│ └── loss/
│
│
├── realtime/
│
│ ├── realtime_abjad_bisindo.py
│ │
│ ├── realtime_abjad_sibi.py
│ │
│ ├── realtime_angka.py
│ │
│ └── realtime_kata.py
│
│
├── scripts/
│
│ ├── 01_extract_landmark.py
│ │
│ ├── 02_normalize_landmark.py
│ │
│ ├── 03_split_dataset.py
│ │
│ ├── 04_train_abjad_kata.py
│ │
│ ├── 05_test_abjad_kata.py
│ │
│ ├── 06_train_abjad_bisindo.py
│ │
│ ├── 07_test_abjad_bisindo.py
│ │
│ ├── 08_train_sibi.py
│ │
│ ├── 09_test_sibi.py
│ │
│ ├── 10_train_angka.py
│ │
│ └── 11_test_angka.py
│
│
├── utils/
│
│ ├── mediapipe_detector.py
│ │
│ ├── normalization.py
│ │
│ ├── dataset.py
│ │
│ ├── tcn.py
│ │
│ ├── inference.py
│ │
│ └── config.py
│
│
├── requirements.txt
│
└── README.md
Struktur Dataset
Semua tahapan preprocessing akan mempertahankan struktur folder yang sama seperti folder raw.
dataset/
├── raw/
├── landmark/
├── normalized/
├── train/
└── test/
Artinya setiap folder memiliki struktur yang identik sehingga proses preprocessing menjadi lebih mudah, konsisten, dan mudah dikembangkan apabila terdapat penambahan dataset baru.
Struktur Dataset Raw
dataset/raw/
abjad_bisindo/
a/
a_s1_light_on.mp4
a_s2_light_off.mp4
...
b/
c/
...
abjad_sibi/
a/
b/
...
angka/
0/
1/
...
kata/
halo/
terimakasih/
...
Format video yang didukung
.mp4
Tahap 1
Extract Landmark
Script
scripts/01_extract_landmark.py
Input
dataset/raw/
Output
dataset/landmark/
Proses
- Membaca seluruh video
- Membaca frame menggunakan OpenCV
- Deteksi MediaPipe Hands 21 landmark tangan kiri, 21 landmark tangan kanan
- Deteksi MediaPipe Face Mesh 60 landmark dari dagu, mulut, bibir, hidung, mata, pipi
- Mengambil landmark
- Membentuk Sliding Window 30 Frame dan 5 Stride
- Menyimpan file .npy
Output contoh
dataset/
landmark/
abjad_bisindo/
A/
sample_1.npy
sample_2.npy
...
Shape
(30, feature_size)
Catatan: Struktur folder pada
landmark/dibuat sama persis dengan struktur folderraw/.
Tahap 2
Normalize Landmark
Script
scripts/02_normalize_landmark.py
Input
dataset/landmark/
Output
dataset/normalized/
Proses
- Membaca seluruh landmark
- Menggeser koordinat ke titik referensi
- Scaling
- Menyimpan landmark hasil normalisasi
Catatan: Struktur folder pada
normalized/akan dibuat identik dengan folderlandmark/danraw/.
Tahap 3
Split Dataset
Script
scripts/03_split_dataset.py
Input
dataset/normalized/
Output
dataset/train/
dataset/test/
Persentase
Train
80%
Test
20%
Pembagian dilakukan untuk setiap kelas, sehingga semua kelas tetap memiliki data train dan data test.
Seluruh struktur folder pada train/ dan test/ akan dibuat sama persis dengan struktur folder normalized/, landmark/, dan raw/.
Tahap 4
Training Kata
Script
scripts/04_train_kata.py
Input
dataset/train/kata/
Output
models/kata/model_kata.pt
Output tambahan
Accuracy
Loss
Training History
Tahap 5
Testing Kata
Script
scripts/05_test_kata.py
Input
dataset/test/kata/
Model
model_kata.pt
Output
Confusion Matrix
Classification Report
Accuracy
Precision
Recall
F1 Score
Tahap 6
Training Abjad BISINDO
Script
scripts/06_train_abjad_bisindo.py
Output
model_abjad_bisindo.pt
Tahap 7
Testing Abjad BISINDO
Script
scripts/07_test_abjad_bisindo.py
Tahap 8
Training Abjad SIBI
Script
scripts/08_train_abjad_sibi.py
Output
model_abjad_sibi.pt
Tahap 9
Testing Abjad SIBI
Script
scripts/09_test_abjad_sibi.py
Tahap 10
Training Angka
Script
scripts/10_train_angka.py
Output
model_angka.pt
Tahap 11
Testing Angka
Script
scripts/11_test_angka.py
Output
Accuracy
Precision
Recall
F1 Score
Confusion Matrix
Tahap 12
Realtime Detection
Folder
realtime/
Script
realtime_abjad_bisindo.py
realtime_abjad_sibi.py
realtime_angka.py
realtime_kata.py
Proses
Webcam
↓
MediaPipe
↓
Landmark
↓
Normalisasi
↓
Window 30 Frame
↓
Model TCN
↓
Prediksi
↓
Tampilkan hasil
Fungsi Folder Utils
mediapipe_detector.py
Mengambil landmark tangan dan wajah menggunakan MediaPipe.
normalization.py
Melakukan normalisasi koordinat landmark.
dataset.py
Membaca dataset .npy menjadi Dataset PyTorch.
tcn.py
Berisi implementasi model Temporal Convolutional Network.
inference.py
Melakukan prediksi menggunakan model TCN.
config.py
Berisi konfigurasi project.
Model
Project menghasilkan empat model.
model_abjad_bisindo.pt
model_abjad_sibi.pt
model_angka.pt
model_kata.pt