Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧬 STATION STAND // BIOMETRIC TERMINAL

Expérience interactive de reconnaissance faciale pour JPO Data & IA. Thème : Cyberpunk / Sci-Fi / Terminal

Project Status Tech

📋 Description

Ce projet est une installation interactive conçue pour un stand de Journée Portes Ouvertes (JPO). Il démontre les capacités de l'Intelligence Artificielle (Computer Vision) à travers une expérience ludique et immersive.

Le système permet aux visiteurs de créer un "Passeport Numérique" via leur smartphone, puis d'être reconnus biométriquement par une caméra sur le stand.

⚙️ Architecture du Pipeline

Le projet repose sur une architecture hybride (Mobile + Serveur + Stand) :

  1. Mobile (Client) : Interface web pour la capture photo avec choix (Pseudo / Anonyme).
  2. Serveur (API) : Réception des images, vectorisation (DeepFace) et stockage sécurisé.
  3. Stand (Python App) : Application de vision par ordinateur qui identifie en continu de multiples utilisateurs simultanément.
  4. Éducation : Une page explicative détaillant le fonctionnement technique (Vecteurs, Distance Euclidienne).

📂 Structure du Projet

JPO_PROJECT/
│
├── deploy_o2switch/            # ☁️ PARTIE SERVER (Hébergée)
│   ├── generator.py            # Script d'augmentation de données (Server-side)
│   ├── passenger_wsgi.py       # Point d'entrée WSGI pour O2Switch
│   ├── server_api.py           # API FastAPI (Réception des photos)
│   ├── requirements.txt        # Dépendances serveur
│   └── static/                 # 📱 FRONT-END
│       ├── explication.html    # Page pédagogique (Architecture du système)
│       ├── index.html          # App mobile (Capture V2 : Pseudo/Anonyme)
│       └── qrcode_modern.min.js
│
├── station_stand/              # 🖥️ PARTIE STAND (Autonome)
│   ├── assets/                 # 🖼️ Ressources graphiques
│   ├── main_stand.py           # 🔥 Script Principal (Boucle OpenCV Multi-User)
│   ├── ui.py                   # 🎨 Gestion de l'interface (HUD, Textes)
│   ├── config.toml             # ⚙️ Configuration (Couleurs, Chemins, URL)
│   ├── config.py               # Chargeur de configuration
│   ├── logger.py               # 🪵 Système de logs
│   ├── recognizer.py           # Moteur IA (Face Recognition & Matching)
│   ├── synchronizer.py         # Thread de synchro (Téléchargement des profils)
│   ├── locks.py                # Gestion Thread-Safety (AI Lock)
│   ├── generator.py            # Augmentation de données (Client-side)
│   ├── requirements.txt        # 📦 Dépendances Stand (Exclusif)
│   ├── station_stand.log       # 📝 Fichier de logs (Auto-généré)
│   └── shared_data/            # BDD Locale (Profils synchronisés)
│
├── requirements-dev.txt        # 🛠️ Dépendances de développement (Racine)
└── README.md                   # Documentation du projet

🚀 Installation & Démarrage

1. Partie Web (Hébergement)

Les fichiers doivent être hébergés sur un serveur (ex: o2switch) accessible en HTTPS.

  • Placer les fichiers de deploy_o2switch/static/ dans public_html/static/.
  • S'assurer que le dossier shared_data (créé par l'API) a les permissions d'écriture.

2. Partie Stand (Local)

Le script tourne sur une machine (PC/Mac) équipée d'une webcam.

Prérequis :

  • Python 3.8+
  • Webcam fonctionnelle

Installation :

pip install -r station_stand/requirements.txt

Lancement :

python station_stand/main_stand.py

🎮 Guide d'Utilisation (Scénario)

Étape 1 : Enrôlement (Visiteur)

  1. Le visiteur accède à l'app web (index.html) via un QR code générique.
  2. Identification :
    • Option A (Anonyme) : Il clique sur "RESTER ANONYME". Un ID unique (ex: ID-A8F2) est généré.
    • Option B (Pseudo) : Il entre un pseudo (ex: ROMAIN). Le système gère les doublons automatiquement en interne.
  3. Capture :
    • Une interface "Guide" (cadre central) l'aide à positionner son visage.
    • Il prend la photo -> Animation "Terminal" -> Confirmation.

Étape 2 : Reconnaissance (Stand)

  1. Le visiteur passe devant la caméra du stand.
  2. Mode Continu : Le stand détecte et identifie automatiquement tous les visages connus dans le champ de vision.
  3. Feedback Visuel :
    • Connu : Cadre Vert + Affichage du Pseudo/ID.
    • Inconnu : Cadre Rouge HUD.
    • Sidebar : Liste des utilisateurs identifiés à gauche de l'écran.

🛠️ Commandes Administrateur (Clavier)

L'opérateur du stand dispose de raccourcis clavier pour gérer la session :

  • R (Reload) : Force le rechargement immédiat de tous les profils depuis le dossier partagé (réinitialise aussi le timer de rechargement auto de 5min).
  • E (Empty/Archive) : Archive tous les profils actuels dans un dossier archives/YYYYMMDD_... et vide la mémoire vive pour repartir à zéro (ex: changement de groupe d'élèves).
  • ECHAP : Quitter l'application.

Étape 3 : Compréhension (Bonus)

  • Un QR Code permanent en bas à droite de l'écran invite à comprendre la technologie.
  • Il redirige vers explication.html qui détaille le pipeline (Detection -> Embedding -> Matching).

🎨 Personnalisation (Design System)

L'interface utilise une palette "Cyberpunk" définie dans les variables CSS et les constantes Python.

Couleurs principales :

  • 🟠 Neon Orange : #FF7700 (BGR: 0, 119, 255) - Actions & Alertes
  • 🔵 Neon Cyan : #00FFFF (BGR: 255, 255, 0) - Données & Système
  • Dark BG : #050505 (BGR: 10, 10, 10) - Fond

Polices :

  • Titres : Orbitron (Google Fonts)
  • Data/Code : Share Tech Mono (Google Fonts)

🛠️ Dépannage Rapide

  • L'upload reste bloqué sur l'animation : Vérifiez la connexion internet du téléphone ou les logs du serveur (error_log).
  • La caméra ne s'ouvre pas (Mobile) : Vérifiez que le site est bien en HTTPS (obligatoire pour getUserMedia).
  • Lag sur le stand : Réduisez la résolution de capture dans main_stand.py ou la fréquence de détection faciale.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages