Quittungen Scannen und Archivieren mit OCR



  • Hi,

    ich habe mit Tesseract ein paar Supermarkt-Quittungen unterschiedlicher Märkte eingescannt und wollte die Daten (Preis, Artikel) daraus extrahieren. Die Qualität der Ergebnisse ist aber nicht verwendbar. Das verwundert mich doch stark, denn es handelt sich um eine normierte Druckschriften die in hoer Qualität eingescannt wurden. Da ich mich mit OCR aber nicht gut auskenne, wollte ich hier ein paar Tipps einholen um das Ergebnis zu verbessern.

    Beantworte natürlich auch Rückfragen diesbezüglich.

    MfG
    Dudeldu



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du solltest erstmal selbst die relevanten Regionen (welche den eigentlichen Text enthalten) identifizieren und ausschneiden. Nur diese sollten dann an die OCR Lib übergeben werden.
    Auf den Quittungen sind ja auch viele andere Objekte zu finden (Linien, Punkte, Symbole), die bringen die OCR Lib eventuell durcheinander.

    Kannst im ersten Schritt mal manuell mit MS Paint machen. Später kannst du das auch automatisieren, z.B. mit OpenCV.



  • Hey,

    wenn du ein "bisschen" Geld in die Hand nehmen willst, dann kann ich dir erstmal die Abbyy Engine empfehlen. Die ist nämlich schneller als die Tesseract Engine und erkennt deutlich besser. Möchtest du bei der Freeware Variante bleiben, dann wird du nicht drum herum kommen die Bereiche, welche dich interessieren, einzugrenzen. Desweiteren lege ich dir ans Herz, dich mit Regex zu beschäftigen. Es wird nämlich früher oder später so sein, dass die Engine im Preis z.B. eine 0(Null) für ein O hält. Oder eine 1 für ein I. Oder oder oder... Das musst du alles abfangen bis das Ergebnis dem entspricht was du dir vorstellst. Das sind nur mal ein paar grundlegende Tipps von mir.



  • Danke für das Feedback!

    Ok, hab jetzt probiert nur Ausschnitte zu untersuchen. Ergebnis war nach wie vor schlecht. Dann habe ich probiert das Bild vorher zu bearbeiten mit Drehen um 0.8° / Helligkeit / Kontrast etc.
    Ergebnis etwas besser.

    Und jetzt der Hammer:
    Gaußscher Weichzeichner in Gimp verwendet: Ausschnitte werden fehlerfrei erkannt. Dann probiert auf die Gesamte Quittung: Fast alles richtig erkannt bis auf ein paar Sonderzeichen wie # und *.

    D.h. die Software hat ein Problem mit kleinen Pixellücken in den einzelnen Buchstaben/Zeichen selber. Vermutung: durch das Glätten werden die Lücken gestopft und die Software kann die Strukturen dann komplett erkennen.



  • zum Löcherstopfen bietet sich auch Erosion/Dilatation an.
    Kannst auch mit GIMP testen: Filter->Allgemein->Erweitern/Erodieren.

    Zusammengesetzt kannst du damit Opening/Closing umsetzen, welche genau für solche Zwecke gerne verwendet werden:
    http://docs.opencv.org/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html



  • Nachtrag:

    Die ganze Weichzeichnerei war überflüssig. Habe gemerkt, dass ich eine viel zu hohe Auflösung beim scannen verwendet habe. Statt 600 dpi sollte man 200 dpi nehmen, dann löst sich das Weichzeichnern von selber. Das nächste unter 200 dpi (150 dpi) hab ich auch probiert und das liefert wieder schlechte Ergebnisse.


Log in to reply