===========================================================
- 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".
Le détecteur DNN OpenCV est utilisé pour détecter les visages avec une plus grande précision. En cas d'indisponibilité des modèles DNN, un fallback automatique vers Haar cascade est activé.
L'alignement de visage est effectué en utilisant les landmarks pour réduire la variabilité angulaire. Cela permet d'améliorer la précision de la reconnaissance.
Le vote majoritaire est effectué sur une fenêtre glissante de 20 frames par défaut. Cela permet de réduire le bruit et les faux positifs/négatifs.
Le système prend en charge plusieurs utilisateurs autorisés avec des centroïdes séparés. Cela permet d'améliorer la précision de la reconnaissance en fonction de l'utilisateur.
Le prétraitement utilise la CLAHE (Contrast Limited Adaptive Histogram Equalization) pour améliorer la 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écutifs 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