Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

guzzipa/SignAI

Open more actions menu

Repository files navigation

✋ SignAI — Reconocimiento de señas en tiempo real

SignAI Demo

SignAI interpreta el alfabeto de ASL en vivo usando MediaPipe + modelos MLP. Incluye:

  • 🧠 Entrenamiento a partir de landmarks (tu data real o mixta).
  • 🤖 Generación de data sintética guiada por imagen de referencia (Gemini).
  • 🧰 Soporte para múltiples modelos conmutables desde la UI:
    • signai_letters_full_mlp.joblib → modelo propio (real/sintético mix).
    • signai_letters_mlp.joblib → solo data sintética.
    • signai_mnist_mlp.joblib → Kaggle (pipeline tipo MNIST 28×28).
  • 🪄 App de Streamlit con dibujo de landmarks / bbox y armado de palabra.

🚀 Demo rápida

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
streamlit run app/app_streamlit.py

Entrá al link que muestra Streamlit (por defecto http://localhost:8501) y elegí el modelo desde la barra lateral.


📁 Estructura

.
├── app/
│   └── app_streamlit.py
├── data/
│   ├── ref/            # imágenes de referencia por letra (A–Y, sin J/Z)
│   ├── synth/          # data sintética generada
│   └── processed/      # normalizado para entrenar (opcional)
├── models/
│   ├── signai_letters_full_mlp.joblib
│   ├── signai_letters_mlp.joblib
│   ├── signai_mnist_mlp.joblib
│   ├── label_map_letters.json
│   └── label_map_mnist.json
├── scripts/
│   ├── gen_synth_alphabet_guided.py   # generación con referencia + validación
│   ├── gen_synth_alphabet_genai.py    # generación libre
│   └── cam_preview.py
└── train/
    ├── train_letters_from_images.py
    ├── train_landmarks.py
    ├── collect.py / collect_one.py    # captura manual
    └── letters_config.yaml / config.yaml

🔑 API Key (opcional, para data sintética)

Creá .env en la raíz:

GEMINI_API_KEY="TU_API_KEY"

🖼️ Generar data sintética

  1. Asegurate de tener data/ref/A.png ... Y.png (pose canónica por letra).
  2. Ejecutá:
python scripts/gen_synth_alphabet_guided.py
  • Usa la referencia, valida con MediaPipe (similitud de pose) y/o con tu clasificador.
  • Guarda imágenes en data/synth/<LETRA>/.

Tip: si hay muchos rechazos, ajustá pose_threshold en el script (0.10 → 0.12).


🏋️ Entrenar

Landmarks (modelo de letras)

python train/train_letters_from_images.py
# crea models/signai_letters_full_mlp.joblib + models/label_map_letters.json

Kaggle (MNIST-style)

Si ya tenés signai_mnist_mlp.joblib + label_map_mnist.json, podés usarlo directo. De lo contrario, adaptá train/train_mnist_mlp.py a tu dataset (28×28).


🧪 Modo de inferencia en la app

  • Landmarks: dibuja puntos/conexiones y usa 63 features (21×3).
  • MNIST: recorta la mano, normaliza a 28×28 y predice; dibuja un bbox verde.

Elegís el modelo desde el sidebar. La app arma una palabra agregando letras cuando la predicción se mantiene estable por N frames y supera el umbral.


🧾 Licencia

MIT


🤝 Contribuir

PRs y issues bienvenidos. Si agregás un modelo nuevo, sólo sumalo a MODEL_OPTIONS en app/app_streamlit.py indicando type = landmarks o mnist.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.