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.
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.
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:
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 %code% und %code% Werte versucht):
%Vor%Die Ergebnisse von tesseract sind nicht sehr gut:
Ich habe bereits mit morphologischen Operationen experimentiert (öffnen, schließen, erodieren, dilatieren) und das adaptive Thresholding durch OTSU-Thresholding ( %code% ) 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 %code% extrahiert habe und dann tesseract mit nur einem Zeichen und der Option %code% 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,