Ich habe Tesseract verwendet, um Dokumente in Text umzuwandeln. Die Qualität der Dokumente ist sehr unterschiedlich und ich suche nach Tipps, welche Art der Bildverarbeitung die Ergebnisse verbessern kann. Ich habe festgestellt, dass stark pixeliger Text - zum Beispiel der von Faxgeräten erzeugte - für Tesseract besonders schwer zu verarbeiten ist - vermutlich verwechseln all diese gezackten Kanten der Zeichen die Formerkennungsalgorithmen.
Welche Art von Bildverarbeitungstechniken würde die Genauigkeit verbessern? Ich habe eine Gaußsche Unschärfe verwendet, um die Pixelbilder zu glätten, und eine kleine Verbesserung festgestellt, aber ich hoffe, dass es eine spezifischere Technik gibt, die bessere Ergebnisse liefert. Angenommen, ein Filter wurde auf Schwarzweißbilder abgestimmt, wodurch unregelmäßige Kanten geglättet werden, gefolgt von einem Filter, der den Kontrast erhöht, um die Zeichen deutlicher zu machen.
Irgendwelche allgemeinen Tipps für jemanden, der ein Anfänger in der Bildverarbeitung ist?
quelle
Ich bin kein OCR-Experte. Aber ich musste diese Woche Text aus einem JPG konvertieren.
Ich begann mit einem kolorierten JPG mit 445 x 747 Pixel. Ich habe sofort versucht, dies zu tun, und das Programm hat fast nichts konvertiert. Ich ging dann zu GIMP und tat Folgendes. Bild> Modus> Graustufenbild> Skalierungsbild> 1191x2000 Pixel Filter> Verbessern> Unscharfe Maske mit Werten von Radius = 6,8, Betrag = 2,69, Schwellenwert = 0 Ich habe dann als neues JPG bei 100% Qualität gespeichert.
Tesseract konnte dann den gesamten Text in eine TXT-Datei extrahieren
Gimp ist dein Freund.
quelle
Drei Punkte zur Verbesserung der Lesbarkeit des Bildes: 1) Ändern Sie die Größe des Bildes mit variabler Höhe und Breite (multiplizieren Sie 0,5 und 1 und 2 mit Bildhöhe und -breite). 2) Konvertieren Sie das Bild in das Graustufenformat (Schwarzweiß). 3) Entfernen Sie die Rauschpixel und machen Sie es klarer (Filtern Sie das Bild).
Siehe folgenden Code:
EINGABEBILD
AUSGABEBILD
quelle
Als Faustregel wende ich normalerweise die folgenden Bildvorverarbeitungstechniken unter Verwendung der OpenCV-Bibliothek an:
Neuskalieren des Bildes (es wird empfohlen, wenn Sie mit Bildern arbeiten, deren DPI weniger als 300 dpi beträgt):
Bild in Graustufen konvertieren:
Anwenden von Dilatation und Erosion, um das Rauschen zu entfernen (Sie können abhängig von Ihrem Datensatz mit der Kernelgröße spielen):
Anwenden von Unschärfe, die mithilfe einer der folgenden Zeilen erfolgen kann (von denen jede ihre Vor- und Nachteile hat, jedoch wirken sich Medianunschärfe und bilateraler Filter normalerweise besser aus als Gaußsche Unschärfe):
Ich habe kürzlich eine ziemlich einfache Anleitung zu Tesseract geschrieben, aber sie sollte es Ihnen ermöglichen, Ihr erstes OCR-Skript zu schreiben und einige Hürden zu beseitigen, die ich erlebt habe, als die Dinge weniger klar waren, als ich es mir in der Dokumentation gewünscht hätte.
Falls Sie sie ausprobieren möchten, teile ich hier die Links mit Ihnen:
Erste Schritte mit Tesseract - Teil I: Einführung
Erste Schritte mit Tesseract - Teil II: Bildvorverarbeitung
quelle
Dies ist etwas her, aber es könnte immer noch nützlich sein.
Meine Erfahrung zeigt, dass es manchmal hilfreich ist, die Größe des Bilds im Speicher zu ändern, bevor es an tesseract übergeben wird.
Probieren Sie verschiedene Interpolationsmodi aus. Der Beitrag https://stackoverflow.com/a/4756906/146003 hat mir sehr geholfen.
quelle
Was mir auf diesem Weg EXTREM HILFREICH war, sind die Quellcodes für das Capture2Text-Projekt. http://sourceforge.net/projects/capture2text/files/Capture2Text/ .
Übrigens: Ein großes Lob an den Autor für das Teilen eines solchen sorgfältigen Algorithmus.
Achten Sie besonders auf die Datei Capture2Text \ SourceCode \ leptonica_util \ leptonica_util.c - das ist die Essenz der Bildvorverarbeitung für dieses Dienstprogramm.
Wenn Sie die Binärdateien ausführen, können Sie die Bildtransformation vor / nach dem Vorgang im Ordner Capture2Text \ Output \ überprüfen.
Die von PS erwähnte Lösung verwendet Tesseract für OCR und Leptonica für die Vorverarbeitung.
quelle
Java-Version für Sathyarajs Code oben:
quelle
Die Tesseract-Dokumentation enthält einige gute Details zur Verbesserung der OCR-Qualität durch Bildverarbeitungsschritte.
Bis zu einem gewissen Grad wendet Tesseract sie automatisch an. Es ist auch möglich, Tesseract anzuweisen, ein Zwischenbild zur Überprüfung zu schreiben, dh zu überprüfen, wie gut die interne Bildverarbeitung funktioniert (Suche
tessedit_write_images
in der obigen Referenz).Noch wichtiger ist, dass das neue neuronale Netzwerksystem in Tesseract 4 viel bessere OCR-Ergebnisse liefert - im Allgemeinen und insbesondere für Bilder mit etwas Rauschen. Es ist aktiviert mit
--oem 1
zB wie in:(In diesem Beispiel wird die deutsche Sprache ausgewählt.)
Daher ist es sinnvoll, zunächst zu testen, wie weit Sie mit dem neuen Tesseract LSTM-Modus kommen, bevor Sie einige benutzerdefinierte Bildverarbeitungsschritte vor der Verarbeitung anwenden.
quelle
Adaptive Schwellenwerte sind wichtig, wenn die Beleuchtung im gesamten Bild ungleichmäßig ist. Meine Vorverarbeitung mit GraphicsMagic wird in diesem Beitrag erwähnt: https://groups.google.com/forum/#!topic/tesseract-ocr/jONGSChLRv4
GraphicsMagic hat auch die -lat-Funktion für Linear Time Adaptive Threshold, die ich bald ausprobieren werde.
Eine andere Methode zur Schwellenwertbildung mit OpenCV wird hier beschrieben: http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html
quelle
Ich habe dies getan, um gute Ergebnisse mit einem Bild zu erzielen, das keinen sehr kleinen Text enthält.
Und wenn immer noch keine guten Ergebnisse erzielt werden, skalieren Sie das Bild auf 150% oder 200%.
quelle
Das Lesen von Text aus Bilddokumenten mit einer beliebigen OCR-Engine hat viele Probleme, um eine gute Genauigkeit zu erzielen. Es gibt keine feste Lösung für alle Fälle, aber hier sind einige Dinge, die berücksichtigt werden sollten, um die OCR-Ergebnisse zu verbessern.
1) Vorhandensein von Rauschen aufgrund schlechter Bildqualität / unerwünschter Elemente / Blobs im Hintergrundbereich. Dies erfordert einige Vorverarbeitungsvorgänge wie die Rauschentfernung, die leicht unter Verwendung eines Gaußschen Filters oder normaler Medianfiltermethoden durchgeführt werden können. Diese sind auch in OpenCV verfügbar.
2) Falsche Ausrichtung des Bildes: Aufgrund der falschen Ausrichtung kann die OCR-Engine die Linien und Wörter im Bild nicht richtig segmentieren, was die schlechteste Genauigkeit ergibt.
3) Vorhandensein von Zeilen: Während der Wort- oder Zeilensegmentierung versucht die OCR-Engine manchmal auch, die Wörter und Zeilen zusammenzuführen und so falschen Inhalt zu verarbeiten und damit falsche Ergebnisse zu erzielen. Es gibt auch andere Probleme, aber dies sind die grundlegenden.
Diese Post- OCR-Anwendung ist ein Beispielfall, in dem einige Bildvorverarbeitungen und Nachverarbeitungen für OCR-Ergebnisse angewendet werden können, um eine bessere OCR-Genauigkeit zu erzielen.
quelle
Die Texterkennung hängt von einer Vielzahl von Faktoren ab, um eine qualitativ hochwertige Ausgabe zu erzielen. Die OCR-Ausgabe hängt stark von der Qualität des Eingabebildes ab. Aus diesem Grund bietet jede OCR-Engine Richtlinien zur Qualität des Eingabebilds und seiner Größe. Diese Richtlinien helfen der OCR-Engine, genaue Ergebnisse zu erzielen.
Ich habe einen ausführlichen Artikel über die Bildverarbeitung in Python geschrieben. Bitte folgen Sie dem Link unten für weitere Erklärungen. Fügte auch den Python-Quellcode hinzu, um diesen Prozess zu implementieren.
Bitte schreiben Sie einen Kommentar, wenn Sie einen Vorschlag oder eine bessere Idee zu diesem Thema haben, um es zu verbessern.
https://medium.com/cashify-engineering/improve-accuracy-of-ocr-using-image-preprocessing-8df29ec3a033
quelle
Sie können Rauschunterdrückung durchführen und dann Schwellenwerte anwenden. Sie können jedoch mit der Konfiguration der OCR herumspielen, indem Sie die Werte --psm und --oem ändern
versuchen Sie: --psm 5 --oem 2
Weitere Informationen finden Sie auch unter folgendem Link
quelle