Entwickler-Ecke

Multimedia / Grafik - tesseract ocr mit delphi verwenden


P@u1 - Do 25.03.10 18:46
Titel: tesseract ocr mit delphi verwenden
Ich wollte schon immer mal in programmen von mir grafikerkennung benutzen, und jetzt habe ich diese kostenlose ocr engine gefunden:
http://code.google.com/p/tesseract-ocr/

nur hab ich leider überhaupt keine ahnung, ob und wenn ja wie ich das mit delphi verwenden kann.

Funktioniert das irgendwie mit kommandozeile vielleicht? (weiß nicht genau was das ist, hab ich aber mal gehört)

Wäre gut wenn ihr mir helfen könntet ;)

Edit: Wenn ich diesen Download hier nehme:
http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-2.04.exe.tar.gz&can=2&q=

dann krieg ichs nichtmal ohne delphi, also über die exe verwendet, ich starte es, es erscheint eine konsole die irgendwas ganz kurz anzeigt und dann sich direkt wieder schließt.
Liegt das vll daran, dass das nur über kommandozeile funktioniert?

edit2: wenn jemand gute kostenlose(!) alternativen kennt, wäre das auch gut.

Ich möchte das hauptsächlich (würde schon reichen) dafür verwenden, ziffern von 0 bis 9 erkennen zu können - bei einem beliebigen hintergrund (von dem angenommen werden kann, dass die farbe sich räumlich nur schwach unterscheidet, z.B. verschiedene grüntöne, aber alles grün).
Ich möchte aber auf keinen fall mit vergleichsbildern arbeiten müssen.
Wenn ihr dazu gute ideen habt wie das anders geht, immer her damit ;)
Ich denke aber das das schwierig wird das selbst zu programmieren sowas zu erkennen, also dachte ich an fertige ocr's wie die oben beschriebene.


DHE - Fr 26.03.10 01:00

Ja Tesseract ist nur ne "reine" OCR-Engine, also ohne GUI usw. Du übergibst beim Programmaufruf den Pfad zum Eingabebild und bekommst den Output als Datei zurück.

Um Tesseract mit Delphi zu nutzen musst du nur Tesseract mit den richtigen Paramtern ausführen und den Output aus der Texdatei laden (Memo, Stringlist, etc.)

Tesseract ausführen:

Delphi-Quelltext
1:
2:
3:
4:
LocalPath := ExtractFilePath(Application.ExeName);
Params := 'input.tif output -l deu';

ShellExecute(Application.Handle,'open',PChar(LocalPath + '\tesseract\tesseract.exe'),Params,PChar(LocalPath + '\Tesseract'), SW_HIDE);


Und Ergebnis öffnen (Standardmäsig im Tesseractverzeichniss):

Delphi-Quelltext
1:
Memo.Lines.LoadFromFile('LocalPath + '\tesseract\output.txt');                    


Das ganze kannst du ja noch über weitere Parameter anpassen (Ausgabepfad, Direkter Bildpfad, etc.) Dazu einfach mal durch die Seite durchwühlen :D


P@u1 - Sa 27.03.10 20:10

vielen dank für die hilfe.

Leider werden kleine ziffern, die aus relativ wenig pixeln bestehen nicht richtig oder gar nicht erkannt.
Kann man das irgendwie optimieren nur auf ziffern oder auf ne kleine zahlengröße, oder etwas anderes, was dafür besser geeignet ist benutzen?


Tryer - Sa 27.03.10 20:34

Hier [http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract] steht doch alles ;)
Also: Ja, man kann die Engine trainieren (was bei sehr kleinen Zeichen explizit empfohlen wird).

Grüsse, Dirk


Narses - Sa 27.03.10 20:54

Moin!

user profile iconP@u1 hat folgendes geschrieben Zum zitierten Posting springen:
Leider werden kleine ziffern, die aus relativ wenig pixeln bestehen nicht richtig oder gar nicht erkannt.
Kann man das irgendwie optimieren nur auf ziffern oder auf ne kleine zahlengröße, oder etwas anderes, was dafür besser geeignet ist benutzen?
Um mal ein bischen Sinn in diese Diskussion zu bringen: die modernen Captchas sind so gebaut, dass man sie nicht mit einer Standard-OCR-Engine geknackt kriegen soll (selbst modernere mit Winkelschnittanalyse haben bei den meisten Captchas keine Chance). Und - genau so soll es sein. :|

Fazit: Vergiss es, wenn es um Captchas geht. :P dafür brauchst du intelligentere, auf genau diese Aufgabe und den Captcha-Typ optimierte kleine "Kunstwerke" an Code...

cu
Narses


P@u1 - Sa 27.03.10 21:00

es geht nicht um captchas


Narses - Sa 27.03.10 21:05

Moin!

user profile iconP@u1 hat folgendes geschrieben Zum zitierten Posting springen:
Ich möchte das hauptsächlich (würde schon reichen) dafür verwenden, ziffern von 0 bis 9 erkennen zu können - bei einem beliebigen hintergrund (von dem angenommen werden kann, dass die farbe sich räumlich nur schwach unterscheidet, z.B. verschiedene grüntöne, aber alles grün).
Ich möchte aber auf keinen fall mit vergleichsbildern arbeiten müssen.
user profile iconP@u1 hat folgendes geschrieben Zum zitierten Posting springen:
es geht nicht um captchas
Da OCR-Technik mal eins meiner Hobbies war, bin ich da grundsätzlich neugierig ;) Um was geht´s denn sonst? :gruebel:

cu
Narses


P@u1 - Sa 27.03.10 21:09

es geht um eine art bot für ein kartenspiel
bisher habe ich mit vergleichsbildern gearbeitet, aber mit ocr wäre es viel besser

das mit dem trainieren versteh ich leider nicht wie das geht, auch mit dem link^^

ich bin für jede hilfe dankbar, auch alternativlösungen, aber bitte erzählt mir jetzt nicht wieder, dass solch ein programm nicht erlaubt ist oder sowas.


DHE - Sa 27.03.10 22:30

user profile iconP@u1 hat folgendes geschrieben Zum zitierten Posting springen:
es geht um eine art bot für ein kartenspiel

Wieso? Wie willst du denn die Farbenerkennung (Karo, Herz, Pik, Kreuz) über OCR regeln?
Vergleichsbilder scheinen mir da die bessere Lösung zu sein...


ALF - Sa 27.03.10 22:58

Bevor noch weitere Missverständnisse aufkommen, solltest Du user profile iconP@u1 vielleicht noch an diesen Thread [http://www.delphi-forum.de/viewtopic.php?t=96553&postorder=asc&start=0] von Dir erinnern.
Wenn es noch darum geht? Alles andere ist sonst zweifelhaft oder?
Gruss Alf


P@u1 - So 28.03.10 00:46

ja um sowas geht es, aber die kartenwerte werden auch als zahlen angezeigt, das würde schon reichen wenn man die erkennen kann

außerdem finde ich das thema texterkennung sehr interessant und wollte mich mal ein bisschen damit beschäftigen, auch wenns erstmal nur um das "trainieren" von fertigen engines geht^^