the recognition crew Bitar Hero Rapport de soutenance Final - Projet OCR Ludovic ALLARD Pierre PERETTI Benoit DE GELAS 1 the recognition crew Bitar Hero Table des matières 1 Introduction 1.1 Un peu d’histoire . . . . . . . . . . . . . . . . . . 1.2 Le principe . . . . . . . . . . . . . . . . . . . . . . 1.3 Répartition des taches : . . . . . . . . . . . . . . . 3 3 5 7 2 L’equipe 2.1 Benoit . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Pierre . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Ludovic . . . . . . . . . . . . . . . . . . . . . . . 8 8 9 9 3 Pré-traitement de l’image 3.1 Binarisation . . . . . . . 3.1.1 Niveau de gris . . 3.1.2 Calcule du seuil . 3.2 Noir&Blanc . . . . . . . 3.3 Filtres . . . . . . . . . . . . . . . 10 10 10 10 10 11 4 Rotation 4.1 Detection d’angle . . . . . . . . . . . . . . . . . . 12 12 5 Segmentation 5.1 Detection de bloc . . . . . . . . . . . . . . . . . . 5.2 Detection de ligne . . . . . . . . . . . . . . . . . 5.3 Detection de caractère . . . . . . . . . . . . . . . . 14 14 14 14 6 Réseau de neurone 6.1 Fonctionnement : . . . . . . . . . . . . . . . . . . 6.2 Pourquoi l’utilisons nous ? . . . . . . . . . . . . . . 15 15 17 7 Site Web 19 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . the recognition crew Bitar Hero 8 Notre programme : 8.1 Installation : . . . . . . . . . . . . . . . . . . . . . 8.2 Commandes : . . . . . . . . . . . . . . . . . . . . 20 20 20 9 Retour d’experience 9.1 Benoit . . . . . . . . . . . . . . . . . . . . . . . . 21 21 10 Conclusion 22 3 the recognition crew 1 1.1 Bitar Hero Introduction Un peu d’histoire La première machine de ROC fut créée par Gustav Tauschek, un ingénieur allemand, en 1929. Elle contenait un détecteur photosensible qui pointait une lumière sur un mot lorsqu’il correspondait à un gabarit contenu dans sa mémoire. En 1950, Frank Rowlett, qui avait cassé le code diplomatique japonais PURPLE, demanda à David Shepard, un cryptanalyste de l’AFSA (prédécesseur de la NSA américaine), de travailler avec Louis Tordella pour faire à l’agence des propositions de procédures d’automatisation des données. La question incluait le problème de la conversion de messages imprimés en langage machine pour le traitement informatique. Shepard décida qu’il devait être possible de construire une machine pour le faire, et, avec l’aide de Harvey Cook, un ami, construisit « Gismo » dans son grenier pendant ses soirées et ses week-ends. Le fait fut rapporté dans le Washington Daily News du 27 avril 1951 et dans le New York Times du 26 décembre 1953 après le dépôt du brevet numéro 2 663 758. Shepard fonda alors Intelligent Machines Research Corporation (IMR), qui livra les premiers systèmes de ROC au monde exploités par des sociétés privées. Le premier système privé fut installé au Reader’s Digest en 1955, et, de nombreuses années plus tard, fut offert par le Readers Digest au Smithsonian, où il fut mis en exposition. 4 the recognition crew Bitar Hero Les autres systèmes vendus par IMR à la fin des années 1950 comprenaient un lecteur de bordereau de facturation à l’Ohio Bell Telephone Company et un numériseur (scanner de documents) à l’US Air Force pour la lecture et la transmission par telexessages dactylographiés. IBM et d’autres utilisèrent plus tard les brevets de Shepard. 5 the recognition crew 1.2 Bitar Hero Le principe Un système ROC part de l’image numérique réalisée par un scanner optique d’une page (document imprimé, feuillet dactylographié, etc.), ou une caméra numérique, et produit en sortie un fichier texte en divers formats (texte simple, formats de traitements de texte, XML...). Certains logiciels tentent de conserver l’enrichissement du texte (corps, graisse et police) ainsi que la mise en page, voire de rebâtir les tableaux et d’extraire les images. Certains logiciels comportent, en outre, une interface pour l’acquisition numérique de l’image. Jusqu’à une date récente, le fonctionnement des systèmes ROC performants était peu connu car protégé par le secret industriel ; les logiciels open-source disponibles (ex : GOcr) étant plutôt l’œuvre d’amateurs. La publication en open-source de systèmes performants a quelque peu changé cette situation. Les étapes de traitement peuvent être schématisées ainsi : – 1. Pré-analyse de l’image : le but est d’améliorer éventuellement la qualité de l’image. Ceci peut inclure le redressement d’images inclinées ou déformées, des corrections de contraste, le passage en mode bicolore (noir et blanc, ou plutôt papier et encre), la détection de contours. – 2. Segmentation en lignes et en caractères (ou Analyse de page) : vise à isoler dans l’image les lignes de texte et les caractères à l’intérieur des lignes. Cette phase peut aussi détecter le texte souligné, les cadres, les images. 6 the recognition crew Bitar Hero – 3. Reconnaissance proprement dite des caractères : après normalisation (échelle, inclinaison), une instance à reconnaitre est comparée à une bibliothèque de formes connues, et on retient pour l’étape suivante la forme la plus « proche » (ou les N formes les plus proches), selon une distance ou une vraisemblance . – 4. Post-traitement utilisant des méthodes linguistiques et contextuelles pour réduire le nombre d’erreurs de reconnaissance : systèmes à base de règles, ou méthodes statistiques basées sur des dictionnaires de mots, de syllabes, de N-grammes (séquences de caractères ou de mots). Dans les systèmes industriels, des techniques spécialisées pour certaines zones de texte (noms, adresses postales) peuvent utiliser des bases de données pour éliminer les solutions incorrectes. – 5. Génération du format de sortie, avec la mise en page pour les meilleurs systèmes Il faut aussi savoir que dans les OCR peu développer, il est important d’avoir un apprentissage, tâche assumer par le réseaux de neurone 7 the recognition crew 1.3 Bitar Hero Répartition des taches : Le projet est parfais pour quatre personnes, car il se divise parfaitement en quatre partie : – Pré-traitement – Segmentation – Réseaux de neurones – Interface Graphique Le site a été réaliser par Benoît. Mais comme rien n’est parfais ni facile... On est trois... Nous avons décidé de découper en 2 chaque partie afin d’avoir une personne gérant la partie et une autre pour l’assister. 8 the recognition crew 2 Bitar Hero L’equipe Le groupe : Comme cela a été dis plus haut, nous sommes un groupe différent des autres... En effet le normalement, ni plus, ni moins de quatre personnes de Krisboul n’a pas été respecté pour nous ! Pour arranger le tout, nos bon vieux racks nous font faux bon cette année, même si la partie physique du rack n’est pas en cause, la partie logiciel nous a laissé perplexe... A chaque allumage/extinction de nos bécane, nous craignons de flinguer le system d’exploitation... Dommage... Pour parvenir a nos fins, une seule solution : Pré-traitement Segmentation Réseau de neurone Interface graphique Site Web 2.1 Pierre Ludovic Benoit x x x x x Benoit Salut moi c’est Benoit alias Yuki, j’ai 21 ans et je compte faire carrière soit dans le domaine du jeu video soit dans le Chiffre. J’ai une passion assez prononcé pour le jeu en général, et en particulier quand il est intéresser. Cela peut allez du poker au course en ligne bien que je joue très peu d’argent. J’ai pour habitude de lire beaucoup sur les sujets qui m’intéresse, en particulier des 9 the recognition crew Bitar Hero guides sur les jeux qu’ils m’arrivent de pratiquer. J’aime beaucoup aussi la psychologie, que je trouve être un domaine trop peu étudier à l’heure actuelle par les sciences en France. J’ai aussi ( et bien évidemment, sinon je ne serais pas ici) une passion pour la technologie, sur toutes ses formes. 2.2 Pierre Je me présente, Pierre Peretti ou le Corse fou pour certain, pourtant je suis aussi Breton... Je suis passionné d’informatique, de mécanique et de musique depuis ma tendre enfance. J’ai grandi avec Adibou, Zelda et Mario Kart. Je suis fils unique, j’ai pas pu taper de petit frère, mais c’est cool j’ai plus de cadeaux ! J’ai décider d’entré a Epita lorsque j’étais en 4 ème, et je ne suis pas déçus... Quoi que... Les dumps de cette n’ont pas été un très bon millésimes... Je fais parti d’un groupe de musique en tant que guitariste, je fais des solos qui déchire (ou pas) ! J’ai encore une copine, heureusement qu’elle ne lit pas le "encore" sinon je suis mort ! Je m’occupe principalement de la partie réseaux de neurone et rotation de l’image. 2.3 Ludovic Forcé par ses parents à travailler dans un camps chinois, j’ai connu le milieu informatique par un jeune collaborateur. J’ai réparé des ordinateurs jusqu’à l’âge de 10 ans. Ensuite mes parents ont décidé de m’envoyer à l’étrangé afin de fructifier mes grandes connaissances dans le milieu en m’envoyant en France à l’Epita. Plus sérieusement je suis un gars normal de 20 ans qui aime l’innovation et les crêpes. Ce projet ma permis d’apprendre beaucoup de mes erreurs (et il y en a beaucoup) 10 the recognition crew 3 3.1 3.1.1 Bitar Hero Pré-traitement de l’image Binarisation Niveau de gris Dans un premier temps on applique une niveau de gris sur l’image, ceci est préférable pour un passage en noir et blanc ultérieure. Pour calculer le niveau de gris on calcul la luminescence de chaque pixel à partir de ses valeurs RGB. On donne ensuite la même valeur calculer à RGB. On applique ceci a tout les pixel de l’image pour obtenir une image en niveau de gris 3.1.2 Calcule du seuil Le seuil vas nous permettre de savoir à partir de quel valeur le pixel de vient noir ou blanc lors de la binarisation. Dans un premier temps on calcule la moyenne de luminescences de l’ensemble de pixel de l’image, on obtient ainsi un seuil global. Avec ce calcul on évite ainsi d’avoir une image totalement noir après avoir appliqué la binarisation si l’image d’origine est sombre. 3.2 Noir&Blanc La Binarisation permet de faire ressortir le texte qui généralement en noir, dans une page généralement blanche. En binarisation on accentue la différence entre le fond et le texte La binarisation consiste à différencier les pixel que l’on vas mettre en noir ou en blanc. Pour cela ô comparé la luminescence des pixel avec la valeur du seuil calculé avant 11 the recognition crew 3.3 Bitar Hero Filtres Pour éliminer une partie du bruit nous utilisons un filtre passe bas qui vas appliqué la moyenne des pixel voisin au pixel traité. Celui-ci a pour inconvénient de crée un léger flou et donc d’adoucir les bords des caractères. Filtre passe-bas 12 the recognition crew 4 Bitar Hero Rotation Lorsque nous voulons étudier une image, certaine d’entre elle ne sont pas droite, et nécessite donc d’être redresser. Sinon il devient quasiment impossible d’analyser les caractères et donc d’arriver a notre but. Pour cela nous avons fais appel au matrice de rotation : cos(teta) −sin(teta) sin(teta) cos(teta) Grâce aux propriétés des matrices, voila le produit entre la matrice et la précédente : x y X et Y sont les nouvelles coordonné du point (x,y) par la rotation de centre (0,0) d’angle téta. X = x ∗ cos(teta) − y ∗ sin(teta) Y = x ∗ sin(teta) + y ∗ cos(teta) C’est bien beaux tout ça, on peut faire une rotation, mais on ne connait pas l’angle... 4.1 Detection d’angle La detection d’angle lors du prétraitement est une étape primordiale au bon fonctionnement de notre OCR. En effect le découpage de charactère ne peut être bien effectuée si l’image est inclinée, nous avons donc chercher a resoudre le problème de la detection d’angle. La transformé de Hough nous a parru comme étant la plus apte a resoudre ce problème qui au premiers abord 13 the recognition crew Bitar Hero peut paraitre insurmontable et d’une grange complexité algorithmique. Mais il n’en ai rien... Cette technique est relativement rapide a metre en place et d’une grande éfficacitée. Histoire : Pour commencer un petit peu d’histoire. La transformée de Hough est une technique de reconnaissance de forme théorisée par Paul Hough en 1962. Cette technique est utilisée dans le traitement d’images numériques pour détecter les lignes présentes dans une image. Il existe une version appelée transformée de Hough généralisée qui peut quand à elle reconnaitre n’importe quelle forme. C’est a ce moment la qu’intervient la recherche de l’angle. Nous avons pour cela utilisé l’algorithme de Hough. Cette algorithme nous permet de trouvé un motif qui a été "élué" comme étant le plus adapté. Pour cela nous construisons une matrice ayant comme première taille, la taille de la diagonal de l’image (car c’est la plus grande taille que l’image peut avoir, et comme deuxième taille 181 car nous cherchons un angle entre 0 et 180 degré. Pour chaque pixel nous calculons l’angle le plus adapté, puis nous incrémentons le compteur dans la matrice ayant pour coordonnée l’angle, puis nous renvoyons l’angle ayant le compteur le plus grand. L’algorithme est gourmand, mais est très performant. 14 the recognition crew 5 Bitar Hero Segmentation Le but de la segmentation est de detecté l’ensemble des carracté sur la page, pour ceci on decompose le travil en plusieur etapes. Dans un premier temps on doit extraire les blocs de texte presents sur la page, pour cela un doit utilisé un algorithme XY-cut. dans un second temps en detecte les ligne dans les bloc de texte pour enfin isolé chaque charactere afin de les envoyer au reseau de neuronne pour les identifier 5.1 Detection de bloc La detectionde bloc necessite l’algorithme XY-Cut,malheuresement ,je n’ai pu intégré cette algorithm croyant gagné du temps en faisant directement la detection de ligne. 5.2 Detection de ligne Dans un premier temps on parcours les lignes de pixel une par une, si on rencontre une ligne avec plus d’un certain seuil de pixel noir on la considére come ayant du texte, on enregistre donc la coordoné j de la ligne dans une file. A partir de ce moment on cherche la prochaine ligne sans texte, une fois detecté elle est aussi enregistrée. En parcourant l’ensemble du bloc on a ainsi les coordonée(premiere et derniere ligne de pixel) de chaque ligne de texte. Cependant la detection n’est pas fonctionel, en effet j’ai recontré beaucoup de probleme, et 5.3 Detection de caractère La detection des caractère s’aparant a la detection des lignes. Les meme systeme est utilisé sur l’axe i(horizontal). 15 the recognition crew Bitar Hero Figure 1 – Réseau de neurone 6 6.1 Réseau de neurone Fonctionnement : Le réseaux neurone est construits sur le fonctionnement des neurones qui constitues notre cerveau. Deux neurologues Warren McCulloch et Walter Pitts publièrent dès la fin des années 1950 des travaux sur les réseaux de neurones. Il travaillèrent ensuite sur un modèle simplifié de neurone biologique aujourd’hui appelé : neurone formel. Ils montrèrent que des réseaux de neurones formels simples peuvent théoriquement réaliser des fonctions logiques, arithmetique et resoudre des problèmes sur de l’imagerie par exemple. Le neurone formel est en réalité connu de nous, étudiant de spé a l’Epita, il est conçu comme un automate doté d’une fonction, appelée fonction de transfert qui transforme ses valeurs prise en entrées en sortie selon des règles précises. Dans notre cas, le neurone fait la somme de ses entrées, passe cette somme a la fonction trasfert et compare la somme obtenue à une valeur seuil. 16 the recognition crew Bitar Hero Le neuronne répondra par une valeur égale a 1 si cette somme est supérieure ou égale à ce seuil et par 0 si elle est inferieur (modèle ultra-simplifié du fonctionnement d’un neurone biologique). Ces neurones sont par ailleurs associés en réseaux dont la topologie des connexions est variable : réseaux proactifs, récurrents, etc. Enfin, l’efficacité de la transmission des signaux d’un neurone à l’autre peut varier : on parle de «poids synaptique», et ces poids peuvent être modulés par des règles d’apprentissage (ce qui mime la plasticité synaptique des réseaux biologiques). 17 the recognition crew Bitar Hero Figure 2 – Schéma de neurone 6.2 Pourquoi l’utilisons nous ? Reconnaitre un caractère écrit pour nous, n’est pas difficile (ou pas...) car nous avons, depuis notre enfance, appris a les identifiées. Mais comment faire pour qu’un caractère "humain" soit reconnue par une machine qui ne sais théoriquement que identifier que des niveaux de tension représentant des bits ? Et bien nous pouvons simuler l’interaction entre des neurones, même si ce ne sera pas aussi "puissant" en terme de calcul qu’un cerveau, cela nous suffira amplement ! Un neurone se base sur le principe des porte logique, dans notre cas nous utiliserons un perception multicouche, qui lui utilise la "porte ou". Le principe repose sur l’interconnections des différent neurone, et d’attribuer un poids a chacune des connections de chaque neurone, c’est a dire que la réponse d’un neurone précédant sera plus ou moins importante que celle d’un autre. L’ensemble du réseau est construit sous forme de couches, possédant chacune un certain nombre de neurone qui, comme dis plus haut, sont chacun relier a tout les autres neurones de la couche supérieur. 18 the recognition crew Bitar Hero Un neurone est composé d’une fonction transfère, de n+1 valeur (n le nombre de neurone de la couche précédente) les n valeur corresponde aux poids des connections de chacun des neurones. La dernière valeur (w0), correspond a la valeur d’activation, c’est cette valeur qui déterminera si un neurone est activé ou non, a laide de la fonction de transfère. Voici la formule en fonction des sorties des n neurones précédent (Sn), ainsi que du poids attribué a chacune des connections (Pn) qui nous permet d’obtenir un coefficient qui déterminera l’activation de ce neurone. n X A= P i ∗ Sn − w0 i=1 La formule juste au dessus représente l’activation du neurone. La sortie du neurone est définie pas f(A), ou f est la fonction d’activation du neurone. Plusieurs fonction d’activation peuvent être choisis : -Une fonction seuil qui, si A inférieur au seuil renvoi 0 et sinon revoit 1. - la fonction sigmoïde, définie sur R -> [-1,1] sera la fonction choisie. Elle est continue et facilement dérivable, ce qui est un avantage pour l’utilisation de l’algorithme de retro propagation des coefficients (algorithme d’ apprentissage ). 19 the recognition crew Bitar Hero Figure 3 – Image Sigmoid 7 Site Web La visibilité du projet est importante, c’est pourquoi nous avons décidé de créer un site internet pour le projet qui nous permettra d’avoir de la visibilité sur internet, importante a l’heure actuelle Nous avons décidé d’utiliser un site type wordpress pour le projet et ce pour plusieurs raisons. Tout d’abord pour le prix, l’hébergement du site est gratuit. Ensuite , le matériel donner par wordpress permet une édition simple et rapide du site pour la mise en place d’article consacrer à l’ocr. Nous avons choisit un style plutôt sobre et épuré pour ne pas surcharger la page et pour attirer l’utilisateur, pas de pub inutile ou quoique ce soit pouvant faire fuir les personnes potentiellement intéresser par un OCR Par contre, l’un des problèmes de Wordpress, c’est que les ser20 the recognition crew Bitar Hero veurs, et donc le site, n’est pas toujours disponible 8 Notre programme : 8.1 Installation : Afin de compiler les sources du programme et produire un fichier binaire exécutable, placez vous dans le répertoire ou les sources on été décompressée. Utilisez la commande make, pour compiler. Si vous désirez supprimer les fichier temporaire issu de la compilation, utiliser la commande make clean. 8.2 Commandes : -demo [arg] Démo permet d’exécuter tout le prétraitement sur une image prise en paramètre. Le prétraitement consiste à passe l’image en niveaux de gris, appliquer un filtre passe-bas, afin de supprimer le bruit que la numérisation produit sur l’image, son passage en noir et blanc. Et remettre l’image au cas où lors de la numérisation , l’image n’est pas parfaitement aligné. -learnabc [a] [b] [c] Learnabc prend en paramètre 3 images, une image représentant un A, un B et un C. Cette fonction soumet les images au réseaux de neurones successivement comme base apprentissage, la lette A aura pour résultats 1,0,0. B aura 0,1,0 et C 0,0,1. 21 the recognition crew 9 9.1 Bitar Hero Retour d’experience Benoit Ce que m’a apporter le projet : Au début de l’année, je ne savais pas ce qu’était un ocr, je n’en avais d’ailleurs jamais entendu parler, ou pas avec ce terme, maintenant je sais exactement ce que c’est et comment cela fonctionne. Je n’étais pas non plus au courant des possibilités apporté par Ocaml. Cela m’a aussi montrer un aperçu (très réduit) de ce qui va m’attendre en deuxième semestre et plus tard en ING1, a savoir une charge de travail de plus en plus importante (pour ne pas dire, qui va croître de manière exponentiel), et qui va falloir que je m’organise pour y répondre de manière beaucoup plus correcte. J’ai aussi su que je préfère la partie théorique à la partie pratique, et que je vais devoir travailler très largement ce dernier point. 22 the recognition crew 10 Bitar Hero Conclusion Ce projet fut une bonne experience, nous avons surmonté de nombreux probleme meme si il en reste beaucoup. Son orientation tres algorithmique etait tres interessante. Nous avons mal géré notre temps ce qui a eu des consequences negatives sur le rendu.Nous sommes somme deçu de ne pas avoir était jusqu’au bout du projet. Cela reste une bonne experience quand meme du fait de son sujet et de son language (OCaml) . 23