Tesseract

MeiJo87

Neues Mitglied
Hallo Leute,
Momentan sitze ich an einem Projekt, in dem es darum geht Kassenbons auf bestimmte Merkmale zu überprüfen. Hierzu muss also eine OCR-Anwendung geschrieben werden. Getestet habe ich hierbei Tess4J (Tesseract). Das Einbinden sowie ein Durchlaufen der ersten Beispiele hat keine Probleme mit sich gebracht. Wie ich feststellte, arbeitet Tesseract mit Wörterbüchern. Hierzu habe ich bereits das Englische, sowie auch das Deutsche Wörterbuch probiert --> allerdings kommt bei der OCR-Erkennung größtenteils nur quatsch raus. Ich weiß, dass ein besseres Ergebnis mit einer bestimmten Auflösung (DPI) erzielt werden kann. Allerdings bin ich auf der Tesseract Seite auf folgenden Hinweis gestoßen:
By default Tesseract is optimized to recognize sentences of words. If you're trying to recognize something else, like receipts, price lists, or codes, there are a few things you can do to improve the accuracy of your results, as well as double-checking that the appropriate segmentation method is selected.

Disabling the dictionaries Tesseract uses should increase recognition if most of your text isn't dictionary words. They can be disabled by setting the both of the configuration variablesload_system_dawg and load_freq_dawg to false.

Aus diesem Grund habe ich versucht, die genannten Parameter zu setzen. Leider verstehe ich hierbei noch nicht wie das ganze funktioniert. Bei meiner Google Recherche habe ich eine Lösung gefunden, in dem man eine Config-File erstellt & diese mit den gewünschten Paramtern ausliest.
List<String> configs = Arrays.asList("bazaar");
instance.setConfigs(configs);

Bei "bazaar" soll es sich, wenn ich richtig verstanden habe, um eine externe File handeln, welche mit im Projektordner liegt. Allerdings weiß ich nicht wie ich auf diese Datei zuggreifen kann. Das gezeigte Beispiel spuckt eine Liste mit den einzelnen characters (b-a-z-a-a-r) aus.
Eine weitere Methode ist direkt über den Aufruf:
TessBaseAPI api = new TessBaseAPI();
api.SetVariable("load_system_dawg", "F");
api.SetVariable("load_freq_dawg", "F");

zu arbeiten. Hiermit soll die Funktion des Dictionarys deaktivert werden. Allerdings weiß ich nicht, wie ich die Api, ohne Angabe des zu Verwendenden Dictionarys, initialisieren soll.

Hat jemand evtl. ein funktionierendes Beispiel? Ich verzweifle langsam..


VG

MeiJo
 

Tarrew

Top Contributor
So richtig verstehe ich das Problem nicht. Du kannst Tesseract doch erst initialisieren und danach die Optionen setzen:
Java:
TessBaseAPI api = new TessBaseAPI();
api.init(tessdataFolder, "deu");
api.SetVariable("load_system_dawg", "F");
api.SetVariable("load_freq_dawg", "F");

Für richtig hohe Genauigkeit erstellt man sich am besten selbst eine .traineddata Datei, die dann entsprechend nur noch die passende Schriftart enthält etc. Wenn man das Bild dann noch manuell vorverarbeitet (zB. mittels adaptiven threshold binarisieren) kann man schon seeeehr gute Ergebnisse kriegen.
 

Ähnliche Java Themen

Neue Themen


Oben