c# - services - microsoft's computer vision api




Was sind gute Algorithmen zur Kfz-Kennzeichenerkennung? (8)

Dies ist eindeutig ein Computer-Vision-Problem. OpenCV Sie einen Blick auf OpenCV . Es ist in C ++, aber wahrscheinlich können Sie irgendwie damit interagieren .

Hintergrund

Für mein Abschlussprojekt an der Universität entwickle ich eine Kfz-Kennzeichenerkennung. Ich betrachte mich selbst als einen Zwischenprogrammierer, aber meinem Mathematikwissen fehlt etwas über der Sekundarschule, was dazu führt, dass die richtigen Formeln schwieriger werden, als es wahrscheinlich sein sollte.

Ich habe eine Menge Zeit damit verbracht, wissenschaftliche Arbeiten zu lesen, wie zum Beispiel:

Wenn es um die Mathematik geht, bin ich verloren. Aufgrund dieser Tests erwiesen sich verschiedene grafische Bilder als produktiv, zum Beispiel:

zu

Dieser Ansatz funktionierte jedoch nur für dieses bestimmte Bild, und wenn die Techniken auf verschiedene Bilder angewendet wurden, würde ich sicher eine schlechtere Umwandlung auftreten. Ich habe über eine Formel namens "Bottom Hat Morphology Transformation" gelesen, die Folgendes tut:

Im Grunde behält die Transformation alle dunklen Details des Bildes und eliminiert alles andere (einschließlich größerer dunkler Regionen und hellerer Regionen).

Ich kann nicht viele Informationen dazu finden, aber das Bild in der Dokumentation am Ende des Berichts zeigt seine Wirksamkeit.

Andere Einschränkungen

  • Entwickeln in C #
  • Beschränkung des Projekts auf britische Kennzeichen
  • Ich kann die Bilder auswählen, um sie als Demonstration zu konvertieren

Frage

Ich brauche einen Rat, auf welche Transformationstechniken ich mich konzentrieren sollte und welche Algorithmen mir helfen können.

BEARBEITEN: Neue Informationen auf Fortsetzung - Kfz-Kennzeichenerkennung


Es gibt eine Reihe von Ansätzen, die Sie ergreifen können, aber die erste Strategie, die Ihnen in den Sinn kommt, ist:

  • Ermittlung / Recherche: Identifizieren Sie die Farben und Schriftarten, die Sie identifizieren müssen. Wenn Ihr Beispielbild für die meisten britischen Platten repräsentativ ist, wird Ihre Arbeit erleichtert. ZB einfache, singuläre Schrift und schwarze Schrift auf weißem Hintergrund
  • Code: Es wurde versucht, einen rechteckigen Bereich eines Bildes zu identifizieren, in dem die Farben überwiegend weiß und schwarz sind. Dies ist kein furchtbar Mathe-schweres Problem und es sollte Ihnen die Nummernschildregion geben, auf die Sie sich konzentrieren sollten.
  • Code: Bereinige deine Subregion, indem du sie in reines Schwarzweiß umwandelst (monochrom) und vielleicht in ein schönes, enges Rechteck skalierst.
  • API verwenden: Verwenden Sie als Nächstes einen vorhandenen OCR-Algorithmus (Optical Character Recognition) für Ihre untergeordnete Bildregion, um zu sehen, ob Sie den Text lesen können.

Wie ich schon sagte, dies ist eine Strategie von vielen, aber es kommt einem in den Sinn, wenn man die geringste Menge an schwerer Mathematik benötigt ... das heißt, wenn Sie eine OCR-Implementierung finden, die für Sie funktioniert.


Hier ist, wie ich vorschlage, dass Sie diese Aufgabe tun sollten. Lies meine ausführliche Antwort here .

  1. In Graustufen konvertieren
  2. Gaußscher Weichzeichner mit 3x3 oder 5x5 Filter.
  3. Wenden Sie Sobel Filter an, um vertikale Kanten zu finden.

    Sobel(gray, dst, -1, 1, 0)

  4. Schwellen Sie das resultierende Bild, um ein Binärbild zu erhalten.
  5. Wenden Sie eine morphologische Close-Operation mit einem geeigneten strukturierenden Element an.
  6. Finden Sie Konturen des resultierenden Bildes.
  7. Finde minAreaRect für jede Kontur. Wählen Sie Rechtecke basierend auf dem Seitenverhältnis und der minimalen und maximalen Fläche aus.
  8. Suchen Sie für jede ausgewählte Kontur die Kantendichte. Legen Sie einen Schwellenwert für die Kantendichte fest und wählen Sie die Rechtecke, die diesen Schwellenwert als mögliche Plattenregionen überschreiten.
  9. Wenige Rechtecke bleiben danach übrig. Sie können sie basierend auf der Ausrichtung oder nach Kriterien filtern, die Sie für geeignet halten.
  10. Schneiden Sie diese erkannten rechteckigen Bereiche aus einem Bild nach adaptiveThreshold des ursprünglichen (Graustufen-) Bildes und wenden Sie OCR an.

Ich habe vor ein paar Jahren ein ähnliches Projekt in Java gemacht, zuerst habe ich den Sobel-Operator angewendet und dann das ganze Bild mit einem Bild einer Platte maskiert (mit dem Sobel-Operator auch angewendet). Der Bereich maximaler Koinzidenz ist dort, wo sich die Platte befindet. Wenden Sie dann eine OCR auf die ausgewählte Region an, um die Nummer zu erhalten.


Sie können sich auch auf die Bibliothek für automatische Kennzeichenerkennung und diese Abfrage beziehen. Dadurch erhalten Sie auch eine Vorstellung davon, wie Sie an die Dinge herangehen und wie bestehende Lösungen aussehen.

Aber wie von Paul beantwortet, sollten Sie zuerst versuchen, das rechteckige Nummernschild aus dem vollständigen Bild zu finden und es dann zu digitalisieren und dann die verfügbaren OCR-Bibliotheken zu verwenden (Tesseract wäre zu empfehlen).

Sie können auf diesen link verweisen, der Ihnen hilft, die rechteckige Platte zu finden. Sie müssen OpenCV-Bibliotheken verwenden, so dass Sie nicht viel Mathematik brauchen, aber ja, ein grundlegendes Verständnis dessen, was hinter den Kulissen passiert, kann Ihnen helfen, das Problem besser zu lösen.



UK hat bereits ein System, das das tut. Ich erinnere mich, eine Fernsehshow gesehen zu haben, in der gezeigt wurde, dass sie innerhalb von 10 Minuten ein Auto in London finden können (vorausgesetzt, sie kennen die Nummer und das Auto fährt herum). Wenn Sie Wikipedia lesen, gibt Ihnen das die richtigen http://en.wikipedia.org/wiki/Automatic_number_plate_recognition


Wenn Sie an dem Problem interessiert sind, das Vorhandensein eines Nummernschilds zu erkennen (anstatt es zu erkennen), sollten Sie sich die Texterkennung in Bildern ansehen, da diese mit Ihrer Arbeit in Zusammenhang steht.

Diese Frage bezieht sich auf Ihren: Algorithmus zum Erkennen des Vorhandenseins von Text im Bild





object-detection