===========================================================
- Introduction
- Nouvelles Fonctionnalités
- Prérequis
- Structure
- Utilisation
- Notes Techniques
- Améliorations de Performance
- Dépannage
- Structure des Fichiers
- Auteur
Ce prototype utilise la technique d'Eigenfaces (PCA) pour la reconnaissance de visage. Il prend en charge le contrôle d'accès binaire avec plusieurs utilisateurs autorisés. Si le visage détecté correspond à un utilisateur autorisé, le système affiche "ACCES AUTORISE", sinon "ACCES REFUSE".
- Détecteur DNN OpenCV : Détection de visage plus robuste avec fallback automatique vers Haar cascade
- Alignement de visage : Recalage automatique basé sur les landmarks pour réduire la variabilité angulaire
- Vote majoritaire amélioré : Lissage temporel sur fenêtre glissante (20 frames par défaut) pour réduire le bruit
- Support multi-utilisateurs : Gestion de plusieurs utilisateurs autorisés avec centroïdes séparés
- Prétraitement amélioré : CLAHE (Contrast Limited Adaptive Histogram Equalization) pour robustesse à l'éclairage
- Python 3.9+
- Webcam fonctionnelle
pip install -r requirements.txt
data/authorized/: Visages de l'utilisateur autorisédata/others/: Visages des autres personnes (négatifs)
-
data/user_1/: Visages du premier utilisateur autorisé -
data/user_2/: Visages du deuxième utilisateur autorisé -
data/user_3/: etc. -
data/others/: Visages des autres personnes (négatifs) -
models/eigenfaces.joblib: Modèle entraîné
python collect_faces.py --label authorized --count 80
python collect_faces.py --label others --count 40python collect_faces.py --label user_1 --count 80
python collect_faces.py --label user_2 --count 80
python collect_faces.py --label others --count 40Options Disponibles :
--use-dnn: Utiliser le détecteur DNN (par défaut activé, fallback Haar si indisponible)--use-alignment: Activer l'alignement de visage (par défaut activé)--delay: Délai entre captures (défaut: 0.25s)
python train.py --data-dir data --n-components 80python train.py --data-dir data --n-components 80 --multi-userOptions Disponibles :
--n-components: Nombre de composantes PCA (défaut: 80)--multi-user: Activer le mode multi-utilisateurs--use-dnn: Utiliser le détecteur DNN pour le prétraitement--use-alignment: Activer l'alignement de visage
python live_demo.py --model-path models/eigenfaces.joblib --camera-index 0Options Disponibles :
--confidence-scale: Facteur de multiplication du seuil (<1 plus permissif, >1 plus strict, défaut: 1.0)--buffer-size: Taille du buffer pour vote majoritaire (défaut: 20 frames)--min-frames: Nombre minimum de frames avant décision (défaut: 8)--use-dnn: Utiliser le détecteur DNN--use-alignment: Activer l'alignement de visage
- Détecteur DNN OpenCV : Plus robuste aux angles et éclairages variés
- Fallback Haar Cascade : Si les modèles DNN ne sont pas disponibles
- Détection automatique du plus grand visage dans le cadre
- Conversion en niveaux de gris
- Alignement Automatique : Rotation basée sur la position des yeux pour normaliser l'orientation
- Redimensionnement à 200x200 pixels
- CLAHE : Égalisation adaptative d'histogramme pour robustesse à l'éclairage
- PCA (Principal Component Analysis) avec
whiten=Truepour décorréler les composantes - Projection dans un espace de faible dimension (80 composantes par défaut)
- Distance euclidienne au centroïde de l'utilisateur autorisé
- Seuil Adaptatif : Calculé entre le 95e percentile des distances autorisées et le 5e percentile des distances négatives
- Vote Majoritaire sur une fenêtre glissante de 20 frames
- Décision après au moins 8 frames consécutives avec visage détecté
- Réduction du bruit et des faux positifs/négatifs
- Détecteur DNN : Meilleure précision de détection, moins de faux négatifs
- Alignement : Réduction de la variabilité due aux angles de vue
- Vote Majoritaire : Stabilité temporelle, réduction du bruit
- CLAHE : Robustesse aux variations d'éclairage
- Multi-Utilisateurs : Support natif pour plusieurs personnes autorisées
- Vérifiez que vous avez capturé suffisamment d'images (≥80 recommandé)
- Variez les angles, distances et éclairages lors de la capture
- Ajustez
--confidence-scaleà 0.8 ou 0.9 pour être plus permissif - Vérifiez l'éclairage lors de la démo (évitez les reflets, ombres fortes)
- Augmentez
--confidence-scaleà 1.2 ou 1.3 - Ajoutez plus d'images négatives dans
data/others/ - Augmentez
--buffer-sizepour un vote plus conservateur
- Augmentez
--min-framespour exiger plus de frames avant décision - Vérifiez que la webcam fonctionne correctement
- Assurez-vous d'avoir un bon éclairage frontal
.
├── face_utils.py # Utilitaires : détection, prétraitement, alignement
├── collect_faces.py # Script de capture depuis webcam
├── train.py # Entraînement du modèle Eigenfaces
├── live_demo.py # Démonstration en temps réel
├── requirements.txt # Dépendances Python
├── README.md # Ce fichier
├── data/
│ ├── authorized/ # Visages autorisés (mode simple)
│ ├── user_1/ # Utilisateur 1 (mode multi-user)
│ ├── user_2/ # Utilisateur 2 (mode multi-user)
│ └── others/ # Visages négatifs
└── models/
└── eigenfaces.joblib # Modèle entraîné
Ilyas Fardaoui