002 : Résolveur OCR de Sudoku

"Exploiter l'OCR et les réseaux neuronaux pour résoudre des puzzles Sudoku à partir d'images."

ROGER Robin

Vidéo de Présentation

\0/

À propos du Projet

Résumé :

Le Résolveur OCR de Sudoku est un outil capable de résoudre tout puzzle Sudoku en reconnaissant et traitant une image de la grille. Ce projet m'a permis d'explorer les réseaux neuronaux et de m'initier aux techniques de traitement d'image, y compris l'algorithme de transformée de Hough.

Objectif :

Le but principal du projet était de développer un système qui reconnaît et résout des puzzles Sudoku à partir d'images.

Voici les instructions du projet :

Fonctionnalités

 Fonctionnalités Principales :

  • OCR pour la détection de grilles Sudoku.
  • Reconnaissance de chiffres basée sur des réseaux neuronaux.
  • Algorithme efficace de résolution de Sudoku.
  • Système interactif d'affichage des résultats et de correction.

Flux de Travail

 Étapes du Processus :

  • Prétraitement d'Image : Conversion en niveaux de gris, suppression du bruit et correction de rotation.
  • Détection de Grille : Identification et extraction de la grille Sudoku à partir de l'image.
  • Reconnaissance de Chiffres : Classification des chiffres de la grille à l'aide de réseaux neuronaux.
  • Résolution de Sudoku : Algorithme pour compléter la grille.
  • Affichage des Résultats : Superposition de la solution sur l'image d'origine.

Prétraitement d'Image

Le prétraitement de l'image est une étape cruciale dans le pipeline de résolution de Sudoku. Son objectif est d'optimiser la qualité de l'image d'entrée en traitant des problèmes comme le bruit, la dominance des couleurs et la rotation pour garantir la précision des étapes suivantes.

1. Amélioration du Contraste et Conversion en Niveaux de Gris

Améliorer le contraste en identifiant les couleurs dominantes et en les convertissant en blanc, suivi de la transformation en niveaux de gris. Cette étape améliore la visibilité des détails et prépare l'image pour un traitement ultérieur.

Image Originale Image Prétraitée

Figure 1 : Avant et Après Prétraitement

2. Algorithmes de Conversion en Niveaux de Gris

Algorithmes Considérés :

  • Moyenne Pondérée (Luminance) : Ajuste la sensibilité de l'œil humain avec la formule :
    Gray = 0.22 * R + 0.65 * G + 0.11 * B
  • Formule Choisie (Simplifiée) : Pour une efficacité computationnelle :
    Gray = 0.299 * R + 0.587 * G + 0.114 * B
  • HSL (Teinte-Saturation-Luminance) : Extrait la luminance pour une meilleure cohérence.
Image Originale Image en Niveaux de Gris

Figure 2 : Conversion en Niveaux de Gris

3. Binarisation Adaptive

Convertit l'image en noir et blanc en analysant l'intensité des niveaux de gris et en calculant dynamiquement les seuils en fonction de la distribution des pixels. Les seuils adaptatifs assurent la robustesse contre les conditions d'éclairage variables.

Image Originale Image Noir et Blanc

Figure 3 : Binarisation Adaptive

4. Correction de Rotation

Détecte et corrige les grilles inclinées pour un alignement précis :

  • Rotation Manuelle : Utilise des transformations affines pour aligner la grille avec les bords de l'image.
  • Rotation Automatique : Applique la détection des bords (filtre de Canny) et la transformée de Hough pour déterminer l'angle dominant pour un alignement automatique.
Image Non Rotée Image Rotée

Figure 4 : Correction de Rotation

Détection de Grille

Vue d’Ensemble :

La détection de grille implique l'identification et l'extraction de la grille Sudoku à partir d'une image en utilisant la détection de bords, des histogrammes et des techniques de segmentation. Cela garantit une localisation précise de la grille pour les traitements ultérieurs.

 Étapes Clés :

  • Détection de Bords : - Utilisé le filtre de Roberts pour une détection des bords basée sur le gradient, mettant en évidence les gradients horizontaux et verticaux pour identifier les contours de l'image.
  • Exemple de Gradient Gradients Horizontaux et Verticaux

    Figure 1 : Détection de Bords par Gradient

  • Combinaison des Gradients : Combiné les gradients horizontaux (Gh) et verticaux (Gv) pour calculer la force globale du gradient : G(x, y) = √(Gh(x, y)² + Gv(x, y)²). Le résultat a été seuillé pour créer une image binaire mettant en évidence les contours de la grille.
  • Gradient Seuillé Contours Mis en Évidence

    Figure 2 : Gradient Combiné et Détection des Contours

  • Localisation de la Grille par Histogramme : Utilisé des histogrammes pour compter les pixels noirs le long des lignes et colonnes, identifiant les bords supérieur, inférieur, gauche et droit de la grille.
  • Détection de Grille via Histogramme

    Figure 3 : Localisation de la Grille par Histogramme

  • Segmentation de la Grille : Redimensionné et normalisé la grille à 900 pixels pour garantir la cohérence. La grille a été divisée en 81 cellules individuelles, enregistrées comme fichiers PNG séparés.
  • Découpage de la Grille Cellules Grille Binaire

    Figure 4 : Grille Découpée et Cellules Individuelles

Reconnaissance de Chiffres

Vue d’Ensemble :

Les réseaux neuronaux sont une composante essentielle de ce projet, permettant une reconnaissance précise des chiffres Sudoku. Sans un réseau neuronal correctement configuré, le système échouerait à reconnaître correctement les chiffres de la grille, empêchant la résolution du puzzle.

 Étapes Clés :

  • Implémentation du Réseau Neuronal : Le projet a tiré parti des structures préexistantes en C pour les matrices et les réseaux neuronaux, y compris des opérations comme la multiplication, l'addition et la transposition de matrices. Cela a fourni une base solide pour l'implémentation des algorithmes de propagation avant et rétropropagation.
  • Structures de Matrices et Réseaux Neuronaux

    Figure 1 : Structures de Matrices et Réseaux Neuronaux

  • Entraînement pour le Problème XOR : L'architecture du réseau XOR se composait de 2 neurones d'entrée, 2 neurones dans la couche cachée et 1 neurone de sortie. Cela a aidé l'équipe à comprendre les bases des taux d'apprentissage, de la rétropropagation et du réglage des hyperparamètres.
  • Architecture du Réseau Neuronal XOR

    Figure 2 : Architecture du Réseau Neuronal XOR

  • Réseau Neuronal pour la Reconnaissance de Chiffres : Le réseau neuronal final a été entraîné pour reconnaître les chiffres (0–9) à l'aide d'un ensemble de données de Kaggle, composé de 6 000 images étiquetées. Chaque image a été prétraitée et convertie en un objet structuré en C pour l'entraînement.
  • Exemple de Format de Données Structure d'Image en C

    Figure 3 : Format des Données et Structure d'Image

  • Performance et Résultats : - Architecture finale : 784 neurones d'entrée, 1 couche cachée avec 200 neurones, et 10 neurones de sortie (un pour chaque chiffre).
    - Taux d'apprentissage : 0,08.
    - Fonctions d'activation : Leaky ReLU et dérivée de ReLU.
    Atteint une précision de 96 % sur l'ensemble d'entraînement et un succès à 100 % sur les images de test Sudoku.
  • Résultats de Reconnaissance de Sudoku

    Figure 4 : Résultats de Reconnaissance sur les Images de Test Sudoku

Affichage des Résultats

Vue d’Ensemble :

L'affichage des résultats intègre le traitement d'image, la reconnaissance de chiffres basée sur un réseau neuronal, et l'interaction utilisateur pour superposer la solution à l'image Sudoku d'origine. Cette approche robuste garantit la transparence et le contrôle de l'utilisateur tout au long du processus de résolution.

 Étapes Clés :

  • Aperçu de l'Interface : L'interface utilisateur commence par une page d'accueil présentant le projet, suivie d'options pour explorer diverses sections telles que Images, Détails des Tâches et Téléchargement.
  • Page d'Accueil Page de Téléchargement

    Figure 1 : Pages d'Accueil et de Téléchargement

  • Interaction avec l'Application : - Les utilisateurs peuvent choisir entre les modes "Résoudre" et "Étape par Étape".
    - En "Étape par Étape", les utilisateurs voient chaque étape du processus de résolution.
    - Le mode "Résoudre" offre une fonctionnalité de résolution directe.
  • Options dans l'Application Vue Étape par Étape

    Figure 2 : Options d'Application et Vue Étape par Étape

  • Sélection et Prétraitement des Images : Les utilisateurs sélectionnent une image Sudoku via un explorateur de fichiers. L'application traite l'image, détecte les contours, segmente les cellules et convertit les chiffres en données exploitables.
  • Explorateur de Fichiers

    Figure 3 : Explorateur de Fichiers pour la Sélection d'Image

  • Reconnaissance des Chiffres et Validation Utilisateur : L'image traitée est envoyée au réseau neuronal pour la reconnaissance des chiffres. Les résultats sont affichés avec des niveaux de confiance :
    - Les chiffres avec une grande confiance apparaissent en vert.
    - Les chiffres avec une faible confiance apparaissent en rouge, permettant une correction manuelle par l'utilisateur.
  • Reconnaissance et Correction

    Figure 4 : Reconnaissance des Chiffres et Correction

  • Solution Finale : Une fois toutes les corrections effectuées, l'application superpose la solution résolue sur l'image Sudoku d'origine, garantissant un résultat précis et esthétiquement agréable.
  • Sudoku Résolu Final

    Figure 5 : Sudoku Résolu Final

Technologies Clés

Outils et Technologies Utilisés :

  • Langage de programmation : C
  • Bibliothèques : SDL
  • Techniques : Reconnaissance Optique de Caractères (OCR), Réseaux de Neurones Convolutifs (CNN), Algorithmes de résolution de Sudoku

Innovation Majeure :

Une approche unique dans ce projet a été l'utilisation de la Transformation de Hough pour la détection de la grille, permettant une extraction précise de la grille Sudoku à partir des images. De plus, la mise en œuvre d'un réseau de neurones en C a nécessité l'utilisation de structures de données efficaces et l'optimisation des opérations matricielles pour des performances élevées.

Contributions de l'Équipe

Membres de l'équipe :

  • TRAHANT Thomas : Interface utilisateur et logique applicative
  • BALVAY Evarist : Implémentation du réseau de neurones
  • MERCIER Eliott : Pipeline de prétraitement
  • LEMEILLEUR Yako : Optimisation du réseau de neurones
  • ROGER Robin : Détection de la grille à l'aide de la Transformation de Hough

Mon Rôle :

Ma principale contribution a été le développement du module de détection de la grille. En utilisant l'algorithme de Transformation de Hough, j'ai assuré une identification et une extraction précises de la grille Sudoku, élément crucial pour les étapes suivantes du projet.

Rapport de Projet

Télécharger le Projet

Vous pouvez télécharger l'exécutable de ce projet en cliquant sur le bouton ci-dessous :

Télécharger le Projet