Python Package¶
Dit document beschrijft de smart_gestures-package die de Signapse AI-modellen bundelt. De focus ligt op module-indeling, gebruikte PyTorch-componenten, inference-preprocessing en trainingsutilities rond MediaPipe en NumPy.
Package-overzicht¶
smart_gestures wordt vanuit notebooks/package/ gebouwd en als PyPI-package gedeeld. De submodules zijn strikt gescheiden per taak zodat modellen onafhankelijk kunnen worden geüpdatet.
smart_gestures/
├── __init__.py
├── alphabet/
│ ├── __init__.py
│ ├── asl_model/
│ │ ├── model.py # ASLModel + normalize_landmarks
│ │ ├── data/classes.json # label mapping
│ │ └── models/*.pth # getrainde weights
│ └── vgt_model/
│ ├── model.py
│ ├── data/classes.json
│ └── models/*.pth
└── gestures/
└── lstm_model/
├── model.py # LSTMModel + sequence normalisatie
├── data/gesture_map.json
└── models/lstm_model.pth
Modelbestanden & laden¶
- Elke submodule bewaart
.pth-bestanden ondermodels/. De bestanden bevatten hetstate_dictvan de PyTorch-module. - De corresponderende
model.pylaadt de klassen (classes.jsonofgesture_map.json), instantiëert de architectuur en roepttorch.load(..., map_location=DEVICE)om de gewichten in te lezen. - Tijdens instantiatie wordt het model direct in
eval()-modus gezet zodat inference consistent blijft (ASLModelenVGTModelin hun__init__,LSTMModelidem).
PyTorch-componenten¶
| Component | Gebruikt in | Functie | Motivatie |
|---|---|---|---|
nn.Sequential |
Alphabet-modellen (asl_model/model.py, vgt_model/model.py) |
Lineaire feed-forward stack | Eenvoudig te lezen/aanpassen; ideaal voor statische 63-d input. |
nn.Linear |
Alle modellen | Projecteert features naar volgende laag of klassenruimte | Volledige connectiviteit nodig omdat keypoints al dense zijn. |
nn.ReLU |
Alphabet-netwerken | Niet-lineariteit | Houdt training stabiel zonder extra parameters. |
nn.Dropout(0.2) |
Alphabet- en LSTM-outputlaag | Regularisatie | Vermindert overfitting bij beperkte datasets zonder inference-penalty. |
nn.LSTM |
gestures/lstm_model/model.py |
Tijdelijke verwerking van 40×258 sequenties | Bewaart temporele context van pose + beide handen. |
torch.nn.utils.rnn.pack_padded_sequence + pad_packed_sequence |
LSTMModel.forward |
Efficiënte verwerking van ge-padding sequenties | Bespaart rekenkracht doordat daadwerkelijke lengtes worden gebruikt. |
torch.softmax |
Alle predict()-methodes |
Confidence berekening | Nodig voor REST-responses en loss-functies (Brier-penalty). |
torch.load / state_dict |
Alle model.py |
Modelgewichten laden | Houdt package-artefacten klein en compatibel met PyTorch tooling. |
Inference-paden¶
Alphabet-modellen (ASL/VGT)¶
- Data-ingang: lijst van 21 landmarks met
x,y,z-velden (MediaPipe Hands output). - Normalisatie (
normalize_landmarks): translatie naar pols-oorsprong + schaling opwrist_to_middleafstand; resulteert in een(21, 3)array. - Flattening:
reshape(-1)→ 63 features. - Tensor-voorbereiding:
torch.from_numpy(...).reshape(1, IN_DIM)op CPU of CUDA device. - Forward pass:
nn.Sequentialproduceert logits, daarna softmax voor klasse + confidence.
LSTM woordmodel¶
- Data-ingang: sequentie van maximaal 40 frames waarin elk frame 258 features heeft (
pose + left hand + right hand). Deze 258-d vectoren worden opgebouwd door de MediaPipe/keypoints/poseendpoint. - Normalisatie (
normalize_landmarksingestures/lstm_model/model.py): centreert hand-keypoints op het eerst gedetecteerde polskoordinaat en schaalt op de pols → middelvinger afstand. Pose-coördinaten blijven ongewijzigd. - Padding/Truncation (
prepare_input): sequenties korter dan 40 frames worden met nullen opgevuld; langere sequenties worden afgekapt. De bijhorende lengte wordt meegegeven voor packed sequences. - LSTM forward:
pack_padded_sequencezorgt dat alleen echte frames door denn.LSTMgaan. De laatste time-step output passeert door dropout +nn.Linear. - Softmax geeft de vijf woordklassen (
gesture_map.json) met confidence terug.
Training utilities¶
| Module | Pad | Rol |
|---|---|---|
data_utils.py |
notebooks/training/*/data_utils.py |
Normaliseert landmerken, voorziet PyTorch Dataset/DataLoader, en ondersteunt augmentaties zoals rotatie en Gaussian noise (belangrijk om MediaPipe-variaties te simuleren). |
train_utils.py |
notebooks/training/*/train_utils.py |
Train-loop met mixup, label smoothing, Brier-regularisatie, misclassificatie-penalty, scheduler/early-stop hooks. Verbindt NumPy batches met PyTorch-modellen. |
callbacks.py |
notebooks/training/vgt_model/callbacks.py (gedeeld) |
EarlyStopping, ModelCheckpoint en create_scheduler wrappers voor ReduceLROnPlateau/Step/Cosine. |
model_utils.py |
notebooks/training/*/model_utils.py |
Bouwt dezelfde architecturen die later in smart_gestures terechtkomen. |
run_training.py |
notebooks/training/*/run_training.py |
CLI-entrypoint dat hyperparameters en augmentatie/scheduler-opties bundelt. |
De utilities combineren PyTorch met MediaPipe-output door datasets eerst via normalize_landmarks te aligneren. Augmentaties zoals rotatie/noise en mixup zorgen dat modellen robuust blijven voor variaties in MediaPipe-detecties op verschillende devices. NumPy wordt gebruikt voor bulkmanipulaties, waarna torch.from_numpy tensors genereert voor training en inference.
Model lifecycle¶
Onderstaande checklist beschrijft hoe een nieuw .pth-model in productie komt:
- Train – gebruik de relevante
notebooks/training/*/run_training.pyof Jupyter-notebook en leg hyperparameters vast (zie tabel hieronder). - Valideer – evalueer met
evaluate_model/evaluate_metricsen archiveer accuracy-, loss- en calibratiecijfers. - Promoot gewichten – kopieer het beste
.pthnaar de juistenotebooks/package/smart_gestures/.../models/map en commit/bewaar de bijhorendeclasses.json/gesture_map.jsonupdates. - Bump package – verhoog
versioninnotebooks/package/pyproject.toml, voerpython -m builduit en publiceer/installeer de nieuwesmart_gesturesrelease (lokaal kanpip install -e .volstaan). - Update server – pas
server/pyproject.tomlenserver/requirements.txtaan naar de nieuwesmart-gesturesversie zodat FastAPI het juiste artefact laadt. - Regressietests – draai minimaal de API smoke-tests (ASL/VGT/LSTM inferentie tegen bekende voorbeelden) voordat er gedeployed wordt.
CLI-argumenten per trainingsscript¶
ASL alphabet (notebooks/training/asl_model/run_training.py)¶
| Argument | Default | Omschrijving |
|---|---|---|
--batch_size |
32 | Batchgrootte voor DataLoader. |
--epochs |
20 | Aantal volledige epochs. |
--lr |
1e-3 | Learning rate voor Adam-optimizer. |
--output |
asl_alphabet_model.pth |
Doelpad voor het opgeslagen model (wordt later naar smart_gestures gekopieerd). |
VGT alphabet (notebooks/training/vgt_model/run_training.py)¶
| Argument | Default | Omschrijving |
|---|---|---|
--batch_size |
32 | Batchgrootte voor trainingen/validatie. |
--epochs |
50 | Maximale epochs (early stop kan eerder afbreken). |
--lr |
1e-3 | Learning rate voor Adam. |
--output |
vgt_alphabet_model.pth |
Bestandsnaam voor de finale .pth. |
--augment |
False (flag) |
Activeer data-augmentatie in LandmarksDataset. |
--augment_prob |
0.5 | Kans dat augmentaties worden toegepast per sample. |
--noise_std |
0.01 | Std-dev van Gaussian noise tijdens augmentatie. |
--rotate_deg |
10.0 | Maximale random rotatie in graden. |
--scheduler |
plateau |
Scheduler-type: none, plateau, step, cosine. |
--scheduler_factor |
0.5 | Factor voor ReduceLROnPlateau. |
--scheduler_patience |
3 | Patience voor ReduceLROnPlateau. |
--step_size |
10 | Stapgrootte indien scheduler=step. |
--gamma |
0.1 | Decayfactor voor StepLR. |
--early_stop_patience |
5 | #epochs zonder verbetering voordat training stopt. |
--early_stop_min_delta |
0.0 | Minimale verbetering om early stop te resetten. |
--monitor |
val_loss |
Metric voor early stop/checkpoint (val_loss of val_acc). |
--checkpoint |
False (flag) |
Schakel model-checkpointing in. |
--checkpoint_path |
best_vgt_model.ckpt |
Pad/naam voor checkpoints. |
--label_smoothing |
0.1 | Factor voor CrossEntropy label smoothing. |
--lambda_brier |
1.1 | Weights voor Brier-score regularisatie. |
--misclass_alpha |
0.1 | gewicht voor misclassificatie-confidence penalty. |
--mixup_alpha |
0.2 | Mixup Beta-parameter (0 schakelt mixup uit). |
LSTM gestures (notebooks/training/lstm_model/run_training.py)¶
| Argument | Default | Omschrijving |
|---|---|---|
--batch_size |
32 | Batchgrootte voor sequenties. |
--epochs |
50 | Aantal epochs voor sequentietraining. |
--lr |
1e-3 | Learning rate. |
--hidden_size |
128 | Verborgen dimensie van de LSTM-layer(s). |
--num_layers |
2 | Aantal gestapelde LSTM-lagen. |
--output |
lstm_model.pth |
Bestandsnaam voor het opgeslagen woordmodel. |
Relevante bronnen & links¶
notebooks/package/smart_gestures/alphabet/asl_model/model.py— inference-logica ennn.Sequentialopbouw voor ASL.notebooks/package/smart_gestures/alphabet/vgt_model/model.py— identieke architectuur met aangepaste label-set en calibratie callbacks.notebooks/package/smart_gestures/gestures/lstm_model/model.py— sequentiële preprocess,nn.LSTMen padded sequence handling.notebooks/training/asl_model/run_training.py,.../vgt_model/run_training.py,.../lstm_model/run_training.py— beschrijven hoe datasets geladen en modellen getraind worden met augmentaties, callbacks en checkpoints.- AI Architecture — high-level architectuur; combineer dit document voor deep-dive info met het hoofdarchitectuuroverzicht.
Document-informatie:
- Versie: 1.1
- Datum: December 2025
- Auteurs: Lynn Delaere
- Contact: Zie GitHub repository