Semestre 3 ~8 semaines

OCR Sudoku Solver

Un projet d'équipe de quatre visant à résoudre automatiquement une grille de sudoku photographiée : détection de la grille, segmentation des cases, reconnaissance des chiffres par un réseau de neurones fait maison, puis résolution.

C GTK+3 SDL2 Réseau de neurones Vision par ordinateur

Le projet en quelques mots

Projet réalisé en équipe de quatre étudiants sur environ huit semaines (octobre-décembre 2023). Le travail a été réparti par module : détection et découpage de la grille, réseau de neurones, solveur, et interface graphique GTK+3, chacun pris en charge par un membre différent de l'équipe.

Architecture Technique

01

Chargement de l'image

Lecture et conversion de la photo prise en entrée.

02

Détection de la grille

Transformée de Hough pour repérer les lignes et colonnes principales.

03

Segmentation en 81 cases

Découpage de la grille détectée en 81 sous-images, une par case.

04

Reconnaissance (réseau de neurones)

Perceptron multicouche fait maison, entraîné sur MNIST.

05

Résolution & affichage

Solveur par backtracking, résultat affiché dans l'interface GTK+3.

Ma contribution

Les étapes 01 à 03 (chargement, détection et segmentation de la grille) sont mon travail au sein de l'équipe. Les étapes 04 et 05 ont été développées par d'autres membres - détaillé ci-dessous.

Implémentation d'équipe

Segmentation de la grille

Détection des lignes et colonnes par transformée de Hough, avec un regroupement (clustering) des lignes détectées pour isoler les traits principaux et gérer les légères rotations de la photo, puis découpage en 81 sous-images transmises au réseau de neurones.

Réseau de neurones

Développé par un autre membre de l'équipe : perceptron multicouche fait maison avec rétropropagation, 784 entrées (28×28), une couche cachée de 128 neurones (sigmoïde) et 10 sorties, entraîné sur MNIST (60 000 images). Trois réseaux entraînés sont sauvegardés selon le type de grille.

Solveur

Développé par un autre membre de l'équipe : backtracking récursif simple, sans heuristique avancée (pas de MRV ni de constraint propagation).

Interface GTK+3

Développée par un autre membre de l'équipe : import, export, traitement et rotation de l'image, avec SDL2/SDL2_image pour la manipulation d'images.

Limites documentées

Ce qui n'est pas prouvé

Aucune mesure de précision de reconnaissance sur un jeu de test indépendant n'est documentée. L'entraînement s'arrête lorsqu'un seuil est atteint sur les données d'entraînement elles-mêmes (85 % imprimé, 99 % manuscrit), pas sur des données de validation séparées. Le réseau ne comporte pas de softmax en sortie.

Le solveur contient par ailleurs un bug non corrigé dans le dépôt : une incohérence entre la signature et l'appel de solve_grid() empêche sa compilation en l'état.

Apprentissages Clés

Ce projet m'a confronté à l'intégration de modules développés séparément par quatre personnes autour d'un format d'échange commun (image de la grille, tableau de 81 cases). La détection de grille par transformée de Hough m'a permis d'appliquer concrètement des notions de vision par ordinateur vues en cours.

Synthèse du projet

Travail réalisé

Pipeline assemblé de bout en bout par l'équipe : détection de grille et segmentation, réseau de neurones entraîné sur MNIST, solveur par backtracking, interface GTK+3 avec import/export.

Ce que le projet m'a apporté

Une application concrète de la transformée de Hough, et une expérience de travail en équipe sur un projet C modulaire où chaque membre dépend du travail des autres.