aicher1998
Goto Top

Mustererkennung bei Bilder (Autokennzeichen)

Hallo

Ich versuche derzeit ein kleines Visual Basic Programm zu schreiben um Autokennzeichen erfassen zu können.
Als Muster hab ich mir ein Kennzeichen aus dem Internet besorgt.
a

Da ich nur das Schwarze vom Bild brauch (ich weiß, dass es auch blaue, grüne oder rote Kennzeichen gibt, denen ich aber erstmal keine Aufmerksamkeit schenken möchte), hab ich mir einen Filter gebastelt.
Jeder Pixel, bei dem ein Rot-, Grün- oder Blauwert 30 überschreitet, wird weiß gemacht.

Dabei entsteht das folgende Bild:
b

Anschließend dachte ich mir, ich lege eine 3x3 Matrix drüber.
Das sieht dann so aus
b2
Natürlich werden diese Striche nicht bei der Mustererkennung verwendet, sondern dienen erstmal nur zu Verständnis.Ist aber auch ein bisschen blöd, da ja die grauen Striche selbst auch 1 Pixel breit sind... egal...
Im nächsten Schritt soll dann jedes Kästchen in der Matrix, in welcher mindestens 2 von 9 schwarz sind, komplett geschwärzt werden (leider noch kein Bild verfügbar).

Ist mein Ansatz soweit gut oder gäbe es bis hier Verbesserungsvorschläge?

Denn dann jetzt das schwierigste: Die Erkennung der Buchstaben und Zahlen.

Ich dachte mir, ich lass das Programm zuerst einmal den obersten linken schwarzen Punkt finden und dann prüfen, wie weit es nach rechts bzw nach unten geht und z.B. zuerst versuchen, ein Rechteck zu finden (dann hätte man zum Beispiel schon mal den Fuß vom H, könnte dann schon eingrenzen E, F, H, I, L, M, N, usw)

Ist das gut so?

ODER

Wäre es zu empfehlen, jeden Buchstaben im Vorfeld als kleine Bitmap oder als Polygon einzuspeichern und dann dementsprechend zu skalieren?

Wäre echt dankbar wenn mir jemand helfen könnte bei meinem bislang schwierigsten Projekt...

Content-Key: 305617

Url: https://administrator.de/contentid/305617

Printed on: April 23, 2024 at 09:04 o'clock

Member: H41mSh1C0R
H41mSh1C0R May 29, 2016 updated at 00:24:14 (UTC)
Goto Top
Zu OCR gibts einen Berg an Videos auf Youtube.

z.B.

https://www.youtube.com/watch?v=Kjdu8SjEtG0

Nutze Emgu oder willst du das Rad unbedingt neu erfinden?

Wenn ja, würde ich wiefolgt vorgehen: (grob)

Set von Vergleichmaterial definieren, also alle verfügbaren Zeichen/Ziffern/Symbole.

Das Nummernschild dann in Teile splitten.

Wenn du nun etwas erkennen willst und ein Bild als Quelle lädst suche dir den ersten Buchstaben und zerlege ebenfalls nach Einzelbestandteilen.

Danach werden die Bestandteile mit dem vordefinierten Set verglichen.

Für die Erfolgsquote Schwellwerte festlegen und wenn du Teil-Quelle und Teil-Ziel vergleichst, z.B. Pixelweise, dann decken sich zu einem bestimmsten % Satz die Pixel in Schwarz. Zähle die Deckungsgleichen Pixel mit und rechne ein paar Pixel Abweichung ein.

Das Ganze sollte natürlich nur auf gleich scalierte Blöcke Anwendung finden. Da müsste man nochmal ne runde drüber grübeln wie man sicherstellt das beides korrekt scaliert.

Was auch noch als Rahmenbedingung feststehen muss ist das die Nummernschilder plan fotografiert wurden, hast du einen Winkel drin kommt da schon ein Sack voll Mathe oben drauf um die Winkel rauszurechnen.
Member: Aicher1998
Aicher1998 May 29, 2016 at 00:46:28 (UTC)
Goto Top
Zitat von @H41mSh1C0R:
https://www.youtube.com/watch?v=Kjdu8SjEtG0

Nutze Emgu oder willst du das Rad unbedingt neu erfinden?
Ja, ich möchte das Rad neu erfinden face-smile
Zudem, können diese Tools überhaupt die unübliche Schriftart "Euro Plate" ?
Ich werds mir aber trotzdem mal ansehen.

Das Nummernschild dann in Teile splitten.
Ah! Ja natürlich, mein Gott auf das bin ich gar nicht gekommen face-smile

Wenn du nun etwas erkennen willst und ein Bild als Quelle lädst suche dir den ersten Buchstaben und zerlege ebenfalls nach Einzelbestandteilen.
Das schwierigste bleibt noch immer: Wo beginnt das Kennzeichen in dem Bild?

Für die Erfolgsquote Schwellwerte festlegen und wenn du Teil-Quelle und Teil-Ziel vergleichst, z.B. Pixelweise, dann decken sich zu einem bestimmsten % Satz die Pixel in Schwarz. Zähle die Deckungsgleichen Pixel mit und rechne ein paar Pixel Abweichung ein.
Thx, in etwa so hatte ich es vor.

Was auch noch als Rahmenbedingung feststehen muss ist das die Nummernschilder plan fotografiert wurden, hast du einen Winkel drin kommt da schon ein Sack voll Mathe oben drauf um die Winkel rauszurechnen.
Naja die Aufnahmen werden eher von oben schräg runter gemacht (über ein Videostream). Auf meinen Grundstück natürlich face-smile
Member: H41mSh1C0R
H41mSh1C0R May 29, 2016 updated at 01:20:08 (UTC)
Goto Top
Wo beginnt das Kennzeichen im Bild?

Wie du oben schon selber vorgeschlagen hast, suche und finde das Rechteck ^^.
Innerhalb des richtigen Rechteckes beginnen die Buchstaben immer beim gleichen prozentualen Abstand zum Rahmen des Rechteckes. Auch hier minimale Abweichungen einrechnen. So findest du das Kennzeichen und die Position der Buchstaben.
Mitglied: 129413
129413 May 29, 2016 updated at 06:41:03 (UTC)
Goto Top
Member: H41mSh1C0R
H41mSh1C0R May 29, 2016 at 07:05:10 (UTC)
Goto Top
Du kannst ihm doch nix fertiges liefern, beim Rad neu erfinden. *gg*
Mitglied: 129413
129413 May 29, 2016 updated at 07:57:53 (UTC)
Goto Top
Ist doch nichts fertiges. In .NET umsetzen muss er es trotzdem noch selbst. Da bleibt noch genug zu bedenken und verstehen muss er es ebenfalls noch.
Zum anschließenden Überprüfen seiner eigenen Herangehensweisen kann das ganz nützlich sein.

Was kommt morgen?: "Wie baue ich mir ein Flugzeug face-big-smile, kann mir da jemand helfen ?!"

Scheint seinen Fragen nach zu urteilen sehr sprunghaft zu sein der Jung, erst Heatmap, dann TOR dann Kennzeichen, ...
Mitglied: 117471
117471 May 29, 2016 updated at 11:53:49 (UTC)
Goto Top
Zitat von @Aicher1998:

Ich dachte mir, ich lass das Programm zuerst einmal den obersten linken schwarzen Punkt finden

Ach wenn denn nur bei der 1 und der 9 der linkste Punkt auch gleichzeitig der oberste wäre...^^

Ich persönlich würde davon ausgehen, dass ich es mit einer Festbreitenschrift zu tun habe und das Kennzeichen in entsprechende Abschnitte unterteilen.

Für jeden Abschnitt gehst Du alle möglichen Zeichen durch und guckst, zu wie viel % der Abschnitt mit einer Referenzgrafik übereinstimmt.

Achja - Es gibt auch H-Kennzeichen, Wechselkennzeichen, kurze Kennzeichen (z.B. mit nur 1 Buchstaben und 1 Zahl wie z.B. "H E 1", Kennzeichen in Mittel- und in Engschrift, zweizeilige Kennzeichen usw. usf.

Ich frage mich ernsthaft, warum Du dich damit beschäftigst. Wenn Du es benötigst, dann solltest Du etwas vorgefertigtes nehmen. Wenn Du etwas derartiges entwickeln möchtest, dann solltest Du dir das Know-How eigentlich selber aneignen (können)... face-smile
Member: Aicher1998
Aicher1998 May 29, 2016 at 13:46:35 (UTC)
Goto Top
Thx, Ist mir etwas zu hoch ^^


So ähnlich hatte ich es vor. Auf der Seite ist es aber sehr umständlich face-smile


Ist doch nichts fertiges. In .NET umsetzen muss er es trotzdem noch selbst. Da bleibt noch genug zu bedenken und verstehen muss er es ebenfalls noch.
Zum anschließenden Überprüfen seiner eigenen Herangehensweisen kann das ganz nützlich sein.
Genau, sehe ich auch so.

Was kommt morgen?: "Wie baue ich mir ein Flugzeug face-big-smile, kann mir da jemand helfen ?!"
Das find ich jetzt aber fies. Ich hab doch geschrieben, wie ich es vorhabe und wollte wissen, ob die Idee gut ist oder was es zu verbessern gibt.
Ein bisschen was selber coden wird man doch wohl noch dürfen, wozu sollte man alles vorhandene nehmen, wenn man es selbst coden kann. Noch dazu hab ich keinen Bock mich mit irgendwelchen Lizenzen rumzuschlagen falls ich mein Programm oder Teile davon (bspw eine DLL) veröffentlichen möchte.

Scheint seinen Fragen nach zu urteilen sehr sprunghaft zu sein der Jung, erst Heatmap, dann TOR dann Kennzeichen, ...
Jup, bin 17. Ich fang immer wieder Sachen an und denke mir dann "Wozu mach ich das eigentlich?" und lass es dann ruhen face-smile
Bei der Heatmap scheiterts am Verständnis für Graphics, ich mach das aber nebenbei. Zudem ist mit den Kennzeichen jetzt mal eine super Übung dafür. Tor ist soweit fertig...
Member: Aicher1998
Aicher1998 May 29, 2016 at 13:55:22 (UTC)
Goto Top
Zitat von @117471:

Zitat von @Aicher1998:

Ich dachte mir, ich lass das Programm zuerst einmal den obersten linken schwarzen Punkt finden

Ach wenn denn nur bei der 1 und der 9 der linkste Punkt auch gleichzeitig der oberste wäre...^^
Dachte mir bereits dass das Probleme geben könnte.

Ich persönlich würde davon ausgehen, dass ich es mit einer Festbreitenschrift zu tun habe und das Kennzeichen in entsprechende Abschnitte unterteilen.
Jo, das hab ich inzwischen von verschiedenen Personen gehört. Mein Problem ist nur noch herauszufinden, wo das Kennzeichen beginnt - Gut, ich könnte ja im Bild nach einem Rechteck mit den Proportionen (+/- 5%) suchen...

Für jeden Abschnitt gehst Du alle möglichen Zeichen durch und guckst, zu wie viel % der Abschnitt mit einer Referenzgrafik übereinstimmt.
Genau, so mach ich es jetzt.

Achja - Es gibt auch H-Kennzeichen, Wechselkennzeichen, kurze Kennzeichen (z.B. mit nur 1 Buchstaben und 1 Zahl wie z.B. "H E 1", Kennzeichen in Mittel- und in Engschrift, zweizeilige Kennzeichen usw. usf.
Ich weiß, es gibt auch Kennzeichen, wie zum beispiel "RO A 123E" bei Elektroautos, es gibt Kennzeichen die der Gemeinde gehören wie das Feuerwehrauto von Halfing mit RO 2820, es gibt Landwirtschaftsautos und Bulldogs mit grünen Kennzeichen, es gibt blaue und rote Kennzeichen und zweizeilige Kennzeichen - mit Kennzeichen kenn ich mich aus wegen dem Beruf von meinen Papa face-smile

Ich frage mich ernsthaft, warum Du dich damit beschäftigst. Wenn Du es benötigst, dann solltest Du etwas vorgefertigtes nehmen. Wenn Du etwas derartiges entwickeln möchtest, dann solltest Du dir das Know-How eigentlich selber aneignen (können)... face-smile
Ich beschäftige mich damit, um mir das Know-How anzueignen... was meinst du was ich gerade mach? Ich eigne es mir an, indem ich mich hier "inspirieren" lasse ...
Mitglied: 129413
129413 May 29, 2016 updated at 14:25:14 (UTC)
Goto Top
Es hat keiner gesagt das das eine Aufgabe ist die man mal eben so zwischen Frühstück und Mittagessen codet. Damit haben sich schon vor dir ganze Programmiergruppen die Nächte um die Ohren geschlagen um die Erkennung so zu optimieren das sie auch fast in jedem Fall möglich ist.
Member: Aicher1998
Aicher1998 May 29, 2016 at 14:51:52 (UTC)
Goto Top
Zitat von @129413:

Es hat keiner gesagt das das eine Aufgabe ist die man mal eben so zwischen Frühstück und Mittagessen codet. Damit haben sich schon vor dir ganze Programmiergruppen die Nächte um die Ohren geschlagen um die Erkennung so zu optimieren das sie auch fast in jedem Fall möglich ist.

Na, dann ist es doch gleich eine viel interessantere Aufgabe wenn ich als 17jähriger Schulschwänzer ohne Ausbildung das schaff, was die "Profis" auch schaffen face-smile
Mitglied: 129413
129413 May 29, 2016 updated at 15:12:43 (UTC)
Goto Top
Thx, Ist mir etwas zu hoch ^^
... das zum Thema "Schulschwänzen" ...
Member: Aicher1998
Aicher1998 May 29, 2016 at 15:23:36 (UTC)
Goto Top
Zitat von @129413:

Thx, Ist mir etwas zu hoch ^^
... das zum Thema "Schulschwänzen" ...

Heißt gar nichts.