TIF_E4253362/backend/README.md

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 folder raw/.


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 folder landmark/ dan raw/.


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