Skip to content

rosasbehoundja/postal_code_recognition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reconnaissance de codes postaux

Introduction

Le projet est une application de reconnaissance automatique de codes postaux à partir d'images. L'objectif principal est d'extraire les chiffres d'une image et de les classifier correctement pour reconstuire le code postal.

Le projet utilise des techniques de traitement d'images et de machine learning pour identifier les cavités dans les chiffres et les classifier à l'aide de deux méthodes : les k plus proches voisins (k-NN) et les moyennes de classe.

Fonctionnalité du projet

Extraction des chiffres

Le projet commence par extraire les chiffres individuels d'une image contenant un code postal. cette étape inclut :

  • le prétraitement de l'image (binarisation, suppression du bruit)
  • la localisation de chaque chiffre
  • l'isolation de chaque chiffre dans une image séparée

Extraction des caractéristiques

Pour chaque chiffre, le projet extrait un vecteur de caractéristiques qui décrit sa forme. les caractéristiques principales sont :

  • l'extraction des cavités (zones vides) dans les directions : nord, est, sud, ouest et centre
  • le calcul du ratio de chaque cavité par rapport à la surface totale du chiffre
  • optionnellement, l'ajout de propriétés géométriques : solidité, orientation et excentricité

Classification

le projet propose deux méthodes pour classifier les chiffres :

Méthode 1 : k plus proches voisins (k-NN)

cette méthode cherche les k chiffres d'entraînement les plus similaires au chiffre à tester et vote pour la classe la plus représentée parmi ces voisins.

Méthode 2 : moyennes de classe

cette méthode calcule la moyenne des vecteurs de caractéristiques pour chaque classe de chiffre. pour classifier un nouveau chiffre, on cherche la classe dont la moyenne est la plus proche.

Evaluation

le projet inclut un module d'évaluation qui teste les deux méthodes de classification sur un ensemble d'images de test. les résultats sont sauvegardés dans des fichiers csv avec les métriques de précision.

Structure du projet

postal_code_recognition/
├── src/                    # code source principal
│   ├── apprentissage.py    # extraction des caractéristiques et entraînement
│   ├── classification.py   # classification de nouvelles images
│   ├── extraction.py       # extraction des chiffres et des cavités
│   ├── evaluation.py       # évaluation des performances
│   ├── utils.py           # fonctions utilitaires
│   └── visualisation.py   # affichage des résultats
├── images/                 # images pour l'apprentissage et le test
│   ├── digits/            # 10 images de chiffres pour l'apprentissage
│   └── postal_code/       # images de codes postaux pour le test
├── weights/               # fichiers de poids sauvegardés
│   ├── features.npy       # vecteurs de caractéristiques
│   ├── labels.npy         # étiquettes correspondantes
│   └── means.npy          # moyennes de classe
└── metrics/               # fichiers d'évaluation
    └── evaluation_*.csv   # résultats des évaluations

Utilisation

Installation des dépendances

Le projet utilise uv pour gérer les dépendances. pour installer l'environnement :

uv sync

Les dépendances principales sont :

  • numpy : pour le calcul numérique
  • opencv-python : pour le traitement d'images
  • scikit-image : pour les opérations avancées sur les images
  • matplotlib : pour la visualisation

apprentissage

pour entraîner le modèle sur les images de chiffres :

uv run -m src.apprentissage

ce script va :

  1. charger toutes les images de chiffres dans images/digits/
  2. extraire les caractéristiques de chaque chiffre
  3. calculer les moyennes de classe
  4. sauvegarder les poids dans le dossier weights/

Classification

Pour classifier une image de code postal :

uv run -m src.classification

Ce script va :

  1. charger les poids précédemment entraînés
  2. extraire les chiffres de l'image
  3. classifier chaque chiffre
  4. afficher le résultat final

Evaluation

Pour évaluer les deux méthodes sur l'ensemble de test :

uv run -m src.evaluation

Ce script va :

  1. tester les deux méthodes (k-NN et moyennes) sur toutes les images de test
  2. calculer la précision pour chaque image
  3. sauvegarder les résultats dans des fichiers csv

Modules détaillés

extraction.py

Ce module gère :

  • le chargement et la binarisation des images
  • la localisation des composantes connexes
  • l'extraction des cavités en utilisant des éléments structurants directionnels
  • l'affichage des résultats d'extraction

apprentissage.py

Ce module contient :

  • get_feature_vector() : extraction du vecteur de caractéristiques d'un chiffre
  • process_image() : traitement complet d'une image pour extraire les vecteurs
  • training() : entraînement du modèle

classification.py

ce module implémente :

  • k_nearest_neighbors() : classification par k plus proches voisins
  • nearest_means() : classification par moyennes de classe
  • classify_image() : fonction principale de classification

utils.py

Ce module propose :

  • euclidean_distance() : calcul de la distance euclidienne entre deux vecteurs
  • save_features_labels() : sauvegarde des caractéristiques et labels
  • load_features_labels() : chargement des poids

visualisation.py

Ce module permet :

  • l'affichage des chiffres et de leurs cavités
  • la visualisation des résultats de classification

evaluation.py

Ce module évalue les performances avec :

  • une liste d'images de test avec leurs étiquettes
  • une fonction d'évaluation qui compare les prédictions avec les vraies étiquettes
  • la sauvegarde des résultats dans des fichiers csv

Améliorations possibles

  • augmenter le nombre d'images d'entraînement pour améliorer la robustesse
  • tester d'autres méthodes de classification (svm, réseaux de neurones)
  • optimiser les paramètres des algorithmes
  • améliorer le prétraitement des images pour gérer différentes qualités
  • implémenter une interface graphique pour l'utilisation

Notes importantes

Ce projet utilise une approche basée sur les cavités des chiffres. Cette approche fonctionne bien pour les codes postaux imprimés avec une bonne qualité, mais peut rencontrer des difficultés avec :

  • les chiffres manuscrits
  • les images de mauvaise qualité ou fortement bruitées
  • les chiffres avec des formes non standard

Auteur

Ce projet a été développé comme application pratique des techniques de reconnaissance de chiffres et de classification en machine learning.

  • Rosas BEHOUNDJA

About

Postal code recognition

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published