OCR für eine Sieben-Segment-Anzeige

    • C#

      OCR für eine Sieben-Segment-Anzeige

      Hallo Leute,
      @Skino hatte hier das Problem, Ziffern einer 7-Segment-Anzeige zu erkennen:
      Noch mal OCR, aber nur Zahlen
      Auf GitHub fand ich folgende Lösung: github.com/FANMixco/7-segment-ocr-reader
      Als ich mich näher mit dieser Lösung befasste, fand ich mehrere Unzulänglichkeiten, ich vermute mal, dass nicht der ganze Code getestet und verstanden wurde.
      Ich nahm mich dieses Algorithmus' an und habe ihn so weit optimiert,
      dass alle im Thread geposteten Bilder sauber erkannt werden.
      Voraussetzung für eine erfolgreiche OCR ist das Vorliegen eines diskreten Mono-Bildes mit schwarzen Ziffern auf weißem Grund.
      Der wichtigste Punkt hier ist, dass ein Farbbild zunächst in ein zunächst sorgfältig in ein diskretes Mono-Bild konvertiert werden muss.
      Dazu ist üblicherweise noch etwas Bildverarbeitung erforderlich, die hier nicht Gegenstand der Untersuchung ist.
      Die Reihenfolge sollte sein:
      • Beschneidung des Bildbereiches
      • Konvertierung in ein Grau-Bild
      • Medianfilter
      • ggf. Schwarz-Weiß-Invertierung
      • Opening und Closing
      • Diskretisierung
      Ich hab hier mal eine kleine Variante eingebaut, die nicht alles kann, die Bilder aber erfolgreich ausliest:
      • Kantenbeschneidung
      • Schwarz-Weiß-Invertierung
      • Konvertierung in ein Grau-Bild mit links und rechts unterschiedlichen Werten und linearer Interpolation dazwischen
      Zum besseren Verständnis habe ich die privaten Klassen und deren Properties umbenannt, so dass der Code nun ordentlich lesbar und verständlich sein sollte.
      Alle Prozeduren sind kommentiert, wichtige Passagen im Code ebenfalls.
      Den englischen Original-Kommentar habe ich unverändert stehen gelassen.
      Was noch zu tun wäre:
      In der OCR-Klasse sollte nicht auf einer Bitmap, sondern auf einem Byte-Array gearbeitet werden.
      Das ist auch für eine flüssige Bildverarbeitung erforderlich.
      Zur Entwicklung habe ich die betreffenden Bilder den Ressourcen des Programms hinzugefügt.
      Das Einlesen externer Bilder aus einer Datei oder der Zwischenablage sollte für den geübten Programmierer kein Problem darstellen.

      Im linken Bild wird das Originalbild und der gelesene Text dargestellt,
      im rechten Bild wird das entsprechend der Controls vorverarbeitete Bild und der gelesene Text dargestellt.

      SiebenSegmentOcrCs.zip
      SiebenSegmentOcrVb.zip

      Viel vergnügen
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ () aus folgendem Grund: VB-Projekt angehängt