OCR Tesseract Wrapper

Maddin

Mitglied
Hiho,

ich programmiere aktuell ein Programm, welches mir aus einem Bild bestimmte Informationen auslesen soll.
Dafür verwende ich Tesseract, die OCR-Engine von Google.

Nun bin ich auf der Suche nach einem Wrapper.

Bisher habe ich es mit tessnet2 zum Laufen gebracht, jedoch liefert mir das immer wieder falsche Ausgaben.
Der tesseractdotnet Wrapper ist auch nicht wirklich zufriedenstellend, da man dafür noch sehr viel selbst implementieren muss.

Bestenfalls sollte der Wrapper so simpel sein wie tessnet2 (ein init am Anfang und ein "doOcr" zum Erhalt des Ergebnis), dabei aber für die neueste Tesseract Version 3 funktionieren und natürlich keine fehlerhaften Ausgaben liefern.


Kennt jemand einen guten Wrapper oder hat Tips für mich?


Gruß

Martin
 
Was für daten benötigst du denn wenn du schnell Pixeldaten benötigst ist vieleicht eine alte Klasse von mir intressant sie schreibt zwar nur aber anderes herum solte es auch funktionieren du must sie nur etwas anpassen.


Code:
namespace Bilder_erstellen
{
    
    class daten
    {
        private byte[] bildDaten;
        private int stride = 30000;
        private int height = 5150;
        private int width = 55858;
        private int bytes;
        
        Rectangle rect;
        Bitmap Bild;
        public daten(int x,int y)
        {
            height = y;
            width = x;
            Bild = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            

            rect = new Rectangle(0, 0, width, height);
            System.Drawing.Imaging.BitmapData bmpData =Bild.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly,Bild.PixelFormat);
            
            IntPtr ptr = bmpData.Scan0;
            stride = bmpData.Stride;
            bytes = stride * height;
            
            bildDaten = new byte[bytes];
            
            System.Runtime.InteropServices.Marshal.Copy(ptr, bildDaten, 0, bytes);
            Bild.UnlockBits(bmpData);
            //Bild.Dispose();
            

            //bildDaten = new byte[154500000];
            //bytes = 154500000;
        //    System.Runtime.InteropServices.Marshal.Copy(ptr, bildDaten, 0, bytes);
        }
        public void neuer_punkt(int x, int y,byte r,byte g,byte b)
        {
           bildDaten[y * stride + x * 3 + 2] = 0;
           bildDaten[y * stride + x * 3 + 1] = 255;
           bildDaten[y * stride + x * 3] = 0;
        }

        public Bitmap Bild_zusammenstellen()
        {
          //  bildDaten = null;
          //  System.GC.Collect();
          //  System.GC.WaitForPendingFinalizers();
            //Bild = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            //Bild = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);


            //rect = new Rectangle(0, 0, width, height);
           

            System.Drawing.Imaging.BitmapData bmpData =
              Bild.LockBits(rect, System.Drawing.Imaging.ImageLockMode.WriteOnly,
              Bild.PixelFormat);
            IntPtr ptr = bmpData.Scan0;
            System.Runtime.InteropServices.Marshal.Copy(bildDaten, 0, ptr, bytes);
            Bild.UnlockBits(bmpData);
           
            return Bild;

           // return Bild;
           // throw new System.ArgumentException("Parameter cannot be null", "original");
        }
    }
}
 
Hi Faller,

danke für die Antwort!

Das Bild ist im Wesentlichen eine eingescannte Rechnung.
Auslesen will ich daraus den Text an einer vorgegebenen Position.

Mit Tesseract lässt sich das auch gut bewerkstelligen, man kann sich bspw. ein HTML-Document ausgeben lassen, in dem der Text mit Position angegeben ist.

Mein Problem ist dabei, dass ich die OCR-Engine nicht so ganz in mein Programm integriert kriege, mir fehlt der Wrapper.

Aktuell habe ich es noch so "gelöst", dass ich Tesseract über die Kommandokonsole durchlaufen lasse und mir dann die generierte Datei auslese. Das ist allerdings wenig schön und ich hätte die Engine gerne direkt im Programm.


Gruß
Martin
 
Hallo,

ich habe mein Problem jetzt so gelöst, dass ich auf Java umgestiegen bin und den Tess4J-Wrapper verwende (welcher zudem durch GhostScript PDF-Funktionalität, auch multipage, mitliefert).

Weitere Wrapper finden sich auf der Tesseract-Seite. Als .Net Wrapper wird häufig tesseractdotnet empfohlen, den finde ich persönlich allerdings recht kompliziert.

Gruß
Martin
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück