it-swarm.com.de

Tesseract OCR einfaches Beispiel

Hallo Kannst du mir jemand ein einfaches Beispiel geben, um Tesseract OCR zu testen, vorzugsweise in C #.
Ich habe versucht, die Demo gefunden hier . Ich lade den englischen Datensatz herunter und entpackte ihn in Laufwerk C. und modifizierte den Code wie folgt:

string path = @"C:\pic\mytext.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);

Leider funktioniert der Code nicht. Das Programm stirbt in der Zeile "ocr.Init (...". Ich konnte selbst mit try-catch nicht einmal eine Ausnahme erhalten.

Ich konnte den vietocr laufen lassen! Dies ist jedoch ein sehr großes Projekt, dem ich folgen werde. Ich brauche ein einfaches Beispiel wie oben. 

Vielen Dank

21
Will Robinson

OK. Ich habe die Lösung hier gefunden tessnet2 lädt Die von Adam angegebenen Ansagen nicht

Anscheinend habe ich eine falsche Version von Tessdata verwendet. Ich folgte der der Quellenseite Anweisung intuitiv und das verursachte das Problem. 

es sagt

Schnelle Tessnet2-Nutzung

  1. Laden Sie die Binärdatei hier herunter , fügen Sie Ihrem .NET-Projekt eine Referenz der Assembly Tessnet2.dll hinzu.

  2. Laden Sie die Sprachdaten-Definitionsdatei hier herunter und legen Sie sie im Verzeichnis tessdata ab. Das Tessdata-Verzeichnis und Ihr Exe müssen sich im .__ befinden. gleiches Verzeichnis.

Wenn Sie nach dem Download der Binärdatei dem Link zum Herunterladen der Sprachdatei folgen, gibt es viele Sprachdateien. aber keine davon ist die richtige Version. Sie müssen alle Versionen auswählen und zur nächsten Version wechseln (tesseract-2.00.de)! Sie sollten entweder den Download-Binär-Link auf Version 3 aktualisieren oder die Sprachdatei der Version 2 auf der ersten Seite speichern. Oder erwähnen Sie zumindest die Tatsache, dass diese Version eine große Sache ist!

Wie auch immer, ich habe es gefunden ... Vielen Dank an alle.

19
Will Robinson

Ein einfaches Beispiel für das Testen von 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: Der Ordner tessdata muss im Repository vorhanden sein: bin\Debug \

Ich konnte es schaffen, indem ich diese Anweisungen befolgte.

  • Laden Sie den Beispielcodeherunter. Tesseract sample code

  • Entpacken Sie es an einem neuen Ort

  • Öffnen Sie ~\tesseract-samples-master\src\Tesseract.Samples.sln (ich habe Visual Studio 2017 verwendet)

  • Installieren Sie das Tesseract-NuGet-Paket für dieses Projekt (oder deinstallieren/installieren Sie es wie erforderlich)  NuGet Tesseract

  • Kommentieren Sie die letzten beiden sinnvollen Zeilen in Tesseract.Samples.Program.cs: Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

  • Run (drücke F5)

  • Sie sollten diese Windows-Konsolenausgabe erhalten  enter image description here

1
Doppelganger

Aktualisieren Sie die Zeile mit:

ocr.Init (@ "C: \", "eng", false); // Der Pfad hier sollte der übergeordnete Ordner von Tessdata sein

1
Rachel

Das funktionierte für mich, ich hatte noch 3-4 weitere PDF zum Text-Extractor und wenn einer nicht funktioniert, wird der andere ... Tesseract insbesondere dieser Code unter Windows 7, 8, Server 2008 verwendet werden. Hoffe das ist hilfreich für dich

    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
Kaushal B

Hier ist ein großartiges Arbeitsbeispielprojekt; Tesseract-OCR-Beispiel (Visual Studio) mit Leptonica-Vorverarbeitung Tesseract-OCR-Beispiel (Visual Studio) mit Leptonica-Vorverarbeitung

Die Tesseract OCR 3.02.02-API kann verwirrend sein, sodass Sie durch die Einbindung der DLL Tesseract und Leptonica in ein Visual Studio C++ - Projekt geleitet werden und eine Beispieldatei bereitgestellt wird, die einen Bildpfad für die Vorverarbeitung und OCR verwendet. Das Vorverarbeitungsskript in Leptonica konvertiert das Eingabebild in einen schwarzen und weißen buchartigen Text.

Konfiguration

Um dies in Ihre eigenen Projekte aufzunehmen, müssen Sie auf die Header-Dateien und die Bibliothek lib verweisen und die tessdata-Ordner und -Dlls kopieren.

Kopieren Sie den Tesseract-Include-Ordner in den Stammordner Ihres Projekts. Klicken Sie jetzt im Projektmappen-Explorer von Visual Studio auf Ihr Projekt und wählen Sie Projekt> Eigenschaften.

VC++ - Verzeichnisse> Include-Verzeichnisse:

..\tesseract-include\tesseract; ..\tesseract-include\leptonica; $ (IncludePath) C/C++> Präprozessor> Präprozessor Definitionen:

_CRT_SECURE_NO_WARNINGS;% (PreprocessorDefinitions) C/C++> Linker> Eingabe> Weitere Abhängigkeiten:

..\tesseract-include\libtesseract302.lib; ..\tesseract-include\liblept168.lib;% (AdditionalDependencies) Jetzt können Sie Header in die Projektdatei einfügen:

umfassen 

umfassen 

Kopieren Sie nun die beiden DLL-Dateien in Tesseract-include und den Tessdata-Ordner in Debug in das Ausgabeverzeichnis Ihres Projekts.

Wenn Sie Tesseract initialisieren, müssen Sie den Speicherort des übergeordneten Ordners (! Important) des Tessdata-Ordners angeben, sofern es sich nicht bereits um das aktuelle Verzeichnis Ihrer ausführbaren Datei handelt. Sie können mein Skript kopieren, das davon ausgeht, dass tessdata im Ordner der ausführbaren Datei installiert ist.

tesseract :: TessBaseAPI * api = neuer tesseract :: TessBaseAPI (); api-> Init ("D:\tessdataParentFolder \", ... Beispiel

Sie können das bereitgestellte Beispiel kompilieren, das ein Befehlszeilenargument des Image-Pfads benötigt. Die preprocess () - Funktion erstellt mit Leptonica eine schwarz-weiße, buchähnliche Kopie des Bildes, wodurch der Tesseract mit einer Genauigkeit von 90% arbeitet. Die Funktion ocr () zeigt die Funktionalität der Tesseract-API zur Ausgabe einer Zeichenfolgenausgabe. Mit dem toClipboard () kann Text unter Windows in der Zwischenablage gespeichert werden. Sie können diese in Ihre eigenen Projekte kopieren.

0
Alex G

Ich hatte dasselbe Problem, jetzt ist es gelöst. Ich habe Tesseract2, unter diesen Ordnern für 32 Bit und 64 Bit habe ich Dateien 64-Bit-Ordner (da mein System 64 Bit ist) in den Hauptordner ("Tesseract2") und unter bin/Debug-Ordner kopiert. Jetzt funktioniert meine Lösung gut.

0
Prasad

In meinem Fall hatte ich alle abgesehen von der korrekten Zeichenerkennung. 

Aber Sie müssen diese wenigen Dinge beachten:

  • Verwenden Sie die korrekte Tessnet2-Bibliothek
  • verwenden Sie die korrekte Tessdata-Sprachversion
  • tessdata sollte sich irgendwo außerhalb Ihres Anwendungsordners befinden, wo Sie den vollständigen Pfad in den init-Parameter eingeben können. benutze ocr.Init(@"c:\tessdata", "eng", true);
  • Debugging verursacht Kopfschmerzen. Dann müssen Sie Ihre app.config Aktualisieren. Verwenden Sie diese. (Ich kann den XML-Code nicht hier eingeben. Geben Sie mir Ihre E-Mail, die ich Ihnen per E-Mail zusenden werde)

hoffe das hilft

0
Muadzir Aziz