Gestelltes Problem
Ich hatte mich ja schon häufiger mit der Erstellung von Software im Umfeld meiner Faller-Rennbahn beschäftigt. Nachdem ich dann ein Android-Handy hatte, reifte in mir die Idee, dass man vielleicht einen Rundenzähler machen könnte. Die eingebaute Kamera würde die Strecke filmen und erkennen wenn eines der beiden Autos über die Ziellinie fährt.
Programm
Die erforderlichen Elemente hatte ich in irgendeiner Form alle schon einmal gemacht, die Bewegungserkennung, das Ermitteln des Bereichs in dem sich ein Fahrzeug aufhalten kann und auch das Zuordnen einer erkannten Bewegung zu einem der beiden Fahrzeuge. Die Möglichkeiten, die man für die Android-Entwicklung mit Eclipse hat, sind schon recht umfangreich und so kam ich schnell voran.
Mittendrin beschloss ich die Anwendung auch im Android Appstore zu veröffentlichen, was dann noch einigen Zusatzaufwand z.B. für die Internationalisierung bedeutete.
Die Benutzung der Anwendung besteht aus drei Phasen, als Erstes das Einstellen des Erkennungsalgorithmus, Wert für die Empfindlichkeit und die ungefähre Grösse der zu erkennenden Objekte. Dann musste die Anwendung lernen, wo die Fahrzeugspuren verlaufen. Danach konnten dann Rennen gefahren werden. Nachdem die Anwendung gelernt hatte, wo die Spuren verlaufen, durfte das Smartphone nicht mehr bewegt werden, so dass ich sämtliche Abläufe über Sprachausgaben des Handys steuerte.
Screenshots:
Das Menü (englische Version)
Einstellung der Erkennungsparameter. Auf die grüne Anzeige unten Rechts bin ich ein bisschen stolz (Ist alten Tonband-Aussteuerungsröhren nachempfunden). Sie zeigt an den Stellen weiss, wo im Kamerabild eine Bewegung (hier der Bleistift) erkannt wurde.
Nach Abschluss der Spurkalibrierung. Die Rechtecke geben die Bereiche vor, in denen das Fahrzeug detektiert wurde. Die Farbe der Rechtecke ist automatisch aus der Fahrzeugfarbe bestimmt worden. Die Pfeile deuten die erkannte Fahrtrichtung an.
Hier eine Kalibrierung im Video (da war noch ein Bug in der App wodurch die Richtungspfeile gedreht wurden):
Rennview. Es werden für jedes Fahrzeug die Runden gezählt, die Rundenzeit und die schnellste Runde ermittelt. Für den Start gibt es einen Countdown. Dabei werden auf Wunsch auch Fehlstarts erkannt. Wer zuerst die eingestellte Rundenanzahl erreicht, wird als Gewinner ausgerufen. Falls beide Fahrzeuge im gleichen Kamerabild die Ziellinie überqueren, gewinnt der Fahrer, dessen Auto am weitesten ins Kamerabild reingefahren ist.
2 thoughts on “SlotCount(Android)”