c# services Was sind gute Algorithmen zur Kfz-Kennzeichenerkennung?




microsoft's computer vision api (9)

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


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.


Es sagt dir genau, wie man die Bottom-Hat-Transformation berechnet (eine Art sieht aus wie eine invertierte abgestufte Schwelle, transformiere zu mir).

Als erstes müssen die beiden Morphologiefunktionen Dilatation und Erosion implementiert werden.

Dazu benötigen Sie Ihre f und b, dann berechnen Sie die Funktion über einen kleinen Bereich des Bildes an einem Punkt, der den größten gefundenen Wert enthält.

(f ⊕ b)(s, t) = max{f (s − x, t − y) + b(x, y)
|(s − x), (t − y) ∈ Df ; (x, y)∈Db}

Das heißt, nehmen Sie das Maximum des Ausdrucks über alle Punkte in der Domänenregion (z. B. ein kleines Rechteck, das an Ihrem Punkt zentriert ist (s, t)).

einfacher Pseudocode wäre

max = -infinity // for the point (s,t) on the image, must compute this for all points
for(x = -5 to 5)
for(y = -5 to 5)
max = Max(max, f(s - x, t - y) + b(x,y))

effektiv haben wir jetzt ein neues Bild der Maximalwerte.

Es ist eigentlich ganz einfach, also mach es nicht schwerer als es ist (wir fügen einfach b (x, y) zu jedem Punkt in der Region hinzu und finden heraus, welcher den maximalen Wert ergibt).

Sie tun das gleiche für die Erosion (sehr ähnlich wie oben)

Jetzt ist das Öffnen und Schließen die Komposition der beiden

Man kann sich zuerst eine Erweiterung und dann eine Erosion für eine Öffnung vorstellen.

Es sagt, dass Sie das Schließen vom Originalbild subtrahieren und Sie Ihre Transformation haben sollten.


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


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


Sie können die Rechteckerkennung in opencv verwenden oder haarähnliche Merkmale trainieren, um Platten zu erkennen, die auch in opencv vorhanden sind


Sie können www.openalpr.com als Ausgangspunkt verwenden. Es verwendet eine Reihe von Techniken, um das Nummernschild zu finden und zu analysieren.



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.





object-detection