SlotCountDigi (Android)

Gestelltes Problem

Ich hatte schon eine Slotcar-Rundenzähler-App gemacht, die per Smartphonekamera Runden zählt. Sie war für eine Faller-AMS Rennbahn, bei der jeder Wagen seine eigene Spur hatte.
Da brauchte man nur eine Bewegungserkennung pro Fahrspur zu machen.

Nun bekam ich eine Carrera-Digital Bahn, bei der die Autos die Spur wechseln können. Also wollte ich eine App, die die Fahrzeuge an ihrem Äusseren erkennt.
Da habe ich viele Ansätze verfolgt und bin dann letzten Endes bei der Farbmarkierung gelandet (was macht man sonst, wenn zwei gleiche Fahrzeuge gegeneinander antreten?).

Aufkleber ausgedruckt und auf die Fahrzeuge geklebt:

Und das Smartphone dann mit einem Selfiestick oberhalb der Schiene fixiert:

Programm

Was ich durch die Aufkleber erreichen wollte, war dass die Autos sich farblich unterscheiden. Ich wollte aber keine App, wo man eingibt, wer welche Farbe hat. Das wäre irgendwie unsportlich/zu einfach gewesen. Die App sollte selbst herausfinden, welche Farbe ein Auto hat auch ohne zu wissen welche Aufkleberfarben überhaupt verwendet werden.

Dafür habe ich einen Kalibrierungsmodus gemacht. Man fährt die Autos nacheinander ins Blickfeld der Kamera und bleibt dann stehen.
Die App registriert live die Einfahrt (sagt “Auto rein”) und ermittelt den Ort an dem das Auto zum Stehen kommt (sagt “Auto erkannt”).
Dann schneidet sie das Bild des Autos aus, später im Rennen wird das Bild benutzt um das Auto in Listen auzugeben. Gleichzeitig wird das ausgeschnittene Bild auf die dominierende Farbe geprüft.
Ach, es war nett, das zu Programmieren, im Prinzip hab’ ich da eine Liste von Farbeimern gemacht, wo dann die Pixel des Bildes abgelegt werden und der vollste Eimer ist am Ende die dominierende Farbe. Diese Farbe ist die, nach der später im Rennen live im Kamerabild gesucht wird, um zu prüfen ob das Fahrzeug durchfährt.

Hier mal ein Beispiel, Fahrzeugkalibrierung für drei Fahrzeuge, ein gelbes, ein blaues und ein magentaes:

(Nicht schlecht, oder?)

Hier wird keine Library für Bildverarbeitung verwendet, die App holt sich live Kameraframes und verarbeitet sie in Echtzeit.

Nach dem Kalibrieren kann man dann den Autos die Fahrernamen zuweisen oder falsche Erkennungen löschen:

Nach der Kalibrierung kann SlotCountDigi die Fahrzeuge erkennen.
Es werden Runden gezählt (Im Video sieht man das jeweils aktuelle Klassement)
und Rundenzeiten ermittelt.

Kleines Rennen:

Man muss hier noch anmerken, dass die App nicht einfach im Kamerabild nach den Aufkleberfarben sucht (dann würden die im Bild ausgelegten Aufkleber ja auch stören). Es wird zunächst nach bewegten Fahrzeugen gesucht und dann erst pro Fahrzeugbild nach den Farben.