99 lines
2.6 KiB
Python
99 lines
2.6 KiB
Python
"""
|
|
Konfigurasi untuk project penerjemah bahasa isyarat Indonesia.
|
|
|
|
Berisi konfigurasi project sesuai README.md.
|
|
"""
|
|
|
|
import random
|
|
import numpy as np
|
|
import torch
|
|
from pathlib import Path
|
|
|
|
# Random seed for reproducibility
|
|
RANDOM_SEED = 42
|
|
|
|
# Set random seeds
|
|
random.seed(RANDOM_SEED)
|
|
np.random.seed(RANDOM_SEED)
|
|
torch.manual_seed(RANDOM_SEED)
|
|
if torch.cuda.is_available():
|
|
torch.cuda.manual_seed_all(RANDOM_SEED)
|
|
|
|
# Base paths
|
|
BASE_DIR = Path(__file__).parent.parent
|
|
DATASET_DIR = BASE_DIR / "dataset"
|
|
|
|
# Dataset paths
|
|
RAW_DIR = DATASET_DIR / "raw"
|
|
LANDMARK_DIR = DATASET_DIR / "landmark"
|
|
NORMALIZED_DIR = DATASET_DIR / "normalized"
|
|
TRAIN_DIR = DATASET_DIR / "train"
|
|
TEST_DIR = DATASET_DIR / "test"
|
|
|
|
# Model paths (sesuai README: models/{category}/)
|
|
MODEL_DIR = BASE_DIR / "models"
|
|
|
|
# Output paths
|
|
OUTPUT_DIR = BASE_DIR / "outputs"
|
|
CONFUSION_MATRIX_DIR = OUTPUT_DIR / "confusion_matrix"
|
|
CLASSIFICATION_REPORT_DIR = OUTPUT_DIR / "classification_report"
|
|
ACCURACY_DIR = OUTPUT_DIR / "accuracy"
|
|
LOSS_DIR = OUTPUT_DIR / "loss"
|
|
|
|
# Create directories
|
|
for dir_path in [MODEL_DIR, CONFUSION_MATRIX_DIR, CLASSIFICATION_REPORT_DIR, ACCURACY_DIR, LOSS_DIR]:
|
|
dir_path.mkdir(parents=True, exist_ok=True)
|
|
|
|
# Categories (urutan sesuai README)
|
|
CATEGORIES = ["abjad_bisindo", "abjad_sibi", "angka", "kata"]
|
|
|
|
# Sliding window configuration
|
|
# Sesuai README: 30 Frame dan 5 Stride
|
|
WINDOW_SIZE = 30
|
|
STRIDE = 5
|
|
|
|
# Landmark configuration
|
|
NUM_HAND_LANDMARKS = 21 # MediaPipe hand landmarks
|
|
NUM_FACE_LANDMARKS = 60 # Selected face mesh landmarks
|
|
|
|
# Feature size calculation:
|
|
# - Left hand: 21 landmarks x 3 coordinates = 63
|
|
# - Right hand: 21 landmarks x 3 coordinates = 63
|
|
# - Face mesh: 60 landmarks x 3 coordinates = 180
|
|
# Total: 63 + 63 + 180 = 306
|
|
FEATURE_SIZE = 306
|
|
|
|
# Training configuration
|
|
BATCH_SIZE = 32
|
|
EPOCHS = 100
|
|
LEARNING_RATE = 0.001
|
|
|
|
# Train/test split ratio (sesuai README: 80% / 20%)
|
|
TRAIN_RATIO = 0.8
|
|
TEST_RATIO = 0.2
|
|
|
|
# Video extensions (sesuai README)
|
|
VIDEO_EXTENSIONS = [".mp4"]
|
|
|
|
# Face mesh landmark indices (60 landmarks dari dagu, mulut, bibir, hidung, mata, pipi)
|
|
FACE_LANDMARK_INDICES = [
|
|
# Outer face outline (dagu)
|
|
152, 234, 454, 358, 465, 452, 253, 389,
|
|
# Eyebrows
|
|
336, 296, 334, 293, 300, 276, 283, 282,
|
|
# Eyes (mata)
|
|
33, 160, 158, 133, 153, 144, 362, 385, 387, 263, 373, 249,
|
|
# Nose (hidung)
|
|
1, 2, 98, 327, 4, 75, 221, 189, 417, 62, 305, 293,
|
|
# Mouth outer (mulut luar)
|
|
13, 14, 17, 84, 185, 61, 291, 0,
|
|
# Mouth inner (bibir)
|
|
78, 95, 88, 178, 87, 317, 402, 310,
|
|
# Cheeks (pipi)
|
|
50, 187, 411, 93, 323, 234, 454, 36,
|
|
# Additional key points
|
|
168, 6, 195, 197, 199, 175, 246, 123,
|
|
# Forehead
|
|
10, 151, 9, 107
|
|
]
|