GoSecuri — CNI
Contrôle d'accès visiteurs par OCR + biométrie
Application tactile Python/KivyMD pour kiosque d'accueil — lecture de CNI par caméra, extraction OCR des données d'identité et vérification biométrique du visage du visiteur.

Contexte
Projet de formation — GoSecuri
Année
2024 – 2025
Niveau
Master 2 Expert IT/SI
Type
Projet individuel
Stack
Python / KivyMD / SQLite
Plateforme
Tablette / Kiosque
Contrôle des entrées — CNI, visage, et base de données
Second module de la suite GoSecuri, cette application gère le contrôle d'accès des visiteurs lors d'événements sécurisés. Conçue pour un kiosque d'accueil ou une tablette, elle guide l'agent à travers un flux complet et automatisé.
Le visiteur présente sa CNI devant la caméra. L'application analyse la qualité en temps réel, puis déclenche l'extraction OCR des données d'identité via Tesseract après prétraitement OpenCV.
Les données extraites sont croisées avec la base SQLite. Un moteur de recherche floue (préfixe 7 caractères) absorbe les inévitables erreurs OCR. La photo du visage de la CNI est ensuite comparée au visage en direct — avec gestion des 4 cas possibles : accès, alerte, enregistrement ou refus.
1. Scan CNI — cadre vert + métriques qualité
2. Prétraitement — CLAHE · gamma · bilatéral
3. OCR Tesseract — PSM 3 · OEM 3 · fra+eng
4. Regex fallback — extraction sans labels
5. SQLite lookup — exact → flou (7 chars)
6. Vérif. visage — CNI vs caméra live
# Résultats possibles
✅ Accès autorisé ⚠️ Alerte
📝 Enregistrement 🚫 Refus
Ce que le projet couvre
Scan CNI par caméra
Compatible IP Webcam, DroidCam ou webcam USB. L'agent présente la carte devant la caméra — un indicateur de qualité (netteté, luminosité, cadrage) guide le positionnement en temps réel.
OCR Tesseract multilingue
Extraction de toutes les données d'identité : nom, prénoms, date et lieu de naissance, nationalité, numéro de document, date d'expiration. Modes PSM 3 / OEM 3, langues fra+eng.
Prétraitement OpenCV avancé
Pipeline de correction avant OCR : détection de contours pour recadrage, CLAHE pour le contraste, correction gamma, filtre bilatéral pour réduire le bruit sans perdre les bords.
4 cas de contrôle d'accès
Accès autorisé (connu + match visage), alerte (connu + mismatch), enregistrement (nouveau + match), ou refus (nouveau + mismatch). Chaque cas est géré et tracé.
Base SQLite + recherche floue
Recherche exacte puis floue (préfixe 7 caractères) pour absorber les erreurs OCR inévitables. Photo du visage enregistrée pour comparaison lors des passages suivants.
Interface tactile KivyMD
Material Design cross-platform pensé pour kiosque d'accueil ou tablette Android. 4 écrans gérés par ScreenManager : splash, scan CNI, résultats, capture visage.
Technologies utilisées
Python 3.x
Langage
KivyMD
Interface graphique
Kivy ScreenManager
Navigation
Tesseract OCR
Lecture de texte
OpenCV
Prétraitement image
face_recognition
IA / Biométrie
SQLite
Base de données
Docker Compose
DevOps
Navigation Kivy
ScreenManager
├── SplashScreen
│ └── démarrage app
├── ScanScreen
│ └── capture CNI + métriques
├── ResultScreen
│ └── données OCR + statut
└── FaceScreen
└── capture + comparaison
SQLite: visitors · photos · passages
Le pipeline OCR — du pixel au nom
Extraire des données d'identité depuis une CNI photographiée à la volée — sans parfaite mise au point, sans éclairage idéal.
ocr_processor.py
def preprocess(img):
gray = cv2.cvtColor(img, COLOR_BGR2GRAY)
clahe = cv2.createCLAHE(clipLimit=2.0)
enhanced = clahe.apply(gray)
corrected = gamma_correct(enhanced, 1.2)
return cv2.bilateralFilter(corrected, 9, 75, 75)
def extract_text(img):
config = "--psm 3 --oem 3 -l fra+eng"
raw = pytesseract.image_to_string(img, config)
return regex_fallback(raw)
OpenCV détecte les contours de la carte pour recadrer précisément la CNI, éliminant le fond parasite autour.
CLAHE améliore le contraste local, la correction gamma compense les sur/sous-expositions, le filtre bilatéral réduit le bruit sans flouter les bords des lettres.
Tesseract (PSM 3 / OEM 3, fra+eng) lit le texte. Un moteur regex fallback extrait les données même si les labels "NOM / Surname" sont illisibles.
Recherche dans SQLite : d'abord exacte, puis floue sur les 7 premiers caractères pour absorber les fautes OCR. Si nouveau : la photo de la CNI est enregistrée comme référence.
L'interface en images
Application tactile KivyMD — du scan à la vérification biométrique



Voir le code source
Ce projet vous intéresse ?
Ce que ce projet m'a appris
OCR + biométrie sur des documents réels — un défi autant technique qu'ergonomique.
✅ Points forts
- •Pipeline OCR complet avec prétraitement OpenCV avancé
- •Moteur regex fallback robuste aux erreurs de lecture
- •Recherche floue SQLite pour absorber les fautes OCR
- •Interface KivyMD adaptée kiosque et tablette tactile
- •4 cas de contrôle d'accès couverts et tracés
- •Vérification biométrique CNI vs visage en temps réel
⚠️ Améliorations identifiées
- •Ajouter la lecture MRZ (Machine Readable Zone) pour fiabilité max
- •Chiffrement de la base pour les données personnelles (RGPD)
- •Mode audit trail complet des accès pour conformité
- •Affinage Tesseract par fine-tuning sur des CNI réelles
- •Intégration avec Security pour un flux agent unifié
- •Support Android natif via compilation Buildozer