IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 .NET Discussion :

Organisation program.cs


Sujet :

.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Organisation program.cs
    Bonjour à tous,

    Je travaille sur un projet qui permet de faire de l'OCR.
    J'utilise une librairie (tessnet2 qui utilise le moteur Tesseract-ocr).
    J'ai dans mon programme principal (program.cs) toutes les fonctions qui permettent de faire l'ocr.

    Je voudrais organiser tout cela et créer une autre classe qui:
    - permet de créer un constructeur qui initialise l'objet ocr
    - qui comporte des fonctions qui permettent le traitement de l'image et les regex

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading;
    using tessnet2;
    using System.Collections.ObjectModel;
     
    namespace ConsoleApplication1
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
                try
                {
                    //le fichier crée se trouve dans ConsoleApplication1/ConsoleApplication1/Bin/debug
                    //permet de convertir une image en ocr
                    // génère aussi un fichier texte contenant l'OCR                
     
    			    string projectFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase).Replace("file:\\", "");
                    string imgPath = Path.Combine(projectFolder, "img", "doc.tif"); //.jpg, .tiff, .bmp, .png
                    Bitmap image = new Bitmap(imgPath);
                    Tesseract ocr = new Tesseract(); 
     
     
                    // Vu comment fonctionnent les images dans ce projet, il faut les inclure (clic droit > inclure dans le projet) et les copier à la compilation (propriétés > copier si plus récent)
    				ocr.Init(Path.Combine(projectFolder, "tessdata"), "eng", false);                              
                    List<tessnet2.Word> result = ocr.DoOCR(image, System.Drawing.Rectangle.Empty);
                    string Results = ""; //initialisation de la variable à blanc pour pouvoir remplir sa valeur avec le texte
     
                    foreach (tessnet2.Word word in result)
                    {                    
                        Results += word.Text+ " ";
                    }
     
                    //c'est dans le fichier ocrTesting2 que le contenu de l'image de départ est créé
                    using (StreamWriter writer = new StreamWriter(@"ocrTesting2.txt", true))
                    {
                        writer.WriteLine(Results);
                        writer.Close();
                    }
                    Console.WriteLine("completed, go to ConsoleApplication1/ConsoleApplication1/bin/debug to see your text file");
     
     
                    //Test recherche    
     
                    /*cette méthode permet de rechercher toutes les occurences (chiffres) correspondant à l'expression régulière
                    On parcourt toutes les lignes pour vérifier l'existence d'un ou plusieurs chiffres
                    puis on affiche la position et le nombre de fois qu'on trouve le chiffre correspondant
                    Pour exemple, j'ai choisit de définir un regex qui permet de retrouver un chiffre codé sur 10 caractère (ex: 8745123698) dans le texte ocrTesting que l'on a généré*/
     
     
                    //condition vérifiant l'existence du fichier ocrTesting2.txt 
                    /* supprime le fichier texte s'il existe*/
     
                    StreamReader sr = new StreamReader(@"ocrTesting2.txt");
                    string input;
     
                    // il faut modifier le pattern en fonction du type de recherche que l'on veut effectuer
                    string pattern = @"\D+(\d{10,10})\D+";               
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
     
                    /*la méthode Match permet de rechercher toutes 
                    les occurences qui sont définies par l'expressions régulières*/
     
                    int matchCount = 0;
                    while (sr.Peek() >= 0)
                    {
                        input = sr.ReadLine();
                        Console.WriteLine("DEBUTLIGNE----------------------------------------------");
                        Console.WriteLine("Ligne:" + input);
                        Match m = rgx.Match(input);
                        while (m.Success)
                        {
                            Console.WriteLine("Match" + (++matchCount)); //on affiche le nombre de fois qu'on a trouvé le chiffre correspondant au pattern
                            for (int i = 1; i <= 2; i++)
                            {
                                Group g = m.Groups[i];
                                Console.WriteLine("Group" + i + "='" + g + "'");
                                CaptureCollection cc = g.Captures;
                                for (int j = 0; j < cc.Count; j++)
                                {
                                    Capture c = cc[j];
                                    System.Console.WriteLine("Capture" + j + "='" + c + "', Position=" + c.Index); //on affiche également la position (sur quelle ligne) se trouve le ou les chiffres
                                }
                            }
                            m = m.NextMatch();
                        }
                        Console.WriteLine("FINLIGNE------------------------------------------------");
                    }
                    sr.Close();
     			}              
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
    			Console.ReadLine();
            }         
     
        }
    }
    si vous avez des questions, n'hésitez pas !!

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    moi j'ai une question : c'est où que tu coinces ?
    Parce que découper tout ça pour faire une jolie classe y'a rien de méchant, il suffit (en gros) de :
    - déterminer les traitements d'initialisation -> constructeur,
    - déterminer les méthodes qui peuvent être appelées plusieurs fois -> fonctions membres,
    - déterminer les valeurs qui ne différent pas d'un appel à l'autre -> variables membres.
    Plus je connais de langages, plus j'aime le C.

Discussions similaires

  1. [TP]Pascal dvd records program
    Par int21h dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 16/12/2003, 02h47
  2. fragment program sur geForce4 Ti4200
    Par sebh dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/12/2003, 22h31
  3. [Packages] Problème d'organisation
    Par lolo... dans le forum JBuilder
    Réponses: 5
    Dernier message: 22/04/2003, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo