Tesseract OCR exemple simple

Bonjour, vous pouvez me donner un exemple simple de testing Tesseract OCR de préférence en C#.

J'ai essayé la démo trouvé ici. Je télécharge l'ensemble de données en anglais et décompresse le lecteur C. et modifié le code comme suit:

string path = @"C:picmytext.jpg";
Bitmap image = new Bitmap(path);
Tesseract ocr = new Tesseract();
ocr.SetVariable("tessedit_char_whitelist", "0123456789"); // If digit only
ocr.Init(@"C:tessdata", "eng", false); // To use correct tessdata
List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);
foreach (tessnet2.Word word in result)
    Console.WriteLine("{0} : {1}", word.Confidence, word.Text);

Malheureusement, le code ne fonctionne pas. le programme meurt au "roc.Initialisation.(.." ligne. Je n'ai même pas pu obtenir une exception en utilisant try-catch.

j'ai été en mesure d'exécuter le vietocr! mais c'est une très grand projet pour moi de suivre. j'ai besoin d'un exemple simple comme ci-dessus.

Merci

17
demandé sur Daniel Li 2013-05-17 02:14:54

8 réponses

un exemple simple de testing Tesseract OCR in C#:

    public static string GetText(Bitmap imgsource)
    {
        var ocrtext = string.Empty;
        using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
        {
            using (var img = PixConverter.ToPix(imgsource))
            {
                using (var page = engine.Process(img))
                {
                    ocrtext = page.GetText();
                }
            }
        }

        return ocrtext;
    }

Info: The tessdata le dossier doit exister dans le dépôt: bin\Debug\

2
répondu Adolfo Alejandro Araya 2016-10-04 13:34:13

Essayez de mettre à jour la ligne:

ocr.Init(@"C:\", "fr", false); // le chemin ici devrait être le dossier parent de tessdata

1
répondu Rachel 2013-05-17 08:12:08

j'ai eu le même problème, maintenant c'est résolu. J'ai tesseract2, sous ces dossiers pour 32 bits et 64 bits, j'ai copié des fichiers 64 bits(comme mon système est 64 bits) dans le dossier principal ("Tesseract2") et sous bin/Debug. Maintenant ma solution fonctionne bien.

0
répondu Prasad 2013-12-17 06:46:26

dans mon cas, j'ai tout fait fonctionner, sauf pour la reconnaissance correcte des caractères.

mais vous devez considérer ces quelques choses:

  • Utilisation correcte tessnet2 bibliothèque
  • utilisation correcte tessdata version en langue
  • tessdata devrait être quelque part à l'extérieur de votre dossier d'application où vous pouvez mettre le chemin complet dans le paramètre init. utilisez ocr.Init(@"c:\tessdata", "eng", true);
  • le débogage vous causera des maux de tête. Ensuite, vous devez mettre à jour votre application.config utiliser ce. (Je ne peux pas mettre le code xml ici. donnez-moi votre mail, je vous l'enverrons par courriel)

j'espère que cela aide

0
répondu Muadzir Aziz 2015-04-10 07:28:33

Voici un excellent exemple de travail du projet; Tesseract OCR Échantillon (Visual Studio) avec Leptonica Prétraitement Tesseract OCR Sample (Visual Studio) avec prétraitement de Leptonica

Tesseract OCR 3.02.02 L'API peut être confuse, donc cela vous guide à travers l'inclusion de la dll Tesseract et Leptonica dans un projet C++ de studio visuel, et fournit un fichier d'échantillon qui prend un chemin d'image au préprocessus et OCR. Le script de prétraitement de Leptonica convertit l'entrée l'image en texte noir et blanc ressemblant à un livre.

Setup

pour inclure ceci dans vos propres projets, vous devrez faire référence aux fichiers d'en-tête Et lib et copier les dossiers tessdata et dlls.

Copiez le dossier Tesseract-include dans le dossier racine de votre projet. Maintenant, cliquez sur votre projet dans Visual Studio Solution Explorer, et allez à Projet>Propriétés.

répertoires VC++ > Include Annuaires:

..\Tesseract-include\tesseract;..\tesseract-include\leptonica;$(IncludePath) C / C++>Préprocesseur>Définitions De Préprocesseur:

_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) C/C++>Linker>Entrée>Dépendances Supplémentaires:

..\tesseract-include\libtesseract302.lib;..\tesseract-include\liblept168.lib;%(AdditionalDependencies) Vous pouvez maintenant inclure des en-têtes dans le fichier de votre projet:

include

inclure

maintenant, copiez les deux fichiers dll dans tesseract-include et le dossier tessdata dans Debug dans le répertoire de sortie de votre projet.

lorsque vous initialisez tesseract, vous devez spécifier l'emplacement du dossier parent (!important) du dossier tessdata si ce n'est pas déjà le répertoire courant de votre fichier exécutable. Vous pouvez copier mon script, qui suppose tessdata est installé dans le dossier de l'exécutable.

tesseract:: TessBaseAPI * api = new tesseract:: TessBaseAPI(); api - > Init("D:\tessdataParentFolder\",... Taille de l'échantillon

vous pouvez compiler l'échantillon fourni, qui prend un argument de ligne de commande du chemin d'image à utiliser. La fonction preprocess () utilise Leptonica pour créer une copie en noir et blanc de l'image qui fait fonctionner tesseract avec une précision de 90%. La fonction ocr () affiche la fonctionnalité de L'API Tesseract pour retourner une chaîne de caractères. Le toClipboard () peut être utilisé pour sauvegarder du texte dans le presse-papier sous Windows. Vous pouvez copier dans vos propres projets.

0
répondu Alex G 2016-07-08 13:39:07

j'ai été en mesure de le faire fonctionner par la suite de ces instructions.

  • Télécharger exemple de code Tesseract sample code

  • Décompressez-le à un nouvel emplacement

  • Ouvrir ~\tesseract-échantillons-master\src\Tesseract.Échantillon.sln (j'ai utilisé Visual Studio 2017)

  • installer le paquet NuGet de Tesseract pour ce projet (ou désinstaller/réinstaller comme j'avais de) NuGet Tesseract

  • décommentez les deux dernières lignes significatives de Tesseract.Échantillon.Programme.cs: Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

  • Exécuter (touche F5)

  • Vous devriez obtenir cette sortie de console windows enter image description here

0
répondu Doppelganger 2018-01-23 14:02:24

cela a fonctionné pour moi, j'ai eu 3-4 Plus PDF à extracteur de texte et si l'un ne fonctionne pas l'autre sera ... tesseract en particulier ce code peut être utilisé sur Windows 7, 8, Server 2008 . Espérons que cela est utile pour vous

    do
    {
    // Sleep or Pause the Thread for 1 sec, if service is running too fast...
    Thread.Sleep(millisecondsTimeout: 1000);
    Guid tempGuid = ToSeqGuid();
    string newFileName = tempGuid.ToString().Split('-')[0];
    string outputFileName = appPath + "\pdf2png\" + fileNameithoutExtension + "-" + newFileName +
                            ".png";
    extractor.SaveCurrentImageToFile(outputFileName, ImageFormat.Png);
    // Create text file here using Tesseract
    foreach (var file in Directory.GetFiles(appPath + "\pdf2png"))
    {
        try
        {
            var pngFileName = Path.GetFileNameWithoutExtension(file);
            string[] myArguments =
            {
                "/C tesseract ", file,
                " " + appPath + "\png2text\" + pngFileName
            }; // /C for closing process automatically whent completes
            string strParam = String.Join(" ", myArguments);

            var myCmdProcess = new Process();
            var theProcess = new ProcessStartInfo("cmd.exe", strParam)
            {
                CreateNoWindow = true,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                WindowStyle = ProcessWindowStyle.Minimized
            }; // Keep the cmd.exe window minimized
            myCmdProcess.StartInfo = theProcess;
            myCmdProcess.Exited += myCmdProcess_Exited;
            myCmdProcess.Start();

            //if (process)
            {
                /*
                MessageBox.Show("cmd.exe process started: " + Environment.NewLine +
                                "Process Name: " + myCmdProcess.ProcessName +
                                Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                + Environment.NewLine + "process.Handle: " +
                                myCmdProcess.Handle);
                */
                Process.EnterDebugMode();
                //ShowWindow(hWnd: process.Handle, nCmdShow: 2);
                /*
                MessageBox.Show("After EnterDebugMode() cmd.exe process Exited: " +
                                Environment.NewLine +
                                "Process Name: " + myCmdProcess.ProcessName +
                                Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                + Environment.NewLine + "process.Handle: " +
                                myCmdProcess.Handle);
                */
                myCmdProcess.WaitForExit(60000);
                /*
                MessageBox.Show("After WaitForExit() cmd.exe process Exited: " +
                                Environment.NewLine +
                                "Process Name: " + myCmdProcess.ProcessName +
                                Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                + Environment.NewLine + "process.Handle: " +
                                myCmdProcess.Handle);
                */
                myCmdProcess.Refresh();
                Process.LeaveDebugMode();
                //myCmdProcess.Dispose();
                /*
                MessageBox.Show("After LeaveDebugMode() cmd.exe process Exited: " +
                                Environment.NewLine);
                */
            }


            //process.Kill();
            // Waits for the process to complete task and exites automatically
            Thread.Sleep(millisecondsTimeout: 1000);

            // This works fine in Windows 7 Environment, and not in Windows 8
            // Try following code block
            // Check, if process is not comletey exited

            if (!myCmdProcess.HasExited)
            {
                //process.WaitForExit(2000); // Try to wait for exit 2 more seconds
                /*
                MessageBox.Show(" Process of cmd.exe was exited by WaitForExit(); Method " +
                                Environment.NewLine);
                */
                try
                {
                    // If not, then Kill the process
                    myCmdProcess.Kill();
                    //myCmdProcess.Dispose();
                    //if (!myCmdProcess.HasExited)
                    //{
                    //    myCmdProcess.Kill();
                    //}

                    MessageBox.Show(" Process of cmd.exe exited ( Killed ) successfully " +
                                    Environment.NewLine);
                }
                catch (System.ComponentModel.Win32Exception ex)
                {
                    MessageBox.Show(
                        " Exception: System.ComponentModel.Win32Exception " +
                        ex.ErrorCode + Environment.NewLine);
                }
                catch (NotSupportedException notSupporEx)
                {
                    MessageBox.Show(" Exception: NotSupportedException " +
                                    notSupporEx.Message +
                                    Environment.NewLine);
                }
                catch (InvalidOperationException invalidOperation)
                {
                    MessageBox.Show(
                        " Exception: InvalidOperationException " +
                        invalidOperation.Message + Environment.NewLine);
                    foreach (
                        var textFile in Directory.GetFiles(appPath + "\png2text", "*.txt",
                            SearchOption.AllDirectories))
                    {
                        loggingInfo += textFile +
                                       " In Reading Text from generated text file by Tesseract " +
                                       Environment.NewLine;
                        strBldr.Append(File.ReadAllText(textFile));
                    }
                    // Delete text file after reading text here
                    Directory.GetFiles(appPath + "\pdf2png").ToList().ForEach(File.Delete);
                    Directory.GetFiles(appPath + "\png2text").ToList().ForEach(File.Delete);
                }
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show(
                " Cought Exception in Generating image do{...}while{...} function " +
                Environment.NewLine + exception.Message + Environment.NewLine);
        }
    }
    // Delete png image here
    Directory.GetFiles(appPath + "\pdf2png").ToList().ForEach(File.Delete);
    Thread.Sleep(millisecondsTimeout: 1000);
    // Read text from text file here
    foreach (var textFile in Directory.GetFiles(appPath + "\png2text", "*.txt",
        SearchOption.AllDirectories))
    {
        loggingInfo += textFile +
                       " In Reading Text from generated text file by Tesseract " +
                       Environment.NewLine;
        strBldr.Append(File.ReadAllText(textFile));
    }
    // Delete text file after reading text here
    Directory.GetFiles(appPath + "\png2text").ToList().ForEach(File.Delete);
} while (extractor.GetNextImage()); // Advance image enumeration... 
0
répondu Kaushal B 2018-08-20 08:20:29