Verbesserung der Tesseract-Erkennungsqualität

8

Ich versuche, alphanumerische Zeichen (a-z0-9) zu extrahieren, die keine sinnvollen Wörter aus einem Bild ergeben, das mit einer Verbraucherkamera (einschließlich Mobiltelefonen) aufgenommen wurde. Die Zeichen haben die gleiche Größe und Schriftart und sind nicht formatiert. Die eigentliche Bearbeitung erfolgt unter Windows.

Das folgende Bild zeigt die rohe Eingabe:

Nach der perspektivischen Verarbeitung wende ich folgendes mit OpenCV an:

  • Konvertieren von RGB nach Grau
  • Wenden Sie cv::medianBlur an, um Rauschen zu entfernen
  • Konvertieren Sie das Bild mithilfe des adaptiven Schwellenwerts in binär. cv::adaptiveThreshold
  • Ich kenne die Anzahl der Zeilen und Spalten des Rasters. Daher extrahiere ich einfach jede Gitterzelle mit diesen Informationen.

Nach all diesen Schritten bekomme ich Bilder, die ähnlich aussehen:

Dann starte ich tesseract (neueste SVN-Version mit den neuesten Trainingsdaten) für jedes extrahierte Zellbild einzeln (ich habe verschiedene -psm und -l Werte versucht):

%Vor%

Die Ergebnisse von tesseract sind nicht sehr gut:

  • Die meisten Zeichen werden nicht erkannt.
  • Die Gitterlinien werden manchmal als "l" - oder "i" -Zeichen interpretiert.

Ich habe bereits mit morphologischen Operationen experimentiert (öffnen, schließen, erodieren, dilatieren) und das adaptive Thresholding durch OTSU-Thresholding ( THRESH_OTSU ) ersetzt, aber die Ergebnisse verschlechterten sich.

Was könnte ich noch versuchen, um die Erkennungsqualität zu verbessern? Oder gibt es sogar eine bessere Methode, um die Zeichen neben der Verwendung von Tesseract zu extrahieren (zum Beispiel Template-Matching?)?

Bearbeiten (21-12-2014): Ich testete einen einfachen Template-Abgleich (mit normalisierter Kreuzkorrelation und LMS, aber mit noch schlechteren Ergebnissen). Aber ich habe einen großen Schritt vorwärts gemacht, indem ich jedes Zeichen mit findCountours extrahiert habe und dann tesseract mit nur einem Zeichen und der Option -psm 10 ausgeführt habe, die jedes eingegebene Bild als einzelnes Zeichen interpretiert. Zusätzlich entferne ich nicht-alphanumerische Zeichen in einem Nachbearbeitungsschritt. Die ersten Ergebnisse sind mit Erkennungsraten von 90% und besser ermutigend. Das Hauptproblem sind Fehldetektionen von "9" und "g" und "q" Zeichen.

Grüße,

    
Hyndrix 21.12.2014, 06:51
quelle

2 Antworten

1

Wie ich hier hier sage, können Sie das tun Sagen Sie Tesseract, dass Sie auf "fast gleiche" Zeichen achten müssen. Außerdem gibt es einige Optionen in Tesseract, die Ihnen in Ihrem Beispiel nicht helfen. Zum Beispiel wird ein "Pocahonta5S" meistens "PocahontaSS", weil die Zahl in einem Buchstabenwort steht. Sie können auf diese Weise so sehen.

Bei der Vorverarbeitung sollten Sie besser einen Scharffilter verwenden. Vergessen Sie nicht, dass tesseract immer einen Otsu-Filter anwendet, bevor Sie etwas lesen. Wenn Sie ein gutes Ergebnis wünschen, sind Scharfstellen + Adaptiver Schwellenwert mit einigen anderen Filtern gute Ideen.

    
Alto 22.12.2014 09:57
quelle
1

Ich empfehle, OpenCV in Kombination mit tesseract zu verwenden.

Das Problem in Ihren Eingabebildern für tesseract sind die Nicht-Zeichen-Regionen in Ihrem Bild.

Eine Annäherung an mich selbst

Um diese loszuwerden, würde ich die Funktion openCV findContour verwenden, um alle Konturen in Ihrem Binärbild zu erhalten. Definieren Sie anschließend einige Kriterien, um die Nicht-Zeichen-Regionen zu illiminieren. Nehmen wir zum Beispiel nur die Bereiche, die sich innerhalb des Bildes befinden und nicht die Grenze berühren, oder nur die Bereiche mit einem bestimmten Bereich oder einem bestimmten Verhältnis von Höhe zu Breite. Finden Sie einige Funktionen, mit denen Sie zwischen Zeichen und Nicht-Zeichen-Konturen unterscheiden können. Anschließend eliminieren Sie diese Nicht-Zeichen-Regionen und behandeln die Bilder nach tesseract.

Nur als Idee für die generelle Überprüfung dieses Ansatzes:

Beseitigen Sie die Nicht-Zeichen Regionen manuell (Gimp oder Farbe, ...) und geben Sie das Bild Tesseract. Wenn das Ergebnis Ihren Erwartungen entspricht, können Sie versuchen, die Nicht-Zeichenregionen mit der oben vorgeschlagenen Methode zu eliminieren.

    
Mr.Sheep 11.04.2015 10:08
quelle