32
Rapport de Soutenance 2 Kevin Gast Malik Baba A¨ ıssa Elodie Ralambosoa Pierre-Lou Dominjon 1

Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

Kevin GastMalik Baba Aıssa

Elodie RalambosoaPierre-Lou Dominjon

1

Page 2: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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 Le site web 83.1 Charte graphique, HTML, CSS, PHP. . . . . . . . . . . . . . . . . . 83.2 O.C.R. . . En ligne ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.3 Taches a effectuer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4 Communication C/Caml 114.1 Module bigarray . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Du C dans Caml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5 Representation des donnees dans PicToChar 125.1 Les images intermediaires . . . . . . . . . . . . . . . . . . . . . . . 125.2 Les caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.3 Resultat HTML, simple texte et autres . . . . . . . . . . . . . . . . 125.4 Superstructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

6 Detection et decoupage 146.1 Blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146.2 Lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156.3 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

7 Squelettisation 187.1 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187.2 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197.3 Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Team LinkFly 2

Page 3: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

8 Interface graphique 218.1 L’affichage des etapes . . . . . . . . . . . . . . . . . . . . . . . . . . 218.2 La gestion des fichiers texte et les onglets . . . . . . . . . . . . . . 228.3 La finition de l’interface graphique . . . . . . . . . . . . . . . . . . 22

9 Reseau neuronal 239.1 Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

9.1.1 Neurones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239.1.2 Couches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239.1.3 reseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

9.2 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Conclusion 26

Annexes 271 - Organigramme de l’algo de decoupage . . . . . . . . . . . . . . . . . 272 - Nos autres filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 - Code d’un neurone . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 - Code d’une couche . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 - Code de notre reseau . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 - Super Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Team LinkFly 3

Page 4: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

Introduction

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

Pour rappel, le projet ”PicToChar” que nous avons choisi et que nous allonspresenter est un OCR (Optical Character Recognition), ou ROC (ReconnaissanceOptique de Caracteres). La creation d’un OCR etait a nos yeux le projet le plusinteressant, qui abordait des domaines dans lesquels nous desirions approfon-dir nos connaissances.

A ce stade du projet, nous avons eu l’occasion d’en decouvrir tous les as-pects ou presque, certains restants encore a explorer plus que d’autres.

Dans ce rapport, nous allons tout d’abord vous representer l’equipe ainsique notre planning (en particulier, qui fait quoi). Dans la suite du rapport, vousdecouvrirez les developpements realises depuis la premiere soutenance.

Sur ce, bonne lecture !

Team LinkFly 4

Page 5: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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 Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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 Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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 Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

3 Le site web

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

3.1 Charte graphique, HTML, CSS, PHP. . .

Pour cette soutenance, nous avons biensur mis a jour le site : nouveaux liens,nouvelles news, nouveaux telechargements et apparition de la page screenshotsentre autre.

Graphiquement, rien de nouveau pour cette soutenance, le travail realise parElodie etant tres profesionnel et convenant a tous les membres de la team.

Nous sommes tous impatients de voir ses talents de graphistes sur la po-chette et le livret de notre futur O.C.R. !

Pour finir, le site n’etait pas parfait graphiquement sur Internet Explorer,c’est maintenant du passe quelle que soit la version du navigateur.

Team LinkFly 8

Page 9: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

3.2 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 rienavoir 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.

Team LinkFly 9

Page 10: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

3.3 Taches a effectuer

Pour la partie O.C.R. en ligne, il faudra modifier un petit peu notre codepour afficher le code HTML du resultat du notre O.C.R.

De plus, nous continuerons a mettre regulierement a jour notre site web.

Team LinkFly 10

Page 11: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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

4.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.

4.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 11

Page 12: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

5 Representation des donnees dans PicToChar

5.1 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.

5.2 Les caracteres

Nous pensions initialement utiliser une matrice 20*20 pour representer lescaracteres, mais nous nous sommes finalement rendu compte qu’une matrice10*10 suffirait largement.Nous pensions egalement fournir directement a notre neurone cette matrice. Aufinal, nous lui fournirons un tableau qui est en quelque sorte une concatenationdes lignes de la matrice.Les deformations dues au redimensionnement 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.

5.3 Resultat HTML, simple texte et autres

Au final, notre programme renverra un resultat sous forme de page HTML.Cette page sera 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 pourra egalement exporter dans d’autres formats, comme letexte simple, et plus si le temps nous le permet !

Team LinkFly 12

Page 13: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

5.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– Une file contenant les caracteres contenus dans le blocLe numero du bloc correspond au numero de la case du vecteur qu’il occupe.

Pour la file contenant les caracteres, nous avons implemente les files a l’aidede listes chaınees. La file est efficace dans le sens ou c’est une structure FIFO(First In First Out). Ainsi le premier caractere du bloc qui sera detecte sera aussile premier caractere a etre affiche. Cette manoeuvre va nous permettre par lasuite un gain de temps considerable puisque l’acces aux caracteres et a leur po-sitions est facilite par l’utilisation des files dans la structure.

Le code de la structure se trouve en annexe.

Team LinkFly 13

Page 14: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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. On apelle donc l’algorithmede decoupage des lignes sur ce bloc.

Team LinkFly 14

Page 15: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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. S’aly 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

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 leur

Team LinkFly 15

Page 16: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

decoupage 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 16

Page 17: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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.

Team LinkFly 17

Page 18: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

7 Squelettisation (Pierre-Lou)

7.1 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 18

Page 19: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

7.2 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 19

Page 20: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

7.3 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 !

Nos filtres de premiere soutenance se trouvent en annexe 2

Team LinkFly 20

Page 21: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

8 Interface graphique (Malik)

Pour cette soutenance nous avons fait evoluer l’interface graphique en memetemps que notre maniere de voir les choses dans le projet. En effet, une fois lespretraitements finis, l’utilisateur voulait peut-etre verifier que les changementseffectues sur l’image s’etaient bien deroules. Nous avons donc fait en sorte quece dernier puisse etre satisfait en creant des boutons permettant l’affichage desdifferentes etapes du programme.

Nous avons de plus ajoute de nouveaux types de sauvegarde pour les fi-chiers texte.

8.1 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)

Team LinkFly 21

Page 22: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

8.2 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.

8.3 La finition de l’interface graphique

Afin de completer notre interface graphique, nous creerons dans un pro-chain temps de nouvelles fonctions plus ou moins utiles mais toujoursesthetiques. La premiere et la plus importante de ces fonctions sera le fait deforker le programme lorsqu’on lance son execution dans l’interface afin de pou-voir executer la seconde fonction, suite logique de la precedente, sera l’appa-rition d’une barre de chargement lors du lancement du programme avec af-fichage des traitements en cours ainsi qu’un pourcentage. En effet nous noussommes dit que l’utilisateur n’etait pas cense pouvoir toucher a l’interface pen-dant l’execution du programme.

Une derniere fonction permettrait de desactiver ou reactiver la rotation se-lon les besoins de l’utilisateur et ce sous forme d’un bouton. Enfin un dernierbouton permettra de passer d’un rendu textuel a un rendu html avec le choixdu repertoire de sauvegarde encore une fois.

Team LinkFly 22

Page 23: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

9 Reseau neuronal (Kevin)

9.1 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.1.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

9.1.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 :

Team LinkFly 23

Page 24: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

– 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.1.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 24

Page 25: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

9.2 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 nombre d’entreespassees en parametre a notre reseau, le nombre de neurones sur la couche in-termediaire etant de trente et ce meme nombre pour la derniere couche devantetre equivalent au nombre de valeurs de sorties possibles a determiner. Ces va-leurs ayant ete determinees empiriquement apres de nombreux tests.

Team LinkFly 25

Page 26: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

Conclusion

Au niveau de l’avancement du projet ,nous pouvons dire que nous sommesdans les temps :

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, il ne reste plus qu’a preciser et calculer plusprecisement les constantes (a partir de combien de pixels blancs je considereque la zone a change, entre autres). De plus notre super-structure est au point.

Nous avons un reseau de neurones, il ne nous reste plus qu’a l’utiliser et ale mettre en relation avec le reste du projet.

Nous disposons d’une interface graphique quasiment terminee gerant lesimages intermediaires.

Notre site internet est a jour, l’OCR en ligne permet a tout possesseur d’uneconnexion internet de profiter de notre logiciel.

Pour la prochaine soutenance, notre objectif sera d’achever notre programme !Pour cela il nous faudra mettre en relation le reseau de neurones et le reste duprojet, optimiser certains algorithmes et surtout, creer une jolie boıte, une docu-mentation digne de ce nom et ... dominer le monde !

Pour conclure, nous sommes tous les quatres satisfaits du travail realise, etnous sommes plutot confiants compte tenu de l’avancement actuel du projet.

Comme on dit chez nous, a la prochaine, he biloute !

Team LinkFly 26

Page 27: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

Annexes

1 - Organigramme de l’algo de decoupage

Team LinkFly 27

Page 28: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

2 - Nos autres filtres

Team LinkFly 28

Page 29: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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 29

Page 30: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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 30

Page 31: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

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 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 31

Page 32: Rapport de Soutenance 2linkfly.free.fr/soutenance2.pdfRapport de Soutenance 2 1.3 Kevin´ Slytink, tres grand timide et romantique` pronant la paix dans le monde. C’est un jeuneˆ

Rapport de Soutenance 2

6 - Super Structure

/∗ f i l e s avec l e s c a r a c t e r e s d ’ un bloc∗/

typedef s t r u c t s f i l e t f i l e ;

s t r u c t s f i l e{

char my char ;s t r u c t s f i l e ∗next ;

} ;

/∗ 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 ;

t f i l e ∗ l i s t c h a r ;} ;

typedef s t r u c t s b l o c ∗ t b l o c ;

/∗ vecteur pointant sur l e s s t r u c t u r e s s b l o c ∗/

t b l o c ∗ v e c t b l o c s ;

Team LinkFly 32