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.
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.
Antworten:
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
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.traineddata
Datei standardmäßig von Windows und einigen Linux-Installationsprogrammen installiert. Temporäre Lösung besteht darin, die tessdata\eng.traineddata
Datei 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.
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
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?
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.
eng.traineddata
Datei beschädigt . Ich habe die neueste Version 4.0 ausprobiert und den gleichen Fehler erhalten. Temporäre Lösung besteht darin, die tessdata\eng.traineddata
Datei 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).
tessdata/eng.trainedddata
mit dem einem heruntergeladen und alles funktionierte einwandfrei auf Version 4.0.
Zusätzlich zur Konfigurationsdatei befindet sich das -c
Flag:
tesseract stdin stdout -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz -psm 6
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.
tesseract.setTessVariable()
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
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.
Meine Antwort stammt vollständig aus der Antwort akzeptiert und wird hier hinzugefügt alle .NET - Windows - Entwickler profitieren die Verwendung Tesseract
NuGet Paket - jedoch zur Kenntnis nehmen meine Kugel 2, bezieht jeder mit jeder Art von Tesseract
auf Windows
config
Ordner in Ihrem tessdata
Ordner, in dem sich die anderen Trainingsdaten befinden.letters
Datei in den config
Ordner 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).letters
Datei im Eigenschaftenfenster eine Build-Aktion festgelegt Content
und weiter markiert ist, um sie in das Ausgabeverzeichnis zu kopieren: var ocrEng = new TesseractEngine("./tessdata", "eng", EngineMode.Default, "letters");