C# Tesseract aus einem Programm öffnen und Parameter übergeben

Mollfred

Cadet 3rd Year
Registriert
Mai 2013
Beiträge
43
Hallo!

Ich versuche gerade aus meinem Programm Tesseract (ein ORC-Tool) zu öffnen und ihm gleichzeitig die Parameter zu übergeben damit Tesseract aus einer Tiff datei ein HTML mit bounding Boxen macht.

Der Normale Konsolen Befehl wäre :"tesseract.exe imagename outputbase -l deu hocr"

Ich hab es bisher mit folgendem Code versucht:
Code:
             ProcessStartInfo info = new ProcessStartInfo("tesseract.exe"+ infiles[i] +  output -l  deu hocr);
            info.WorkingDirectory = "ocr";
wobei das scheinbar überhaupt nicht funktioniert aufjedenfall werden die Parameter nicht übergeben, ich Google schon den halben Tag um raus zu finden wie ich das Problem lösen kann, wäre super wenn jemand von euch einen Rat hätte.
lg
Mollfred
 
Der Code ist snytaktisch nicht mal korrekt... ganz super für einen Foren-Post.

Und dass man die Argumente bei der ProcessStartInfo über Arguments angeben kann, müsste man eigentlich in der Dokumentation auch selbst rausfinden können... zumindest hab ich das nach einer halben Minute...

also info.Arguments = ...
 
Nach dem exe-dateinamen fehlt sicherlich das obligatorische leerzeichen was immer vor den parametern kommt. schau dir im debugger doch mal an was aus deiner zeichenkettenverkettung am ende rauskommt. ich schätze mal das ist nicht richtig.
 
hmm wenn ich es debugge meckert er nicht....wenn ich versuche die info mittels Console.WriteLine(info); aufzurufen kommt lediglich System.Diagnostic.Process.Start.Info.
Das mit den Leerzeochen war ein guter Hinweis, aber hat erstmal nichts geändert wobei ich schätze das sie wirklich da sein müssen.
 
Es wurde bereits erklärt, dass die Argumente mittels info.Arguments gesetzt werden müssen. Lesen musst du leider noch immer selbst. ;)
Wenn man ein komplexes Objekt vom Typ System.Diagnostic.Process.Start.Info auf die Console schreibt, dann kommt da genau das raus. Zur Erklärung: Bei der Konvertierung des Objekts zu einem String wird die ToString()-Mehtode auf deinem info-Objekt aufgerufen. Deine Kommandozeile steht indes irgendwo in einem Property des info-Objekts.
 
Du kannst mir viel erzählen, aber nicht, dass diese Zeile hier genau so bei dir compiliert:
Code:
ProcessStartInfo info = new ProcessStartInfo("tesseract.exe"+ infiles[i] +  output -l  deu hocr);

eher (unter der Annahme dass output eine String-Variable ist... ist ja alles nicht ganz klar...
Code:
ProcessStartInfo info = new ProcessStartInfo("tesseract.exe"+ infiles[i] + " " + output + " -l  deu hocr");
Aber was sind schon zwei Anführungszeichen... genauso unwichtig wie ein Leerzeichen. Das ist im Übrigen wirklich unwichtig und ich würde es direkt weglassen... aber an anderen Stellen ist es wichtig...

Und probiers doch einfach mal mit:

Code:
ProcessStartInfo info = new ProcessStartInfo("tesseract.exe");
info.Arguments = infiles[i] +  " " + output + " -l  deu hocr";
 
Zuletzt bearbeitet:
du hast recht hab da wirklich mit dem Anführungszeichen geschludert....
ok danke für den Tip mit info.Arguments
 
passt nicht 100% zur frage aber gäb auch direkt ne .Net Assembly namens tessnet2.
fand ich damals ganz nützlich.
 
hmm ich hab jetzt den folgenden Code...
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;

namespace ConsoleApplication6
{
    class Program
    {                                  
        static void Main(string[] args)
        {
            string input = @"c:/book.tif";          
            string output = @"c:/test";
            ProcessStartInfo info = new ProcessStartInfo("tesseract.exe");
            info.Arguments = input + " " + output + " -l eng hocr";
        
        }
    }
}
aber Tesseract schmeißt nix raus auch wenn ich versuche den output c:/test.html zu nennen, ich habs schon von hand in der Konsole geprüft ob Tesseract überhaupt geht und das klappt, nur aus dem Programm schaff ich es nicht das Tesseract aus dem .tif eine .html Datei macht und die Brauche ich ja wegen den Bounding Boxen
 
Welche Manual denn? über ProcessStartInfo? oh hatte nicht gesehen das es ein Link ist sorry....ok ich lese
 
Den Link hab ich rein editiert, aber meine Güte, die Seite wäre auch so einfach zu finden ... also Programmieren wollen und nicht mal via Google API-Dokumentationen finden... oO
 
ja das is mir klar aber ich hatte nicht gerafft welches Manual ich lesen sollte....nagut ich les denn mal
 
Ja ok, war nicht ganz klar, dass ich die ProcessStartInfo-Klasse meinte... aber die hätte ich halt von Anfang an schon angeschaut, bevor ich überhaupt den Thread aufgemacht hätte.

Im Übrigen musst du auch nicht ProcessStartInfo verwenden, du kannst auch direkt die Methode nehmen...
http://msdn.microsoft.com/de-de/library/h6ak8zt5.aspx
(Das Beispiel enthält beide Varianten, ist bei beiden Seiten das selbe)
 
Zuletzt bearbeitet:
Nach dem ich jetzt die Doku gelesen hab, klappt alles. Was habe ich daraus gelernt? Erstmal richtig lesen und dann fragen...
grüße
Mollfred
 
Zurück
Oben