Chargement de l'image
Lecture et conversion de la photo prise en entrée.
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.
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.
Lecture et conversion de la photo prise en entrée.
Transformée de Hough pour repérer les lignes et colonnes principales.
Découpage de la grille détectée en 81 sous-images, une par case.
Perceptron multicouche fait maison, entraîné sur MNIST.
Solveur par backtracking, résultat affiché dans l'interface GTK+3.
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.
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.
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.
Développé par un autre membre de l'équipe : backtracking récursif simple, sans heuristique avancée (pas de MRV ni de constraint propagation).
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.
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.
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.
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.
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.