53
Rapport de Projet Kevin Gast Malik Baba A¨ ıssa Elodie Ralambosoa Pierre-Lou Dominjon 1

Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Kevin GastMalik Baba Aıssa

Elodie RalambosoaPierre-Lou Dominjon

1

Page 2: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Table des matieres

Introduction 4

1 Team LinkFly 51.1 Malik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 Pierre-Lou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3 Kevin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4 Elodie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Rappels de planning 72.1 Soutenance 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 Soutenance 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Soutenance Finale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Representation des donnees dans PicToChar 83.1 L’image lors du pretraitement . . . . . . . . . . . . . . . . . . . . . 83.2 Les images intermediaires . . . . . . . . . . . . . . . . . . . . . . . 83.3 Les caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.4 Superstructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.5 Resultat HTML, simple texte et autres . . . . . . . . . . . . . . . . 10

4 Pre-traitement de l’image 114.1 Chargement de l’image . . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Binarisation de l’image . . . . . . . . . . . . . . . . . . . . . . . . . 11

4.2.1 Passage en niveau de gris. . . . . . . . . . . . . . . . . . . . 114.2.2 passage en noir et blanc. . . . . . . . . . . . . . . . . . . . . 12

4.3 Les filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.3.1 Qu’est ce qu’un filtre ? . . . . . . . . . . . . . . . . . . . . . 134.3.2 Qu’est ce qu’une convolution ? . . . . . . . . . . . . . . . . 134.3.3 Le gommage . . . . . . . . . . . . . . . . . . . . . . . . . . . 144.3.4 Le contraste . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.4 Squelettisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.5 Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.5.1 Detection de l’angle . . . . . . . . . . . . . . . . . . . . . . 194.5.2 La rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5 Communication C/Caml 215.1 Module bigarray . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.2 Du C dans Caml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Team LinkFly 2

Page 3: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

6 Detection et decoupage 226.1 Blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226.2 Lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246.3 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

7 Exportation et Resultats 267.1 Rendu HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267.2 Rendu texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277.3 Rendu tex et PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

8 Interface graphique 298.1 Le principe de notre interface . . . . . . . . . . . . . . . . . . . . . 298.2 Gtk+-2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298.3 Le zoom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318.4 Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 318.5 L’affichage des etapes . . . . . . . . . . . . . . . . . . . . . . . . . . 328.6 La gestion des fichiers texte et les onglets . . . . . . . . . . . . . . 32

9 Reseau neuronal 339.1 Qu’est-ce qu’un reseau de neurones ? . . . . . . . . . . . . . . . . . 339.2 Reseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349.3 L’apprentissage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359.4 Differentes Approches . . . . . . . . . . . . . . . . . . . . . . . . . 379.5 Reconnaissance d’un caractere . . . . . . . . . . . . . . . . . . . . 379.6 Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

9.6.1 Neurones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389.6.2 Couches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399.6.3 reseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

9.7 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

10 Site Web, Bonus et Packaging 4110.1 Charte graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

10.1.1 Logo du projet . . . . . . . . . . . . . . . . . . . . . . . . . 4210.1.2 Logo de la team . . . . . . . . . . . . . . . . . . . . . . . . . 42

10.2 Modele HTML et CSS, PHP . . . . . . . . . . . . . . . . . . . . . . 4310.3 O.C.R. . . En ligne ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4310.4 Le jaquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Conclusion 47

Annexes 48

Team LinkFly 3

Page 4: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Introduction

PicToChar, de l’image aux caracteres, l’O.C.R !

Le projet « PicToChar »que nous avons choisi et que nous allons presenter estun OCR (Optical Character Recognition), ou ROC (Reconnaissance Optique deCaracteres). La creation d’un OCR etait a nos yeux le projet le plus interessant,qui abordait des domaines dans lesquels nous desirions approfondir nos connais-sances.

Qu’est ce qu’un OCR ?

Un OCR est un logiciel qui a pour but de traduire une image de texte scanneeen un fichier de texte. Autrement dit, le texte doit pouvoir etre utilisable, ce quin’est pas le cas sur un fichier image.

La conception d’un tel logiciel se decoupe en plusieurs etapes :

il y a tout d’abord le pre-traitement d’image, qui consiste a obtenir uneimage « parfaite »apres l’avoir scannee. Puis, il faut ensuite extraire les ligneset les caracteres et reperer la mise en forme du document, avant de definir lescaracteristiques de chaque symbole a detecter. Et enfin, comme pour tout bonlogiciel, le developpement d’une interface graphique.

Team LinkFly 4

Page 5: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

1 Team LinkFly

1.1 Malik

Il n’a que faire de cette presentation qu’il pensecompletement inutile. Mais son chef de projet in-siste... D’apres lui, s’il avait copie n’importe queltexte provenant du Net, tout le monde n’y auraitvu que du feu. Neanmoins, ne voulant pas tropen reveler, il crie a l’attentat et s’insurge contreles chinois du FBI. Pretendant a l’OCR parfait, ila cette fois pondu l’interface ultime et pense a unnouveau concept pour ce projet, comprendrel’ecriture de Krisboul et corriger les fautes d’ortho-graphe de Mister Burelle.

1.2 Pierre-Lou

Pierre-Lou, alias pilou, j’ai 19 ans, expatrie dela Bresse profonde depuis 2 ans pour la campagnevillejuifoise. J’ai le role de chef de projet, qui estsurtout un role de coordination entre les membresde l’equipe (tres bonne equipe au passage !).J’apprecie la perfection, tout du moins, j’aime m’enapprocher dans mes projets. De plus, ce projetm’interesse vraiment, et je vais m’investir au maxi-mum.

Team LinkFly 5

Page 6: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

1.3 Kevin

Slytink, tres grand timide et romantiquepronant la paix dans le monde. C’est un jeunehomme de dix neufs ans des plus doux et pose.Frolant la perfection, il a toutefois un leger toc(trouble obsessionnel compulsif), a savoir gueu-ler « ramasse BOLOSS » au moindre fremissementprovoque par la chute d’un quelconque objet.

1.4 Elodie

Dame de Coeur. Ayant deja vecu 20 joliesannees rythmees par le son de Billie Jean, je conti-nue ma route dans cette ecole toute bleue (ou, ilfaut le dire, je passe des moments sympathiques),en participant a l’elaboration de ce projet. Je m’oc-cupe, en particulier du traitement d’image.Adepte de ce qui touche au design, j’ai ete nommeeresponsable de la charte graphique, ce qui est pourmoi un grand privilege. Pioche !

Team LinkFly 6

Page 7: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

2 Rappels de planning

− Recherches / Ebauche / ⊕ Bien avance / • Termine

2.1 Soutenance 1Malik Pierre-Lou Kevin Elodie

Pre-traitement ⊕ ⊕ ⊕Extraction des caracteres −

Apprentisage et traitement −Interface graphique ⊕

Charte graphique, annexes ⊕Site internet ⊕ ⊕

2.2 Soutenance 2Malik Pierre-Lou Kevin Elodie

Pre-traitement • • •Extraction des caracteres • ⊕ •

Apprentisage et traitement ⊕Interface graphique •

Charte graphique, annexes ⊕Site internet ⊕ ⊕

2.3 Soutenance FinaleMalik Pierre-Lou Kevin Elodie

Pre-traitement • • •Extraction des caracteres • •

Apprentisage et traitement • •Interface graphique •

Charte graphique, annexes •Site internet • •

Team LinkFly 7

Page 8: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

3 Representation des donnees dans PicToChar

3.1 L’image lors du pretraitement

Pour ce qui est de la manipulation des images au sein de notre programme,nous utilisons un type que nous avons cree. L’image y est stockee dans une ma-trice qui contient de simples entiers, avec des valeurs allant de 0 a 255. En effetnous travaillons sur notre image en niveau de gris. Cet matrice utilise le moduleBigArray afin d’etre compatible avec les types de donnees en C.

Nous avons donc cree deux fonctions en Caml, l’une permettant de passerdu format surface (renvoye par ocamlSDL) en format pictMatrix (le notre) ainsiqu’une fonction effectuant la transformation inverse. Ces fonctions se trouventdans le module surface.ml qui a pour role de manipuler des donnees de typesurface.

type pic tMatr ix = {width : i n t ;height : i n t ;mutable matrix : (

in t ,Bigarray . i n t e l t ,Bigarray . c l a y o u t)Bingarray . Array2 . t

}

3.2 Les images intermediaires

Afin de voir l’evolution des images au cours du pretraitement (binarisation,application de filtres, rotation) et autres modifications, nous effectuons un ex-port de l’image si l’utilisateur le demande, et ce a chacune des differentes etapes.L’interface graphique permet d’ailleurs de visualiser ces etapes intermediaires.

Team LinkFly 8

Page 9: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

3.3 Les caracteres

A l’entree des neurones, sera presentee une matrice 16*16, laquelle contien-dra un caractere decoupe au prealable dans la matrice totale, contenant le texte,et redimensionne pour pouvoir etre contenu dans cette matrice 16*16 malgreles differentes largeurs ou hauteurs que peuvent presenter chaque caractere.Les deformations dues au redimentionnement de ceux-ci n’influeront pas surla reconnaissance par le reseau de neurone car identique pour chacun des ca-racteres. Ainsi meme deforme, un ’L’ applati, pour etre contenu dans la matrice,sera reconnu et defini comme un ’L’, car lors de l’apprentissage, le ’L’ passe enexemple aura lui aussi subi les memes deformations.

3.4 Superstructure

Apres avoir detecte les blocs lignes et caracteres, il a fallu creer une structurepour stocker tout ce joli monde, et ce en commencant par les blocs. Nous avonspour cela eu plusieurs idees mais nous en avons retenue une, nous paraissantla plus efficace au final. Cette structure consiste en un vecteur dont chaque casepointe sur une structure de donnees contenant des informations essentielles surchaque bloc. Ces informations sont les suivantes :

– Les positions en x et y du bloc– La largeur et la hauteur du bloc– La taille moyenne des lettres du bloc– Un char * avec les caracteres contenus dans le blocLe numero du bloc correspond au numero de la case du vecteur qu’il occupe.

Au depart nous avions une file contenant les caracteres, et nous avons im-plemente les files a l’aide de listes chaınees, mais une file de caracteres n’etaitpas une facon tres optimisee de representer notre chaıne de caracteres !

Team LinkFly 9

Page 10: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Le code de la structure se trouve en annexe.

3.5 Resultat HTML, simple texte et autres

Au final, notre programme renvoit un resultat sous forme de page HTML.Cette page est structuree en fonction des Blocs, lignes et caracteres detectes. Lastructure qui vous a ete presentee plus haut permet de le faire de facon ideale.En effet nous possedons les coordonnees de chaque bloc et la notion de blocspeut etre reutilisee en HTML notamment grace aux fichiers CSS.

L’utilisateur peut egalement exporter dans d’autres formats, mais tout celaest explique dans la partie consacree au rendu de l’OCR !

Team LinkFly 10

Page 11: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

4 Pre-traitement de l’image

4.1 Chargement de l’image (Pierre-Lou)

Tout notre programme se base sur une ou plusieurs images en entree. Lapremiere chose a faire etait donc de reussir a charger une image afin de l’exploi-ter. Pour cela, nous avons utilise la bibliotheque OcamlSDL qui est un portagede la celebre bibliotheque SDL pour Ocaml.

Les fonctions permettant de charger une image sont tres simples d’utilisa-tion, en revanche ce fut plus dur de reussir la compilation sur les machines del’ecole. Dans un premier temps, nous avons utilise ocamlfind lors de la compi-lation, la bibliotheque etant deja installee sur les machines de l’ecole.

Nous avons ensuite structure un peu notre code source en creant un main.ml,ainsi qu’un module qui se chargerait du chargement et de la sauvegarde desimages a l’aide de SDL (la sauvegarde pourra par exemple nous servir a genererdes images des etapes temporaires).

4.2 Binarisation de l’image (Pierre-Lou)

4.2.1 Passage en niveau de gris.

Une image en couleur est reprensentee de la maniere suivante : pour chaquepixel, un niveau de rouge, de vert et de bleu est contenu en memoire. cette va-leur va de 0 a 255. Pour passer une image en niveau de gris, il suffit de faire lasomme de ces 3 valeurs divisee par 3. on obtient un nouveau nombre en 0 et 255.

Il est a noter que d’autres techniques affectent des coefficients plus impor-tants a certaines couleurs qu’a d’autres du fait que les yeux ne voient pasforcement l’equivalent du bleu ou du rouge en niveau de gris de la mememaniere, mais l’image etant traite par une machine, il n’y a pas lieu d’utiliserces coefficients et il suffit d’utiliser la formule classique pour passer en niveaude gris.

Team LinkFly 11

Page 12: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

4.2.2 passage en noir et blanc.

Une fois que nous avons une matrice avec pour chaque pixel sa valeur enniveau de gris, il faut la passer en noir et blanc. Pour cela, nous utilisons unseuil. Pour le moment le seuil est defini manuelement, mais par la suite il seratrouve pour une image donnee en fonction de la couleurs des luminosite despixels qui composent l’image. Tous les pixels dont la valeur est inferieure auseuil deviennent noir, tous ceux superieurs deviennent blancs.

Team LinkFly 12

Page 13: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

4.3 Les filtres (Elodie)

4.3.1 Qu’est ce qu’un filtre ?

Dans le domaine du traitement d’images, les filtres sont indispensables. Lesfiltres sont en fait des transformations de l’image d’origine, afin d’arriver a uneimage plus nette, plus floue, avec les bords plus marques etc. . .

Au niveau des filtres, pour cette soutenance, l’un des principaux objectifs,etait le gommage. Il a pour but de rendre l’image propre, c’est-a-dire de ladebarrasser des petites impuretes eventuellement presentes, notamment du bruit(cree par le scanner par exemple, ou bien par l’algorithme de rotation de l’image).

Le deuxiemme filtre important est le filtre de contraste. Il a pour but de ren-forcer le constraste, c’est-a-dire faire comme le nouvel Omo, obtenir un blancplus blanc que blanc et un noir plus noir que noir ! D’un point de vue algorith-mique, les filtres seront realises a partir du principe des matrices de convolu-tion.

4.3.2 Qu’est ce qu’une convolution ?

Une convolution est un traitement d’une matrice par une autre appelee ma-trice d’entiers de convolution ou « noyau ». Cette methode est utilisee par laplupart des logiciels de traitement d’image tel que Photoshop, pour creer demultiples effets, et aimant beaucoup le graphisme, c’est une des raisons pourlaquelle cette partie m’a interesse.

Ces matrices peuvent etre de taille 5x5 ou 3x3. Les coefficients des matricesde convolution varient selon l’effet souhaite. Dans notre cas, nous nous limite-rons a la taille 3x3, qui sont les matrices les plus utilisees et qui suffisent a tousles effets recherches. De plus, elles offrent une execution du programme beau-coup plus rapide. En effet, soit m la hauteur de l’image en pixels et n sa largeur,il y a 3*3*n*m calculs par application de filtre au lieu de 5*5*n*m.

Le filtre « Matrice de convolution »utilise donc notre image assimilee a unematrice d’entiers, ces derniers representants le niveau de gris de chaque pixel.

Voici son fonctionnement : Le filtre etudie successivement chacun des pixelsde l’image. Pour chaque pixel, il multiplie la valeur du pixel centrale et de cha-cun des 8 pixels qui l’entourent par la valeur correspondante dans dans matricede convolution. Il additionne l’ensemble des resultats, qui sera ensuite divise

Team LinkFly 13

Page 14: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

par la somme des coefficients et le pixel central prend alors la valeur du resultat.

4.3.3 Le gommage

Il s’agit de la premiere etape pour le traitement de notre image. Pour uneffet de gommage qui ”floutera” legerement l’image, afin de faire disparaitreles petites impuretes, nous utiliserons la matrice suivante :1 1 1

1 5 11 1 1

Voici le resultat apres traitement :

Team LinkFly 14

Page 15: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

4.3.4 Le contraste

C’est une etape indispensable qui a pour but de renforcer la difference ca-ractere/reste de l’image apres le filtre de flou. Pour ce faire, nous devons aug-menter le contraste de notre image, sans quoi elle resterait flou.

Le principe est exactement le meme que pour l’etape precedente. Seul lescoefficients de la matrice de convolution changent. Nous utliserons donc unematrice comme celle-ci : 0 −1 0

−1 5 −10 −1 0

Voici le resultat apres traitement :

Nous possedons maintenant une image :

– En Noir et Blanc– Sans petites impuretes– Nette

Team LinkFly 15

Page 16: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

4.4 Squelettisation (Pierre-Lou)

Algorithme

Pour cette soutenance nous avons implemente un filtre un peu particulier : lasquelettisation. Contrairement aux filtres de la premiere soutenance (reductiondu bruit, contraste, passage en noir et blanc), nous n’utilisions pas de matricede convolution pour connaitre la couleur du pixel actuellement traite.Le squelette d’un caractere doit respecter les regles suivantes :

– Avoir la meme homotopie que l’objet initial (meme nombre de compo-santes connexes, meme nombre de trous).

– Etre centre sur l’objet– N’avoir qu’un pixel d’epaisseur– Respecter ses elongations

Il peut etre obtenu par iterations successives d’un operateur d’amincisse-ment morphologique (hit-and-miss) autrement dit, pour chaque pixel noir de lamatrice, on analyse les pixels autour, et selon des regles, il faudra ou non rendrece pixel blanc. Il y a 8 pixels autour du pixel traite, ce qui porte a 255 le nombresde combinaisons 0/1.

Team LinkFly 16

Page 17: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Application

Nous utilisons donc un vecteur de 255 cases, avec des 0 ou des 1. Un 1 signi-fiant qu’il faut mettre le pixel a blanc. Pour trouver la valeur entre 0 et 255 d’uneconfiguration donnee, nous utilisons l’equivalent binaire de la configuration.Par exemple pour l’exemple ci dessous, l’equivalent binaire est (01101110)2 (degauche a droite et de haut en bas), sa position dans le vecteur est donc (110)10.

Voici les deux masques generiques (ils sont valables dans les 4 orientations)pour lesquels il faut supprimer le pixel noir :

Team LinkFly 17

Page 18: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Optimisation

Cet algorithme, tel quel, a un tres gros defaut : il doit etre applique a tousles pixels, et ce tant que les regles enoncees ci-dessus ne sont pas toutes va-lables (dans l’algo, tant que l’on arrive encore a supprimer des pixels noirs).Pour ameliorer la temps d’execution de cet algorithme, nous utilisons une file.Lors du premier passage sur l’image, nous empilons et traitons les pixels noirs.Puis l’algo est rappele sur tous les pixels de la pile. On traite les pixels voisinsde celui qui vient d’etre depile. On empile ceux que l’on traite. On continue jus-qu’a avoir une pile vide.

Dans la pratique, nous avons utilise le module Queue de caml qui offre uneimplementation des files FIFO. Notre algorithme avec utilisation des files s’estavere reellement plus rapide !

Team LinkFly 18

Page 19: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

4.5 Rotation (Kevin)

4.5.1 Detection de l’angle

La detection de l’angle s’effectue grace a l’algorithme de Hough, En utilisantla correspondance de notation d’une droite selon les equations y = a ∗ x + b etρ = x∗cos(θ)+y∗sin(θ) on pourra, a l’aide de cet algorithme, determiner l’angletheta.

Il faut savoir que tout les points d’une droite ont la meme valeur de ρ pourun angle θ donne. En Calculant la valeur de ρ de chaque pixel noir pour unangle theta variant de 0 a 180 degre et en associant un compteur aux couples(ρ, θ) ainsi obtenu, pour chacun d’eux, dans une table de hachage, nous pour-rons alors recuperer l’angle θ cherche.

4.5.2 La rotation

Nous avons tout d’abord effectue une rotation toute simple de matricesgrace a la formule suivante (x etant le pixel actuellement parcouru en largeur etxc le pixel central. Idem pour y) :

x ∗ cos(−α)− y ∗ sin(−α))

x ∗ sin(−α) + y ∗ cos(−α))

Team LinkFly 19

Page 20: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Comme vous pouvez le voir, des erreurs dues a des depassements des li-mites dans les matrices sont alors apparues. Afin de pallier a ces problemes,nous avons effectuer le deplacement d’un pixel uniquement si celui-ci ne sor-tait pas des limites imposees par la matrice.

Une fois ce probleme resolu, nous avons enfin eu un rendu visible de la ro-tation qui pour notre plus grand desaroi etait affreusement laid, car rempli debruit. Apres reflexion, nous avons pense a n’effectuer que le deplacement despixels noirs dans une matrice totalement blanche. Le rendu etant alors beau-coup plus agreable esthetiquement car presentant beaucoup moins de bruit surles parties totalement blanches.

Nous avons encore du faire face a un dernier probleme. Celui-ci etant de per-mettre une rotation suivant le point central de l’image et non son coin superieurgauche pour eviter qu’apres rotation de celle-ci, une partie ne disparaisse. Apresde nombreuses recherches sur des decalages par translation post-rotations enfonction de l’angle, nous nous sommes tout simplement rendu compte qu’ilsuffisait d’inclure les coordonnees du pixel central dans la formule, ce qui nousa permis d’etablir la formule suivante :

xc+ (x− xc) ∗ cos(−α)− (y − yc) ∗ sin(−α))

yc+ (x− xc) ∗ sin(−α) + (y − yc) ∗ cos(−α))

Team LinkFly 20

Page 21: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

5 Communication C/Caml (Pierre-Lou, Malik)

5.1 Module bigarray

Le module bigarray est un module permettant d’acceder a des valeurs camlen c sans passer par des manoeuvres compliquees.

Il s’agit en fait d’un module qui cree une copie virtuelle d’une valeur du tasde caml (en fait le module fait pointer directement la variable bigqrray en c surune partie du tas de caml) afin de pouvoir la modifier en c.

5.2 Du C dans Caml

Pour appeler du C dans Caml la methode est assez simple en utilisant lesbigarray. En il suffit simplement de creer une fonction qui retourne une valeurde type value, en realite, caml ne travail qu’avec des value.

Afin d’envoyer le bigarray dans une fonction en C il suffit d’appliquer lafonction Data bigarray val() sur un des parametres d’une fonction utilisant lamatrice caml.

Dans la fonction retournant un type value on peut aussi recuperer lesdifferentes dimensions du bigarray grace a la fonction Bigarray val(bigarray)-¿dim[i] ;

Une fois ces differentes etapes accomplies, nous pouvons nous amuser a cas-ter le bigarray dans nos fonctions a l’aide d’un simple pointeur et ainsi accederaux cases de la matrice.

Le cast du bigarray en double pointeur ou plus n’etant pas permis, nous de-vons donc acceder aux cases de la matrice a l’aide d’une formule assez simple :matrice[i + j * hauteur].

Team LinkFly 21

Page 22: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

6 Detection et decoupage

6.1 Blocs (Malik/Pierre-Lou)

Pour le decoupage de notre image en blocs, nous utilisons deux algorithmesmutuellements recursifs :

– decoupe bloc vert– decoupe bloc horzL’algorithme de decoupage vertical appelle l’algorithme de decoupage ho-

rizontal sur les deux sous-blocs crees. L’algorithme de decoupage horizontalapelle ensuite celui de decoupage vertical.

Si le decoupage n’a pas lieu (pas de zone blanche verticale ou horizontale,selon l’algo, assez grande) alors on apelle tout de meme l’autre algorithme, surtout le bloc, mais en lui signifiant que le precedent n’as pas coupe le bloc endeux. S’il y a succes du decoupage, on rapelle recursivement sur les deux sous-blocs. Dans le cas contraire, on a un bloc minimal. Si on a un bloc minimal, onenregistre ce bloc avec ses coordonnees dans notre structure puis on apelle doncl’algorithme de decoupage des lignes sur ce bloc.

Team LinkFly 22

Page 23: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Sur l’exemple ci dessus :

– on tente de couper selon une ligne horizontale. Echec.– on coupe verticalement (1)– On coupe le sous-bloc a gauche de (1) selon une ligne hozizontale.– On tente de couper (A) en horizontale. Echec. En vertical. Echec. On a un

bloc elementaire.– idem pour (B).– On traite ensuite a droite de 1...

On traite donc les appels recursifs de gauche a droite et de haut en bas. Si ily a deux endroits « coupables » on coupe tout d’abord la ou l’espace est le pluslarge, comme le montre cet autre exemple :

En annexe 1, l’organigramme de notre algorithme

Team LinkFly 23

Page 24: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

6.2 Lignes (Elodie)

Afin de detecter les differents caracteres de notre image, l’etape suivanteest effectuee : la detection des blocs appelle la detection des lignes, puis leurdecoupage horizontal, par caracteres, que nous avons implemente en C.

La detection des lignes s’effectue a partir d’une image en noir et blanc propre,c’est-a-dire sans imperfection, et parfaitement droite.

Principe : Comme pour les algorithmes precedents, notre image est toujoursassimilee a une matrice d’entiers. Nous utiliserons un vecteur d’entier que nousremplirons selon la nature des pixels rencontres. Nous parcourrons donc notreimage verticalement. Pour chaque ligne, nous parcourrons la matrice horizon-talement a la recherche d’un eventuel pixel noir (donc d’un debut de ligne). Silors du parcours horizontal, il n’y a aucun pixel noir, nous mettons le vecteur a0 et on poursuit la recherche. S’il y a au moins un pixel noir, on insere 1 dans levecteur.

Ensuite, on parcours le vecteur. si il y a une case [i] qui contient 0 et [i+1] va-lant 1, nous avons une ligne. Nous y tracons un trait vert clair pour la delimiter.Tant que les cases [i+1] du vecteur ne valent pas 0, on est dans la ligne. On traceensuite un trait vert fonce lorque l’on rencontre un 0 (nouvelle zone blanche).On continue ainsi jusqu’a la fin du vecteur.

Team LinkFly 24

Page 25: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

6.3 Caracteres (Elodie)

La methode de detection des caracteres est similaire a celle des lignes. L’etudese limite par contre entres les bornes superieures et inferieures des lignes.

On utilise pour ca un vecteur d’entier egalement. Nous parcourons doncla ligne horizontalement, et pour chaque pixel rencontre, on parcours verticale-ment entre les deux bornes. Nous remplissons notre vecteur, commeprecedemment, selon la nature du pixel trouve : un 0 en cas d’absence de pixelnoir, un 1 s’il y en a au moins un.

Puis lors du parcours du vecteur, si la case [i] contient 0 et que la case [i+1]contient un 1, nous avons un caractere : nous tracons un trait bleu. En cas dedeux 1 consecutifs, c’est que nous sommes dans le caractere meme. Enfin, si lacase [i] contient 1 et que la case [i+1] contient un 0, c’est la fin du caractere : nousretracons un trait bleu.

Pour chaque caracteres, espaces compris trouves, on ajoute le caractere a lachaine associee au bloc courant. De plus si l’on as de gros espaces, nous utili-sons les tabulations.

Team LinkFly 25

Page 26: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

7 Exportation et Resultats (Pierre-Lou)

7.1 Rendu HTML

Notre rendu HTML est compose de 3 fichiers et d’un dossier :

– index.html– style out.css– style.css– /img

index.html contient le code HTML genere par l’application pictchar. Il est direc-tement visualisable dans n’importe quel navigateur internet.

style out.css contient le css genere par l’application afin de placer les elementsdans la page HTML. Il n’est pas a modifier.

style.css contient les propres styles de l’utilisateur a appliquer a la page. Iln’est pas modifie apres chaque execution de pictochar. Il peut etre utilise pourinserer le logo de l’entreprise en filigrane par exemple.

Le dossier /img contient les images qui ont ete detectes dans le documentsource. Elles sont egalement integrees a la page HTML.

Dans sa configuration par default, le texte est bleu, centre, et de taille moyenne(la taille est relative, puisque notre OCR prend en compte lors de son rendu lataille des caracteres en entree.

Team LinkFly 26

Page 27: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

7.2 Rendu texte

Le rendu texte se fait assez naturellement. En effet, nous affichons le contenude chacun des cadres, les uns en dessous des autres. Ce rendu, basique, permetcependant une utilisation :

– simple– multiplateforme– rapide pour les echanges (e-mails entre autre)

Team LinkFly 27

Page 28: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

7.3 Rendu tex et PDF

A la fin de l’execution du programme, un fichier .tex est genere et s’affiche dansl’editeur de texte integre a pictochar.

Il est possible de modifier ce fichier, l’enregistrer, et de compiler le pdf as-socie au .tex. Le rendu out.pdf se trouvant dans le dossier /out.

Un fichier de log de pdflatex se trouve dans le dossier /logs.

Team LinkFly 28

Page 29: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

8 Interface graphique (Malik)

8.1 Le principe de notre interface

Nous avons decide de creer une interface assez intuitive pour permettre al’utilisateur de s’habituer facilement a manipuler notre logiciel.

Premierement, nous avons decide de creer des menus avec des noms clas-siques du genre fichier-¿(nouveau-ouvrir-enregistrer-enregistrer sous... etc).Ensuite nous avons cree deux barres d’outils, l’une pour tout ce qui est gestiondes fichiers textes generes et l’autre pour tout ce qui est gestion des images etapplication de l’OCR.

De plus notre interface est un front-end a part entiere puisqu’elle ne fait pasappel a des fonctions en caml mais au binaire de l’ocr a l’aide d’options biensspecifiques telles que « -file » ou encore « -rotation » ou « -bruit ».

8.2 Gtk+-2.0

Gtk+-2.0 pour The Gimp Toolkit est un editeur d’interface plutot intuitif sebasant sur un principe simple : pour creer une interface, on commence par creerune fenetre dans laquelle on met des «boites» qui vont contenir ce que l’on ap-pelle des widgets (ou gadgets en francais). Ces derniers peuvent servir a dif-fentes choses, du genre mettre une image ou encore des boutons, ce qui, vous leremarquez, est tres utile dans le developpement d’une interface.

Team LinkFly 29

Page 30: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Les box

Ces derniers representent la logique de Gtk, ce sont les elements principauxde l’interface graphique au niveau de sa conception car ils ne sont pas vraimentvisible une fois cette derniere terminee. Neanmoins cette logique a ses limitescar l’imbrication d’elements les uns dans les autres necessite beaucoup d’appelset de tres bien penser son interface avant meme de l’avoir commence.

Ces elements primordiaux dans le travail de l’interface se decomposent endeux sous-categories, les hbox et les vbox. Les premieres permettent d’empi-ler les elements de maniere horizontale et les secondes servent a les empilerde maniere verticales. Une troisieme categorie un peu plus specifique existe, ils’agit des Gtktables, ces dernieres permettent de creer des box dans un tableaudont on peut determiner la largeur et la hauteur et ainsi de creer une interfaceun peu plus equilibree.

Une fois la logique de ces elements comprise, le travail consiste surtout asavoir ou placer les elements et a determiner leurs actions dans l’interface.

Les widgets

Ces elements constituent le coeur graphique de l’interface. Il existe differentstypes de widgets, ceux destines a afficher quelque chose comme une image oudu texte, ceux censes determiner une action immediate tels les boutons (conte-nant generalement une icone) et ceux contenant d’autres widgets a actionsimmediates tels que les barres d’outils.

Un autre type de widget un peu special existe aussi, il s’agit des barres, tellesles barres de progression ou les barres de scroll pour se deplacer dans un docu-ment par exemple. Dans le cas de notre interface nous avons utilise chacun deces types de widgets car nous en trouvions l’utilite pour notre programme.

Les menus nous servent a gerer les fichiers dans un aspect purement for-mel (ouverture, fermeture, ecriture), les barres d’outils contiennent des boutonspour les actions primordiales comme la mise en marche de l’OCR et enfin l’af-fichage de l’image et du texte permettent d’avoir un apercu du resultat obtenupar le programme et de pouvoir le modifier assez instinctivement.

Team LinkFly 30

Page 31: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Les raccourcis

Le menu contient des raccourcis qui vont permettre a l’utilisateur un peuplus chevronne ou qui utilisera le programme depuis un certain temps d’al-ler plus vite dans l’utilisation de l’interface. En effet, ce sont des raccourcisclassiques qui permettent d’ouvrir, de fermer ou d’enregistrer un document demaniere quasi-intuitive.

Les onglets

Ces derniers permettent d’avoir plusieurs fichiers textes ouverts a la fois etde travailler simultanement dessus, ils permettent aussi d’executer plusieursfois l’ocr sur des images differentes et d’en conserver le contenu de maniereimmediate ainsi que de pouvoir retourner sur un contenu precedent et le modi-fier sans avoir a fermer celui sur lequel l’utilisateur est actuellement.

Plus tard les onglets seront connectes directement aux images auxquels ilsappartiennent. En effet la structure est deja prete et lorsqu’on cliquera sur unonglet, l’image correspondante s’affichera directement, ce qui permettra a l’uti-lisateur d’etre plus detendu dans l’utilisation de son logiciel.

8.3 Le zoom

Ce dernier permet a l’image d’etre agrandie ou diminue sans perte dedonnees, c’est a dire sans degradation de l’image. Pour cela on reprend le Pix-Buf de l’image, c’est a dire sa surface, on garde sa hauteur et sa largeur puis onla re-ouvre avec une taille superieure ou inferieure selon que l’utilisateur zoomeou dezoome.

Cette fonction est tres utile pour voir les modifications apportees a l’imagesans avoir a ouvrir l’image avec un autre logiciel que l’interface graphique.

8.4 Gestion des erreurs

Nous avons cree une gestion des erreurs au niveau de l’interface graphique.Par exemple lorsqu’un utilisateur un peu trop inattentif souhaite fermer le lo-giciel sans enregistrer une fenetre s’ouvre et le lui rappelle, ou encore si aucundocument n’est ouvert une fenetre avertit l’utilisateur. Cette gestion des erreursrends l’interface un peu plus professionnelle.

Team LinkFly 31

Page 32: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

8.5 L’affichage des etapes

Apres avoir lance notre programme et visualise son resultat, nous avonsvoulu rendre possible l’affichage des traitements intermediaires comme annoncesur le sujet du projet. Pour cela, nous avons cree quatre boutons representantles quatre etapes amenant au resultat final, ici la detection des blocs/lignes/ca-racteres. Ces quatre etapes sont :

– Le passage de l’image en noir et blanc (binarisation)– L’image apres rotation– L’image apres squelettisation– L’image apres detection des blocs/lignes/caracteres (resulat final)

8.6 La gestion des fichiers texte et les onglets

A chacun des fichiers textes ouverts ou crees dans des onglets a l’aide de l’in-terface, nous avons voulu que l’utilisateur puisse sauvegarder n’importe quelfichier se trouvant dans n’importe quel onglet. Nous avons donc cree une struc-ture permettant de savoir dans quel endroit se trouvait n’importequel texte ainsique ses proprietes, et ce dans tous les onglets. Nous avons aussi code le fait queles fichiers puissent soit etre enregistres dans un fichier par defaut, soit enre-gistres dans un repertoire choisi par l’utilisateur.

L’interface presente aussi la possibilite de pouvoir fermer chacun des on-glets separement les uns des autres, en effet la structure creee est contenue danschacun des onglets, ainsi nous pouvons determiner facilement les actions a ef-fectuer sur chacun des fichiers ouverts dans notre interface.

Team LinkFly 32

Page 33: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

9 Reseau neuronal (Kevin)

Cette partie vous presente les recherches que nous avons effectue sur lesreseaux de neurones ainsi que les choix que nous avons ete amenes a fairelors de leur utilisation.

9.1 Qu’est-ce qu’un reseau de neurones ?

Un neurone formel est une representation mathematique et informatique duneurone biologique. Il reproduit certaines caracteristiques biologiques, en par-ticulier les dendrites, axones et synapses, au moyen de fonctions et de valeursnumeriques.

Par exemple un modele de neurone (utilise pour les reseau multi-couches ouPMC) peut se representer par un ensemble d’entrees reliees par des poids a unbiais. Ce biais est une fonction de combinaison elle-meme jointe a une fonctiond’activation. La fonction de combinaison retourne une valeur calculee a partirdes differentes entrees et des poids qui y sont associes. Cette meme valeur estensuite passee en argument a la fonction d’activation dont le resultat sera lasortie final du neurone.

Le biais est une fonction lineaire qui est une substitution avantageuse del’historique a seuil ou a partir du deplacement d’une valeur seuil, le neuronerenvoyait 0 ou 1. Quant a elle, la fonction d’activation, dont le domaine dedefinition limite ce que l’on peut apprendre, est une fonction du type sigmoidcomme f(x) = tanh(x) ou g(x)= 1/(1+e(-x)) ayant l’allure suivante.

Team LinkFly 33

Page 34: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Les neurones formels sont regroupes en reseaux de neurones. Grace a des al-gorithmes d’apprentissage automatique, on peut regler un reseau de neuronespour lui faire accomplir des taches qui relevent de l’intelligence artificielle.

9.2 Reseau

Un reseau de neurones formels est constitue d’un grand nombre de cellulesde base interconnectees. De nombreuses variantes sont definies selon le choix dela cellule elementaire, de l’architecture du reseau et de la dynamique du reseau.

Une cellule elementaire peut manipuler des valeurs binaires, representeespar 0 et 1, ou reelles. Differentes fonctions peuvent etre utilisees pour le calculde la sortie. Le calcul de la sortie peut etre deterministe ou probabiliste.

L’architecture du reseau peut etre sans retroaction, c’est a dire que la sortied’une cellule ne peut influencer son entree. Elle peut etre avec retroaction totaleou partielle.

La dynamique du reseau peut etre synchrone : toutes les cellules calculentleurs sorties respectives simultanement. La dynamique peut etre asynchrone.Dans ce dernier cas, on peut avoir une dynamique asynchrone sequentielle : lescellules calculent leurs sorties chacune a son tour en sequence ou avoir une dy-namique asynchrone aleatoire.

Team LinkFly 34

Page 35: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Un reseau a sens unique est constitue de couches de neurones dans les-quelles la sortie d’un neurone ne peut alimenter que l’entree d’un neurone situedans la couche posterieure.

Un reseau multi-couches est un reseau a sens unique constitue d’une couched’entree, d’une couche de sortie et de couches intermediaires ayant pour modelede neurone celui presente precedemment dans la partie « Cellule de base ».

Le reseau multi-couches est tres probablement celui qui sera employe parnotre reseau de neurone, ainsi que le modele de neurone lui etant associe.

9.3 L’apprentissage

Trois grands types d’apprentissage se distinguent en ce qui concerne lesreseaux de neurones : supervise, non-supervise ainsi que par renforcement.

La methode d’apprentissage supervise consiste a fournir des exemples auPCM (soit un vecteur d’entrees, soit un vecteur de sorties valides) puis de mo-difier les poids suivant l’erreur commise par celui-ci lors du calcul de la sortied’exemple. L’algorithme de retropropagation qui a partir des couches de sortie(pour laquelle on connait la valeur de l’erreur) permet de modifier les poidsvers les couches anterieures

La methode d’apprentissage non-supervise se distingue de l’apprentissagesupervise par le fait qu’il n’y a pas de sortie a priori. Dans l’apprentissagenon-supervise il y a en entree un ensemble de donnees collectees. Ensuite leprogramme traite ces donnees comme des variables aleatoires et construit unmodele de densites jointes pour cet ensemble de donnees.

L’apprentissage par renforcement, dont le but est d’apprendre, a partird’experiences, ce qu’il convient de faire en differentes situations, de facon a opti-miser une recompense numerique au cours du temps, consiste a considerer unagent autonome, plonge au sein d’un environnement, et qui doit prendre desdecisions en fonction de son etat courant. En retour, l’environnement procure al’agent une recompense, qui peut etre positive ou negative. L’agent cherche, autravers d’experiences iterees, un comportement decisionnel (appele strategie oupolitique, et qui est une fonction associant a l’etat courant l’action a executer)optimal, en ce sens qu’il maximise la somme des recompenses au cours dutemps.

Team LinkFly 35

Page 36: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

l’apprentissage choisi pour notre reseau est un apprentissage parretropropagation du gradient dont le principe est le suivant :

Pour cette troisieme soutenance l’apprentissage a ete implemente dan notrereseau de neurones. Celui-ci est contenu dans une methode qui a ete associee al’objet network. Cette derniere utilise la methode de retro-propagation du gra-dient en calculant pour la couche de sortie un nombre note delta qui sera leproduit le la sortie calculee avec la difference de 1 et cette meme sortie le toutmultiplie a nouveau par la difference entre la sortie attendue et celle calculee.Cela nous donne l’equation suivante pour le calcule des deltas sur la dernierecouche ou o est la sortie calculee et c celle attendue :

δi ← oi(1− oi)(ci − oi)

Pour toutes les couches anterieures, le calcule des delta se fera par le produitde la sortie calculee avec toujours celui de la difference entre 1 et cette memesortie mais aussi multiplie par la somme des produits des delta et des poidspour chaque neurone de la couche successive. Nous obtenons alors la formulesuivante ou w le poid :

δi = oi(1− oi)ΣkSucc(i)δkwki

L’ensemble du reseau est alors reparcouru dans l’autre sens afin de mettre ajour tout les poids dont la nouvelle valeur prendra celle de l’ancienne a laquellesera ajoute le produit du taux d’apprentissage du delta et de l’entree du neu-rone correspondant. Nous obtenons alors l’equation suivante ou e est le tauxd’apprentissage.

wij ← wij + εδixij

Ce procede est alors repete pour chaque exemple tant que l’erreur globale quiest la somme des carres de la difference entre les sorties obtenues sur la couchefinale et celles attendues n’est pas inferieure a un certain seuil fixe permettantd’affiner cet apprentissage.

Team LinkFly 36

Page 37: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

9.4 Differentes Approches

Une approche matricielle consiste a utiliser les valeurs des pixels (ou unemoyenne sur des zones plus ou moins grandes) de la representation matriciellede chaque symbole.

Une approche batonnale consiste a definir un nombre donne de segmentset a utiliser les valeurs de correspondance avec chaque caractere. De plus, ellepermet de pallier a certains problemes comme l’impossibilite du PMC a diffe-rencier un caractere en minuscule de sa correspondance en majuscule et doncde determiner la nature capitalisee ou non de celui-ci.

La vectorisation d’un caractere consiste quant a elle, a representer celui-cipar un ensemble de segments de droites, plutot que par un ensemble de pixels.

Une methode dite par inondation consiste quant a elle a partir du centrede la matrice contenant le caractere puis de s’etendre et de compter les zonesblanches et noires ainsi que certains ecarts typiques.

Au depart nous pensons utiliser la methode batonale. Nous avons par lasuite opte pour l’aproche matricielle.

9.5 Reconnaissance d’un caractere

Afin de pouvoir etre passe en parametre a notre reseau de neurones dans lebut de pouvoir etre reconnu, chaque caractere doit au prealable etre decoupe.Chacun de ces caracteres est alors represente par une matrice de pixel qui seraenregistre dans un fichier dans lequel une ligne contient deux nombres puis unesuite de 0 et de 1. Les deux premiers nombres etant le nombre de colonnes et delignes de notre matrice de pixels et la suite de 0 et de 1 etant notre matrice depixel aplatie en un unique vecteur contenant la concatenation de chacune deslignes de la matrice initiale.

Lors de l’utilisation du reseau de neurones une lecture de ce fichier est alorsfaite. Un parseur parcourra alors chaque ligne en reformant le caractere corres-pondant et sa matrice de pixels. Celle-ci sera alors transformee afin de devenirune matrice carree de 16 par 16 qui sera a nouveau aplatie sous forme d’unvecteur de 256 cases qui est la concatenation des 16 lignes a 16 colonnes de la

Team LinkFly 37

Page 38: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

matrice initiale formant ainsi nos 256 entrees pour le reseau.

Une fois passe en parametre a notre reseau ayant au prealable subi un ap-prentissage, la valeur des sorties obtenues pour les neurones de la dernierecouche sont alors contenues dans un vecteur. La position du maximum dans cevecteur donne alors une reference a laquelle est associe un caractere, referencedefinie lors de l’apprentissage.

Malgre de nombreux efforts, la reconnaissance des caracteres n’est pas aupoint, cependant afin que la fonctionnalite de l’apprentissage soit demontreenous avons associe en parallele la presentation du modele de la fonction XORqui elle est tout a fait operationnelle et dont le reseau correspondant, apres avoirsubi l’apprentissage de la table XOR, retourne les valeurs attendues selon lesdifferentes entrees proposees.

9.6 Structure

Le reseau de neurones a ete explicitement demande en objet. D’apres les re-cherches effectuees lors de la soutenance precedente nous avons aisement pucreer les elements ci dessous.

9.6.1 Neurones

l’objet « neurone » contient les elements suivant :

– un tableau contenant les poids associes a chaque entree, celui-ci etant ini-tialise par des valeurs prises au hasard entre 0 et 1.

– une valeur de sortie qui contiendra le resultat d’un calcul impliquant unerelation entre les poids et les entrees.

– une valeur d’erreur calculee lors de l’apprentissage et. etant necessaire acelui-ci.

– des methodes d’acces et de modification des valeurs presenteesprecedemment.

– une methode calculant la sortie du neurone

Le code caml de notre neurone se trouve en annexe 3

Team LinkFly 38

Page 39: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

9.6.2 Couches

Notre reseau de neurones etant un PMC (Perceptrons Multi couches) nousavons dans un premier temps pense et cree un objet ”reseau” contenant un ta-bleau de tableaux dont chaque colonne etait une couche contenant, pour chacundes elements de celle-ci, un neurone. Toutefois pour des raisons pratiques en cequi concerne les differrents acces, modifications et mises a jour des poids, dessorties ainsi que des erreurs, qui seront effectues aussi bien lors de la creationdu reseau que lors de l’apprentissage,nous avons revise notre jugement pourcreer un objet intermediaire ”couche” dans l’optique de pallier a ce probleme.Celui- ci etant structure de la maniere suivante :

– un tableau de neurones representant la couche de neurones.– un tableau de sorties ou sont reinseres les sorties de chaque neurone.Il sert

d’entree pour la couche suivante.– des methodes d’acces et de modification des valeurs contenues dans les

tableaux.– une methode declenchant le calcul de la sortie de/et pour chaque neurone.– une methode declenchant le calcul de la sortie de/et pour chaque neurone.– une methode remplissant le tableau de sortie avec les sorties de chacun

des neurones de la couche.

Le code caml d’une couche se trouve en annexe 4

9.6.3 reseau

Enfin, pour que ces deux types d’objets s’imbriquent et forment un veritablereseau de neurones nous avons defini l’objet ”reseau” compose de :

– un tableau de couches qui sera donc lui-meme compose de tableaux deneurones formant ainsi notre reseau.

– differentes valeurs et leurs methodes associees qui seront utilisees pourl’apprentissage qui sera finalise a la prochaine soutenance.

– une methode appelant pour chaque couche le calcul des sorties de chaqueneurone et le remplissage du vecteur de sorties.

– une methode d’apprentissage qui est en cours de finalisation pour la sou-tenance suivante.

Le code caml de notre reseau se trouve en annexe 5 (sans la methode learn, troplongue)

Team LinkFly 39

Page 40: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

9.7 Organisation

Le choix du nombre de couches ainsi que du nombre de neurones compo-sant chacune de celles-ci fut tres delicat a determiner. Apres avoir longuementreflechi a ce qui pourrait nous etre necessaire pour que le reseau de neuronessoit le plus efficace possible nous avons tout simplement bute.

Nous avons donc effectue de nombreuses recherches au terme desquellesnous somme tombe sur une these nous expliquant que pour des reseaux de neu-rones ayant une fonction similaire a celui que nous voulions, a savoir un reseaude determination, seulement 3 couches sont necessaires. Ces trois couchesrepresentant respectivement la couche d’entree, une couche cachee et la couchede sortie.

Le nombre de neurones sur la couche d’entree etant egale au nombred’entrees passees en parametre a notre reseau, le nombre de neurones sur lacouche intermediaire etant de trente et ce meme nombre pour la derniere couchedevant etre equivalent au nombre de valeurs de sorties possibles a determiner.Ces valeurs ayant ete determinees empiriquement apres de nombreux tests.

Team LinkFly 40

Page 41: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

10 Site Web, Bonus et Packaging

Pour commencer, voici l’adresse de notre site internet : www.pictochar.com

10.1 Charte graphique (Elodie)

Des la premiere soutenance, nous avons choisi, pour le design de notre site,un theme approprie a notre projet : des effets de scans comme par exemples lapresence de chiffres ou de texte, et des images en relation avec l’optique, le toutsous le bleu et le blanc, couleurs dominantes pour un effet lumineux. Banniere,boutons, puces et autres elements ont ete realises a l’aide du logiciel PhotoshopCS.

Team LinkFly 41

Page 42: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

10.1.1 Logo du projet

Le nom du projet a ete choisi en rappel du sujet : La reconnaissance de ca-racteres a partir d’une image. PictoChar etant l’acronyme de Picture To charac-ter, ou comment passer de l’image au texte. Le logo a ete cree afin d’evoquerl’optique, et a donc une forme circulaire, tel un oeil.

10.1.2 Logo de la team

En ce qui concerne notre equipe, apres plusieurs reflexions, nous avons fina-lement opte pour le nom de Linkfly, avec un « papillon de lumiere »pour logo,pour souligner le fait que nous sommmes une equipe soudee qui vole haut,comme Cindy Sander.

Team LinkFly 42

Page 43: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

10.2 Modele HTML et CSS, PHP (Pierre-Lou)

La structure de notre site est ecrite en Xhtml et CSS. C’est-a-dire que lecontenu est separe de la mise en page.

Notre site est parfaitement affichable sur tous les navigateurs les plus utilises(Internet Explorer, Firefox, Opera . . . ). Pour la deuxiemme soutenance, nousavions regles quelques bugs d’affichage sur IE.

Pour les parties dynamiques, nous utilisons le PHP. Nous avons tout d’aborddeveloppe une interface complete d’administration ainsi qu’un module de newsgenerant egalement un flux RSS.

Entre les differentes soutenances nous avons regulierement mis a jours notresite (news, screenshots, rapports et binaires du projet) ?.

10.3 O.C.R. . . En ligne ! (Pierre-Lou)

Vous en reviez ? nous l’avons fait !

En effet, notre O.C.R est directement utilisable depuis n’importe quel navi-gateur internet et donc depuis n’importe quel systeme d’exploitation.

Il est par exemple possible de prendre une photo depuis un PocketPC, unSmartphone, un Iphone...et de faire fonctionner notre O.C.R. dessus, sans rien

Team LinkFly 43

Page 44: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

avoir a installer sur la machine !

Techniquement, une version legerement modifiee de notre O.C.R. est ins-tallee en mode console sur une machine reliee a internet et disposant d’un ser-veur web. Un script ecrit en PHP fait la relation entre l’utilisateur et le binairede notre O.C.R. L’image de l’utilisateur est chargee sur le serveur, transmise anotre binaire. Le binaire traite l’image et sauvegarde les resultats. Les resultatssont transmis a l’utilisateur via l’inteface dediee.

Pour la soutenance finale, nous avons mis a jours l’O.C.R. en ligne pour queson comportement soit identique au binaire pour FreeBSD.

Team LinkFly 44

Page 45: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Facebook !

Nous avons cree une application facebook. Celle ci permet a la fois de testeren ligne notre OCR mais elle permet aussi a tout facebooker d’ajouter un cadredans sa page pour faire de la « pub »pour PicToChar.

Team LinkFly 45

Page 46: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

10.4 La jaquette (Elodie)

Cette jaquette de toute beaute a ete faite en respectant la chartre graphiquedu projet, a l’aide du logiciel photoshop.

Elle reprend l’idee de lergertee et de simplicite d’utilisation de notre logiciel !

Team LinkFly 46

Page 47: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Conclusion

Au niveau de l’avancement global du projet, nous sommes plutot satisfaient :

nous disposons d’un pre-traitement d’image fini, afin de partir sur de bonnesbases, a savoir le chargement de l’image, l’application des filtres de gommageet de contraste, ainsi que la rotation de l’image.

Le decoupage est operationnel. De plus notre super-structure est au point.De ce fait notre rendu HTML a ete concu dans de bonne conditions et est tressatisfaisant.

Nous avons un reseau de neurones, il fonction parfaitement sur des XOR,notre seule petite deception dans ce projet vient du fait que nous n’avons paspu l’integrer pleinement a notre OCR.

Nous disposons d’une interface graphique terminee gerant les images in-termediaires, le fichiers tex et texte, la compilation en pdf.

Notre site internet est a jour, l’OCR en ligne permet a tout possesseur d’uneconnexion internet de profiter de notre logiciel. Il commence a se faire connaıtresur facebook, nous sommes pret a conquerire le monde !

Pour conclure, nous sommes tous les quatres satisfaits du travail realise carce projet nous aura beaucoups aporte dans nos conaissances en reconnaisancede caracteres mais aussi et surtout dans les langages tels que le C et le CAML.

Team LinkFly 47

Page 48: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

Annexes

1 - Organigramme de l’algo de decoupage

Team LinkFly 48

Page 49: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

2 - Croquis relatif au site internet de pictochar

Team LinkFly 49

Page 50: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

3 - Code d’un neurone

c l a s s neuron nbweight =object

val mutable output : f l o a t = 0 .val mutable d e l t a : f l o a t = 0 .val mutable tab weight : f l o a t array =

Array . i n i t ( nbweight +1) ( fun dtc −> Random . f l o a t 1 . )

method get tab weight = tab weightmethod get output = outputmethod g e t d e l t a = d e l t a

method s e t t a b w e i g h t pos value = tab weight . ( pos ) <− valuemethod s e t o u t p u t x = output <− xmethod s e t d e l t a x = d e l t a <− xmethod c a l c o u t t a b i n pu t =

l e t rez = r e f 0 . in( for i = 0 to nbweight do

begini f i = nbweight then

rez := ! rez +. tab weight . ( i )e lse

rez := ! rez +. tab weight . ( i ) ∗ . t ab i n pu t . ( i )end

done ) ;output <− 1 . / . ( 1 . + . exp ( − . ( ! rez ) ) )

end

Team LinkFly 50

Page 51: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

4 - Code d’une couche

c l a s s l a y e r nbneuron nbweight =object

val mutable tab neuron = Array . i n i t nbneuron( fun smb −> new neuron nbweight )

val mutable tab out = Array . make nbneuron 0 .

method get tab neuron = tab neuronmethod g e t t a b o u t = tab out

method s e t t ab n eu r on pos neuron = tab neuron . ( pos ) <− neuronmethod s e t t a b o u t pos value = tab out . ( pos ) <− value

method update layer t a b i n pu t =for i = 0 to ( nbneuron −1) do

tab neuron . ( i )# c a l c o u t t a b i n pu tdone

method f i l l t a b o u t =for i = 0 to ( nbneuron −1) do

tab out . ( i ) <− tab neuron . ( i )# get outputdone

end

Team LinkFly 51

Page 52: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

5 - Code de notre reseau

La methode learn n’a pas ete incluse, elle est disponible, entre autre, sur notre siteweb.

c l a s s network nb input tab nbneuron =object ( s e l f )

val mutable t a b l a y e r =l e t prev = r e f nb input in

Array . map( fun nbneuron −>

l e t r es = new l a y e r nbneuron ! prev inprev := nbneuron ;r es

) tab nbneuronval mutable t r e s h o l d = 0 . 1val mutable e r r o r = 0 .val mutable d e l t a = 0 .

method g e t d e l t a = d e l t amethod g e t t a b l a y e r = t a b l a y e rmethod g e t t r e s h o l d = t r e s h o l dmethod g e t e r r o r = e r r o r

method s e t d e l t a x = d e l t a <− xmethod s e t t a b l a y e r pos x = t a b l a y e r . ( pos ) <− xmethod s e t t r e s h o l d x = t r e s h o l d <− xmethod s e t e r r o r x = e r r o r <− x

method l e a rn l o c a l e r r tab exemple tab wai ted out

method u p d a t e t a b l a y e r t a b i n pu t =t a b l a y e r . ( 0 ) # update layer t a b i n pu t ;t a b l a y e r . ( 0 ) # f i l l t a b o u t ;for i = 1 to ( Array . length tab nbneuron −1) do

t a b l a y e r . ( i )# update layer t a b l a y e r . ( i −1)# g e t t a b o u t ;t a b l a y e r . ( i )# f i l l t a b o u t ;

doneend

Team LinkFly 52

Page 53: Rapport de Projet - Freelinkfly.free.fr/soutenance3.pdf · 2008-05-28 · Rapport de Projet 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est

Rapport de Projet

6 - Super Structure

/∗ Coordonnees du bloc e t c a r a c t e r e s contenus ∗/

s t r u c t s b l o c{

i n t pos x ;i n t pos y ;i n t width ;i n t heigth ;i n t p o l i c e ;

char ∗ l i s t c h a r ;} ;

Team LinkFly 53