Begrenzen Sie die Zeichen, nach denen tesseract sucht

73

Ist es möglich, den Zeichensatz, nach dem Tesseract sucht , einzuschränken (z. B. nur nach Buchstaben az suchen)? Das würde meine Ergebnisse erheblich verbessern.

Danilo Bargen
quelle

Antworten:

84

Erstellen Sie eine Konfigurationsdatei (z. B. "Buchstaben") im Verzeichnis tessdata / configs - normalerweise /usr/share/tesseract/tessdata/configs
oder
/usr/share/tesseract-ocr/tessdata/configs

Und fügen Sie diese Zeile zur Konfigurationsdatei hinzu:

tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz  

... oder vielleicht funktioniert [az] .. keine Ahnung :-)
Dann nenne tesseract ähnlich wie folgt :

tesseract input.tif output nobatch letters  

Dadurch wird tesseract eingeschränkt, um nur die gewünschten Zeichen zu erkennen

Blomman
quelle
Entschuldigung für die späte Antwort - das hat geholfen. Danke :) Übrigens, der Regex hat nicht funktioniert. Es wurde wahrscheinlich wörtlich interpretiert.
Danilo Bargen
tessedit_char_whitelist 0123456789, ich habe dies getan, um Zahlen von einem Bild abzurufen, aber von 20 Ziffern waren nur 4 korrekt. Jede Hilfe wäre sehr dankbar !! danke u
Swati
1
SWATI: Was für ein Bild ist das? Versuchen Sie, das Quellbild zu bereinigen. Zum Beispiel mit imagemagick.
Danilo Bargen
1
Sehr hilfreich! Ich würde sagen, die Tesseract-Dokumentation ist schrecklich, aber das gesuchte Wort ist wirklich "nicht vorhanden". Danke!
Zorlack
@DaniloBargen Was meinst du mit Bereinigen des Quellbildes?
24

Um die Whitelist in einer Konfigurationsdatei oder über den -c tessedit_char_whitelist=...Befehlszeilenschalter zu verwenden, müssen Sie in der neuesten Version 4.0 den OCR Engine-Modus auf "Nur Original Tesseract" einstellen. Dies liegt daran, dass der neue LSTM-Modus "Neuronale Netze" die Whitelist-Einstellung nicht berücksichtigt. Beispiel für die richtige Befehlszeile für die Version 4.0:

tesseract input_file output_file --oem 0 -c tessedit_char_whitelist = abc123

UPDATE: In neueren Versionen (4.0) ist eine beschädigte eng.traineddataDatei standardmäßig von Windows und einigen Linux-Installationsprogrammen installiert. Temporäre Lösung besteht darin, die tessdata\eng.traineddataDatei durch eine Datei aus einer älteren Version zu ersetzen . Diese Datei sollte ungefähr 30 MB groß sein. Andernfalls erhalten Sie den Fehler: "Tesseract konnte keine Sprachen laden!" oder ähnliches.

Update von tesseract 4.1.1

  • In Tesseract 4.1.1 ist der obige Fehler jedoch behoben, dh in Tesseract 4.1.1 funktioniert das Folgende wie ein Zauber

    tesseract my_image.jpg stdout -l mylang configfile myconfig

Wobei "myconfig" eine Klartextdatei in TESSDATA / configs ist

load_system_dawg false
load_freq_dawg false
tessedit_char_whitelist ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Bartłomiej Uliasz
quelle
Ich verwende pytesseract als pyt und bekommen folgenden Fehler , wenn die oben genannten Ratschläge befolgt pyt.image_to_data(im_gray_res, config='-c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ --psm 11 --oem 0')wie pytesseract.pytesseract.TesseractError: (1, "Failed loading language 'eng' Tesseract couldn't load any languages! Could not initialize tesseract."). Irgendwelche Ideen, wie die Erkennung mit nur den erforderlichen Zeichen erreicht werden kann?
SKR
Haben Sie versucht, einen einfachen Befehl wie pytesseract.image_to_data(Image.open('test.png'))ohne zusätzliche Argumente zu verwenden? Weil der Fehler nicht mit der Zeichen-Whitelist selbst zusammenhängt.
Bartłomiej Uliasz
Ja, ich habe alles versucht, tatsächlich auch CLI für Tesseract, aber ich habe irgendwo gelesen, dass die Zeichen-Whitelist mit Tesseract 4.0 nicht berücksichtigt wird. Also habe ich versucht, die Option oem 0 zu geben, aber dann wird sie nicht einmal ausgeführt. Können Sie bitte mit der Option --oem 0 auf Ihrer Seite prüfen?
SKR
2
Ja, du hast Recht. In der neueren Version ist die eng.traineddataDatei beschädigt . Ich habe die neueste Version 4.0 ausprobiert und den gleichen Fehler erhalten. Temporäre Lösung besteht darin, die tessdata\eng.traineddataDatei durch eine Datei aus einer älteren Version zu ersetzen . Diese Datei sollte ungefähr 30 MB groß sein (nicht 4 MB wie die in Version 4.0 installierte).
Bartłomiej Uliasz
2
Ja, ich habe nur neueste Version dieser Datei aus dem Projekt GitHub versuche Link und ersetzt die, die ich in hatte tessdata/eng.trainedddatamit dem einem heruntergeladen und alles funktionierte einwandfrei auf Version 4.0.
Bartłomiej Uliasz
19

Zusätzlich zur Konfigurationsdatei befindet sich das -cFlag:

tesseract stdin stdout -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz -psm 6
jmunsch
quelle
2
Selbst wenn ich das auf einfache Vanillebuchstaben setze, sehe ich die Meldung "31 diakritische Zeichen erkannt". Das ist seltsam, da ich keine diakritischen Zeichen oder Zeichen mit Akzent in die Whitelist aufgenommen habe.
Ed Avis
@EdAvis Siehe: github.com/tesseract-ocr/tesseract/wiki/… hat möglicherweise mit der Versionsnummerierung zu tun. Es würde mehr Forschung über die Versionsnummerierung erfordern, damit ich sie vollständig verstehen kann, aber das Anstoßen der Version, das Erforschen der Shell-Version und die Unicode-Behandlung oder utf * könnten einige Hinweise zeigen. Entschuldigung, ich habe keine vollständige Antwort.
jmunsch
Whitelist nicht unterstützt in Tesseract 4
Wolfgang
1
Ich kann bestätigen, dass dies mit Tesseract 4.1.1 unter Linux gut funktioniert.
Kingsley
9

Fügen Sie dies einfach für alle hinzu, die Tesseract unter Android verwenden. Fügen Sie in Ihrer readOCR-Funktion, in der Sie die Sprache usw. festlegen, die folgende Zeile hinzu.

tesseract.setVariable("tessedit_char_whitelist","ABCDEFGHIJKLMNOPQRSTUVWXYZ");

Sie können auch blackList ausführen, damit Zeichen ausgeschlossen werden.

user3244591
quelle
Für diejenigen, die tess4j (den Java-Wrapper) verwenden, verwenden Sietesseract.setTessVariable()
Pranav
2

Ich benutze Ubuntu 18.04.4 LTS. Der Standard-Tesseract ist Version 4. Ich kann keine Whitelist damit verwenden. Dann aktualisiere ich es auf Version 5. Dann benutze ich den folgenden Befehl und es hat funktioniert.

tesseract sample.jpg stdout -l eng --oem 3 --psm 7
Warning: Invalid resolution 0 dpi. Using 70 instead.
LL £036 GL)

tesseract sample.jpg stdout -l eng --oem 3 --psm 7 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
Warning: Invalid resolution 0 dpi. Using 70 instead.
L4036GL

sample.jpg

us2018
quelle
1

In Tesseract Version 4.00 ist dies nicht möglich. Sie können Ihr Modell nur optimieren oder Regex verwenden, um zusätzliche Zeichen aus der Vorhersage zu entfernen.

Andrew Ravus
quelle
Nicht mehr wahr?
jtlz2
Ist es unmöglich, eine Whitelist mit Tesseract 4.0.0 zu verwenden, das in Legacy OEM ausgeführt wird? Ist dies ein Fehler in Tesseract 4.0.0, der in 4.1.1 behoben wurde? Kannst du bestätigen?
Ja,
0

Meine Antwort stammt vollständig aus der Antwort akzeptiert und wird hier hinzugefügt alle .NET - Windows - Entwickler profitieren die Verwendung TesseractNuGet Paket - jedoch zur Kenntnis nehmen meine Kugel 2, bezieht jeder mit jeder Art von Tesseractauf Windows

  1. Erstellen Sie einen configOrdner in Ihrem tessdataOrdner, in dem sich die anderen Trainingsdaten befinden.
  2. Fügen Sie eine lettersDatei in den configOrdner ein. Geben Sie hier die Bildbeschreibung ein Verwenden Sie einen Editor wie TextPad, mit dem Sie ihn im UNIX-Format und in der ANSI-Codierung speichern können (ich hatte ursprünglich UTF-8 / IBM PC ausprobiert und tesseract hat einen Fehler in meine Testausgabe gekotzt).
  3. Stellen Sie genau wie bei Ihren Trainingsdateien sicher, dass für die lettersDatei im Eigenschaftenfenster eine Build-Aktion festgelegt Contentund weiter markiert ist, um sie in das Ausgabeverzeichnis zu kopieren:
    Geben Sie hier die Bildbeschreibung ein
  4. Rufen Sie Ihre Tesseract-Motorklasse folgendermaßen auf:
 var ocrEng = new TesseractEngine("./tessdata", "eng", EngineMode.Default, "letters");
bkwdesign
quelle