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();
}
}
} |
Partager