C# MODI - Parameter ändern

Thomas95

Cadet 3rd Year
Registriert
Dez. 2012
Beiträge
46
Hey Leute :)

Ich schreibe momentan ein Programm (C# WPF), dass Bilder von bestimmten Dokumenten verarbeitet und unter anderem den Text auf den Bildern (Gescannte Dokumente) erkennt.

Zum erkennen der Text verwende ich MODI (Microsoft Office Document Imaging - Version 12).
Da es eine große Anzahl von Schriftarten gibt und jede einzelne stark verschnörkelt ist, treten manchmal Fehler auf.
Dass ab und zu Fehler passieren ist nicht weiter schlimm, da alles mit den Daten einer Datenbank abgeglichen werden.
Das einzige, dass wirklich funktionieren muss ist die Erkennung des Namens (dieser befindet sich an einer fixen Position ganz oben), da dieser der Primary Key in meiner Datenbank (MySQL) ist.

Nun zu meinem Problem:
Übergebe ich ein Bild des gesamten Dokumentes wird der Name nicht immer erkannt.
Schneide ich das Bild vorher zurecht, so dass nur noch der Name des Dokumentes sichtbar ist, wird der richtig Name erkannt.

Gibt es eine Möglichkeit, dass ich bei/statt .Create(filePath) einen Stream o.ä. mit dem zugeschnitten Bild übergebe?
Oder noch besser, kann ich irgendwie die Koordinaten verändern, indem nach Text gesucht wird (in meinem Fall statt überall nur ganz oben)?

Das Programm wird später mind. 100 Dokumente am Tag scannen, daher will ich die zugeschnittenen Bilder nicht abspeichern, einlesen und anschließend löschen. (Um die Lebensdauer der SSD's nicht noch mehr zu verkürzen)

Zum Abschluss noch die Funktion zum auslesen des Textes :

Code:
public string GetTextFromImage(string filePath, int lang)
        {
            try
            {
                Document modiDocument = new Document();
                modiDocument.Create(filePath);
                if (lang == 0)
                {
                    modiDocument.OCR(MiLANGUAGES.miLANG_ENGLISH);
                }
                else
                {
                    modiDocument.OCR(MiLANGUAGES.miLANG_GERMAN);
                }
                MODI.Image modiImage = (modiDocument.Images[0] as MODI.Image);
                string extractedText = modiImage.Layout.Text;
                modiDocument.Close();
                return extractedText;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return "Fehler";
            }
        }

Danke schon einmal für eure Hilfe :)
 
Thomas95 schrieb:
Das Programm wird später mind. 100 Dokumente am Tag scannen, daher will ich die zugeschnittenen Bilder nicht abspeichern, einlesen und anschließend löschen. (Um die Lebensdauer der SSD's nicht noch mehr zu verkürzen)

Passt jetzt nicht ganz zum Thema, aber es gibt zig andere Dinge auf deinem PC, die Sachen einlesen/speichern/ändern und löschen. Die paar 100 Dateien machen da nichts (vor allem wird beim löschen meist sowieso nicht direkt auf der Platte gelöscht, sondern nur die Verlinkung gestrichen)
 
Hellblazer schrieb:
Passt jetzt nicht ganz zum Thema, aber es gibt zig andere Dinge auf deinem PC, die Sachen einlesen/speichern/ändern und löschen. Die paar 100 Dateien machen da nichts (vor allem wird beim löschen meist sowieso nicht direkt auf der Platte gelöscht, sondern nur die Verlinkung gestrichen)

Ja ich weiß, dass z.B. 100 * ~1MB schreiben und löschen täglich nicht gerade die Welt ist, aber einerseits wäre es ohne diesen Vorgang wesentlich performanter und andererseits lässt mich das mein Informatiker-Gewissen nicht machen :P

Sollte es mit MODI nicht möglich sein (was ich leider befürchte), könnte mir jemand eine andere Möglichkeit, die er selbst schon benutzt hat, weiterempfehlen? :)
 
Zurück
Oben