Tesseract-Lauffehler

80

Ich habe ein Problem mit der Ausführung der Tesseract-OCR-Engine unter Linux. Ich habe RUS-Sprachdaten heruntergeladen und in das Verzeichnis tessdata (/ usr / local / share / tessdata) gestellt. Wenn ich versuche, tesseract mit dem Befehl auszuführen tesseract blob.jpg out -l rus, wird ein Fehler angezeigt:

Error opening data file /usr/local/share/tessdata/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.

Failed loading language eng
Tesseract couldn't load any languages!

Could not initialize tesseract.

Laut Kompilierungsanleitung habe ich verwendetexport TESSDATA_PREFIX='/usr/local/share/' auf mein Tessdata-Verzeichnis verwiesen. Vielleicht sollte ich irgendwelche Konfigurationsdateien bearbeiten? Tesseract versucht, 'eng'-Datendateien anstelle von' rus 'zu laden.

Screenshot: http://i.stack.imgur.com/I0Guc.png

Russel Crowe
quelle

Antworten:

84

Sie können eng.traineddataGithub greifen :

wget https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata

Unter https://github.com/tesseract-ocr/tessdata finden Sie eine vollständige Liste der trainierten Sprachdaten.

Wenn Sie die Datei (en) greifen, verschieben Sie sie in den /usr/local/share/tessdataOrdner. Warnung: Einige Linux-Distributionen (wie openSUSE und Ubuntu) erwarten dies möglicherweise /usr/share/tessdatastattdessen.

# If you got the data from Google, unzip it first!
gunzip eng.traineddata.gz 
# Move the data
sudo mv -v eng.traineddata /usr/local/share/tessdata/
AAAfarmclub
quelle
2
Korrigieren Sie mich, wenn ich falsch liege. Aber ging es nicht darum, eine neue Sprache (rus) aufzunehmen und nicht die zu liefern, auf die die (fehlerhafte) Fehlermeldung hinweist?
Arne
1
edit: Aus irgendeinem Grund wird tesseract nur ausgeführt, wenn eng.traineddate vorhanden ist - auch wenn es nicht benötigt wird. Die Antwort von AAAfarmclub ist also in Ordnung.
Arne
3
Warnung: Andere Linux-Installationen (Ubuntu Vivid) arbeiten in einem anderen Verzeichnis: / usr / share / tesseract-ocr / tessdata stattdessen
Oktoeder
@ Gazta: Ja, openSUSE benötigt stattdessen dieses Verzeichnis
Avindra Goolcharan
3
In Ubuntu-Gnome 16.04: Es ist/usr/share/tesseract-ocr/tessdata/
kmario23
55

Am einfachsten ist es, das benötigte Paket zu installieren:

sudo apt-get install tesseract-ocr-eng  #for english
sudo apt-get install tesseract-ocr-tam  #for tamil
sudo apt-get install tesseract-ocr-deu  #for deutsch (German)

Wie Sie sehen können, öffnet es den Weg zu anderen Sprachen (dh tesseract-ocr-fra).

Mih Zam
quelle
3
Dies sollte die akzeptierte Antwort sein. Manuelles Basteln mit Dateien hinter den Paketmanagern (vorausgesetzt, Sie haben eine verwendet, um Tesseract zu installieren) ist eine schlechte Idee
Ishay Peled
2
Für Mac-Benutzer, die MacPort verwenden: sudo port install tesseract-eng
p-mercier
4
Sie können verwenden tesseract --list-langs, um alle verfügbaren Sprachen anzuzeigen. Sie können auch verwenden sudo apt-get install tesseract-ocr-*, um alle von ihnen zu installieren
Rodrigo Laguna
Für Arch heißen die Pakete tesseract-data-engusw.
Loki
Leider funktioniert diese Antwort in einem Docker-Container nicht, obwohl sie außerhalb davon funktioniert.
Ælex
27

Ich hatte diesen Fehler auch auf dem Windows-Computer.

Meine Lösung.

1) Laden Sie Ihre Sprachdateien von https://github.com/tesseract-ocr/tessdata/tree/3.04.00 herunter

Zum Beispiel habe ich für eng alle Dateien mit dem Präfix eng heruntergeladen.

2) Legen Sie sie in das tessdata- Verzeichnis eines Ordners. Fügen Sie diesen Ordner als TESSDATA_PREFIX zu Systempfadvariablen hinzu .

Das Ergebnis ist System env var: TESSDATA_PREFIX = D: / Java / OCR. Der OCR-Ordner enthält Tessdaten mit Sprachdateien.

Dies ist ein Screenshot des Verzeichnisses:

Geben Sie hier die Bildbeschreibung ein

Yan Khonski
quelle
3
Ja, alle reden über Linux. Bitte Leute, vergiss nicht, dass es ein weiteres beliebtes Betriebssystem auf dem Markt gibt.
Khan
4

Bei mir hat keine vorherige Lösung funktioniert.

Ich habe beide von installiert apt-get die Tessdaten als auch durch manuelles Herunterladen installiert, bin umgezogen /usrund so weiter, und niemand hat funktioniert, selbst wenn ich die Variable tausendmal exportiert habe.

Schließlich habe ich bei einem letzten Versuch vor dem Weinen versucht, den Pfad direkt an die Instanz von Tesseract () zu übergeben.

In Python: tr = Tesseract("/usr/local/share/tesseract-ocr/")und jetzt funktioniert es. Zur Verdeutlichung verwende ich ein tesserwrapModul.

m3nda
quelle
1
Ich kann das gut nachfühlen! Ich bin gerade genau dort. Der Unterschied ist, um die Sache noch schlimmer zu machen, ich versuche, es über die Kommandozeile zum Laufen zu bringen.
Entdecker
4
tesseract  --tessdata-dir <tessdata-folder> <image-path> stdout --oem 2 -l <lng>

In meinem Fall die Fehler, die ich gemacht habe oder Versuche, die kein Erfolg waren.

  • Ich habe das Github-Repo geklont und Dateien von dort nach kopiert
    • / usr / local / share / tessdata /
    • / usr / share / tesseract-ocr / tessdata /
    • / usr / share / tessdata /
  • Benutzt TESSDATA_PREFIX mit den oben genannten Pfaden verwendet
  • sudo apt-get install tesseract-ocr-eng

Die ersten 2 Versuche haben nicht funktioniert, da die Dateien aus git clone aus den Gründen, die ich nicht kenne, nicht funktioniert haben. Ich bin mir nicht sicher, warum der dritte Versuch für mich funktioniert hat.

Schließlich,

  1. Ich habe die Datei eng.traindata mit heruntergeladen wget
  2. Kopierte es in ein Verzeichnis
  3. Wird --tessdata-dirmit dem Verzeichnisnamen verwendet

Für mich bedeutet dies , das Tool gut zu lernen und es zu nutzen , anstatt sich auf die Installation und die Verzeichnisse des Paketmanagers zu verlassen

Forscher
quelle
2

Sie können die Tesseract-API-Funktion über C-Code aufrufen:

#include <tesseract/baseapi.h>
#include <tesseract/ocrclass.h>; // ETEXT_DESC

using namespace tesseract;

class TessAPI : public TessBaseAPI {
    public:
    void PrintRects(int len);
};

...
TessAPI *api = new TessAPI();
int res = api->Init(NULL, "rus");
api->SetAccuracyVSpeed(AVS_MOST_ACCURATE);
api->SetImage(data, w0, h0, bpp, stride);
api->SetRectangle(x0,y0,w0,h0);

char *text;
ETEXT_DESC monitor;
api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
printf("m.count: %s\n", monitor.count);
printf("m.progress: %s\n", monitor.progress);

api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
...
api->End();

Und baue diesen Code:

g++ -g -I. -I/usr/local/include -o _test test.cpp -ltesseract_api -lfreeimageplus

(Ich brauche FreeImage zum Laden von Bildern)

Alexander Lubyagin
quelle
@ DarkSkull, ja, dies ist C ++ - Code, der in Debian GNU / Linux getestet wurde. Wie Sie sehen, hat Russel Crowe das Problem mit der Funktion TessAPI :: Init (NULL, "rus"). Es ist sinnvoll, den Tesseract-Quellcode (TessAPI-Klassenmethode) zu überprüfen.
Alexander Lubyagin
1

Ich verwende die Visual Studio 2017 Community Edition.
Ich habe dieses Problem gelöst, indem ich im Debug-Verzeichnis meines Projekts ein Verzeichnis namens tessdata erstellt habe. Dann lege ich die Datei eng.traineddata in dieses Verzeichnis.

John
quelle
1

Ich verwende das Windows-Betriebssystem, habe alle oben genannten Lösungen ausprobiert und keine davon funktioniert.

Schließlich installiere ich Tesseract-OCR auf dem Laufwerk D (von wo aus ich mein Python-Skript ausführe) anstelle des Laufwerks C und es funktioniert.

Wenn Sie also Windows verwenden, führen Sie Ihr Python-Skript auf demselben Laufwerk wie Ihre Tesseract-OCR aus.

Yusuzech
quelle
1

C # -Entwickler, der hier unter Windows arbeitet. Was für mich funktioniert, ist einfach die Datei eng.traineddata von der folgenden URL herunterzuladen :

https://github.com/tesseract-ocr/tessdata/blob/master/eng.traineddata

und kopieren Sie es in das folgende Verzeichnis in meinem Konsolenanwendungsprojekt:

[Projektverzeichnis] ​​\ bin \ Debug \ tessdata

Ich habe den Tessdata- Ordner oben manuell erstellt .

yangli.liy
quelle
0

Für Windows-Benutzer:

Fügen Sie unter Umgebungsvariablen eine neue Variable in der Systemvariablen mit dem Namen "TESSDATA_PREFIX" und dem Wert "C: \ Programme (x86) \ Tesseract-OCR \ tessdata" hinzu.

Rafcod
quelle
Stimmen Sie zu, und um reibungslos zu funktionieren, ist eine weitere Installation erforderlich. Machineintelligent.blogspot.com/2019/03/…
Amit Vashistha
0
tessdata_dir_config = r'--tessdata-dir "/usr/local/Cellar/tesseract/4.1.1/share/tessdata"'
pytesseract.image_to_string(imgCrop,lang='eng',config=tessdata_dir_config)
Marwen Sabri
quelle
4
Dies ist keine Antwort. Bitte erläutern Sie, was hier vor sich geht, damit andere beim Lesen Ihrer Antwort nützliche Erkenntnisse gewinnen können.
AlexH