Lösung für Init-Problem bei Tessnet2 OCR Wrapper in C#

Tessnet2 ist ein C#-Wrapper für die in C++ geschriebene Tesseract 2.0 OCR Library. OCR steht für Optical Character Recognition und dient zum Umwandeln von Textinhalt aus Bildern zu Klartext. Diese Library werden vermutlich in unserem nächsten Augmented Reality Project am Worcester Polytechnic Institute anwenden.

Jedoch gibt es schon beim erstellen der ersten Testanwendung viele Probleme, auf die man stoßen kann, und auch ich darauf gestoßen bin. Es folgen nun die einzelnen Probleme und deren Lösung:

1. BadImageFileException wird geworfen

Dieser Fehler wird geworfen, wenn die referenzierte DLL von Tessnet entweder in der falschen Zielplattform kompiliert wurde, oder die verwendete .NET Version neuer als 2.0 ist. Im ersten Fall muss man entweder die DLL der anderen Zielplattform (x64, x86) verwenden, oder in den Compiler-Einstellungen von Visual Studio die Target-Plattform des eigenen Programms entsprechend ändern.

2. Pfadangabe und Version der tessdata Dateien

Wichtig zu wissen ist, dass Tessnet2 die Sprachdaten für Tesseract 2.0 und nicht die neuen Sprachdaten für 3.0 benötigt. Alle Sprachdaten sind auf Tesseract OCR Project zu finden. Um also die richtigen Sprachdaten zu finden, muss man also auf die letzte Seite blättern. Ebenso gibt es häufig Verwirrung bezüglich des ersten Parameters der Init-Funktion, welche den Pfad zu den Sprachdaten angibt. Dieser muss wirklich der volle Pfad zum tessdata-Ordner sein. Außerdem darf kein Unterordner enthalten sein, sondern es müssen im tessdata-Ordner alle 8 Sprachdateien enthalten sein. Ein Beispiel für einen korrekten Init-Aufruf lautet wie folgt:

ocr.Init(@"D:\temp\tessdata", "eng", false);

3. Registry-Einträge anderer Versionen von Tesseract

Ein sehr hartnäckiger und verbreiteter Fehler liegt dann vor, wenn das Programm bei der Init-Funktion einfach ohne Fehlermeldung abbricht. Zu diesem Problem gibt es zahlreiche Foren-Threads, womit ich wohl nicht der Einzige bin, der auf dieses Problem gestoßen ist. Unter den vielen Lösungsvorschlägen in den Foren hat bei mir nichts geholfen. Nach etwa zwei Stunden weiterer Suche bin ich dann auf eine Lösung gestoßen, dass wenn man Tesseract 3 auf dem System installiert hat, man dieses deinstallieren und alle Registry-Einträge löschen soll.  Zwar hat auch auch das das Problem noch nicht behoben, jedoch ist die Tatsache, dass ich zuvor Tesseract 3 installiert hatte wirklich für das Problem verantwortlich. Denn diese Installation auch zusätzlich in den Umgebungsvariablen von Windows einen Eintrag TESSDATA_PREFIX erstellt, welcher durch die Deinstallation nicht entfernt wird. Nachdem man diesen Eintrag manuell entfernt hat, funktioniert der Init-Aufruf ohne Probleme.

Ich hoffe ich kann mit diesem Post dem ein oder anderen weiterhelfen. Wenn irgendwelche Aussagen inkorrekt oder unvollständig sind, dann weist mich bitte darauf hin. Meine Erfahrungen mit Tesseract beschränken sich immerhin auf nur einen vollen Tag.

Comments

  1. Hallo,
    bei mir bricht das Programm ebenfalls während der Init-Funktion einfach ab (ohne Fehlermeldung).
    Ich kann allerdings den Registry-Einträgen nichts finden, was mit Tesseract zu tun hat.
    Vielleicht kennst du ja Rätsel's Lösung ;-)
    Schonmal Danke!

    ReplyDelete
  2. Das ist zwar schon eine Weile her, als ich mich damit das letzte Mal beschäftigt habe, jedoch ist "TESSDATA_PREFIX" kein Registry-Eintrag, sondern ein Eintrag in den Umgebungsvariablen. (Systemsteruerungen > System > Erweiterte Systemeinstellungen > Umgebungsvariablen...). Vielleicht hilft dir das ja weiter.

    Gruß
    Benny

    ReplyDelete

Post a Comment

Popular posts from this blog

UWPCore: A development acceleration framework for the Universal Windows Platform

How to setup an eGPU on Ubuntu for TensorFlow

Benchmarking Tensorflow Performance on eGPU