Accompagnement disponible dès maintenant
Portfolio/GoSecuri/CNI
DéveloppementMaster 2 · 2024✅ Fonctionnel🔗 Module 1 : GoSecuri Security →

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.

GoSecuri CNI — Scan de carte d'identité

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

Contexte du projet

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.

gosecuri-cni — flux complet

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

Fonctionnalités

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.

Stack technique

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

Focus technique

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)

1

OpenCV détecte les contours de la carte pour recadrer précisément la CNI, éliminant le fond parasite autour.

2

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.

3

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.

4

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.

Aperçu

L'interface en images

Application tactile KivyMD — du scan à la vérification biométrique

GoSecuri CNI — Résultat scan, nouveau visiteur
Analyse réussie — Nouveau visiteur détecté
GoSecuri CNI — Visiteur reconnu — accès autorisé
Visiteur reconnu — accès autorisé
GoSecuri CNI — Vérification biométrique — similarité 63.9%
Vérification biométrique — similarité 63.9%

Voir le code source

Ce projet vous intéresse ?

Bilan

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

Prêt à démarrer ?

Transformons ensemble votre vision digitale

Audit, conseil, développement - Votre projet mérite une expertise sur-mesure