-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathREADME.md.bak.20260312162753
More file actions
177 lines (136 loc) · 6.69 KB
/
README.md.bak.20260312162753
File metadata and controls
177 lines (136 loc) · 6.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# Reconnaissance de visage par Eigenfaces (PCA) - Version Améliorée
Prototype de contrôle d'accès binaire avec support multi-utilisateurs. Si le visage correspond à un utilisateur autorisé, le système affiche `ACCES AUTORISE`, sinon `ACCES REFUSE`.
## 🚀 Nouvelles fonctionnalités
- ✅ **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
## Prérequis
- Python 3.9+
- Webcam fonctionnelle
- `pip install -r requirements.txt`
## Structure
### Mode simple (un utilisateur)
- `data/authorized/` : visages de l'utilisateur autorisé
- `data/others/` : visages des autres personnes (négatifs)
### Mode multi-utilisateurs
- `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é
## Utilisation
### 1) Collecte des visages
#### Mode simple
```bash
python collect_faces.py --label authorized --count 80
python collect_faces.py --label others --count 40
```
#### Mode multi-utilisateurs
```bash
python collect_faces.py --label user_1 --count 80
python collect_faces.py --label user_2 --count 80
python collect_faces.py --label others --count 40
```
**Options 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)
### 2) Entraînement Eigenfaces (PCA)
#### Mode simple
```bash
python train.py --data-dir data --n-components 80
```
#### Mode multi-utilisateurs
```bash
python train.py --data-dir data --n-components 80 --multi-user
```
**Options 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
Le script affiche un résumé avec :
- Seuil global et seuils par utilisateur (mode multi-user)
- Statistiques des distances (percentiles)
- Nombre d'échantillons par classe
### 3) Démonstration en direct
```bash
python live_demo.py --model-path models/eigenfaces.joblib --camera-index 0
```
**Options 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
**États affichés :**
- `VEUILLEZ VOUS APPROCHER DE LA CAMERA` : Aucun visage détecté
- `ANALYSE EN COURS...` : Visage détecté, analyse en cours (pendant les premières frames)
- `ACCES AUTORISE` ou `ACCES AUTORISE - USER_1` : Visage reconnu (mode multi-user)
- `ACCES REFUSE` : Visage non reconnu
**Touches :**
- `q` ou `Esc` : Quitter
## Notes techniques
### Détection 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
### Prétraitement
- 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
### Reconnaissance
- **PCA (Principal Component Analysis)** avec `whiten=True` pour 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
### Décision temporelle
- **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
### Mode multi-utilisateurs
- Chaque utilisateur a son propre centroïde dans l'espace PCA
- Seuil calculé individuellement pour chaque utilisateur
- Identification de l'utilisateur le plus proche avec affichage du nom
## Améliorations de performance
1. **Détecteur DNN** : Meilleure précision de détection, moins de faux négatifs
2. **Alignement** : Réduction de la variabilité due aux angles de vue
3. **Vote majoritaire** : Stabilité temporelle, réduction du bruit
4. **CLAHE** : Robustesse aux variations d'éclairage
5. **Multi-utilisateurs** : Support natif pour plusieurs personnes autorisées
## Dépannage
### Le système ne reconnaît pas mon visage
- 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)
### Trop de faux positifs
- Augmentez `--confidence-scale` à 1.2 ou 1.3
- Ajoutez plus d'images négatives dans `data/others/`
- Augmentez `--buffer-size` pour un vote plus conservateur
### Détection instable
- Augmentez `--min-frames` pour exiger plus de frames avant décision
- Vérifiez que la webcam fonctionne correctement
- Assurez-vous d'avoir un bon éclairage frontal
## Structure des fichiers
```
.
├── 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é
```
## Author
Ilyas Fardaoui