Umsetzung des Projekts

Der Klassifizierer

Der Klassifizierer ist ein Modell, welches Input-Daten in vorher festgelegten Klassen einteilt. Dieser muss aber vorher mit, bereits vorhandenen Trainingsdaten erstellt werden. Beim Training dieses Klassifizierens mussten wir festlegen welche Trainingsdaten wir verwenden und wie wir diese Trainingsdaten aufteilen.

 

Eine Bewegung kann man mittels neuronale Netze oder Klassifizieren gelöst werden:

  • Neuronale Netze
    • Aufwändig
    • langsam beim Erkennen
    • für komplexe Erkennung Systeme geeignet
    • hohe rechen Leistung für das Training und die Erkennung
  • Klassifizierer
    • einfaches Training
    • etwas schlechtere Erkennung
    • schnell
    • Ressourcen sparend
    • für einfache Erkennung geeignet

Training & Verifikation

DATA-MINING-APP
Zum Training des Klassifizierers wurde natürlich eine große Anzahl von Trainingsdaten benötigt.

Da bei der zu Beginn verwendeten App „SensorMax“ das Speichern eher umständlich ist und die Daten in einem falschen Format abgespeichert wurden wurde kurzerhand eine eigene „DataMining“ App implementiert.

Die Funktion dieser App beschränkt sich auf ein simples Auslesen und speichern der Sensorwerte des Linearen Beschleuningungssensors.

Nach dem Drücken des Startbuttons werden die Sensorwerte ausgelesen und intern gepuffert für jeden Sensorwert wird zusätzlich ein Label gespeichert, das über den Label-Button erhöht wird (c0-cN).

Nach dem stoppen der Messung kann der gemessene Buffer gespeichert werden. Dabei wird der angegebene Name plus einer fortlaufenden Nummer um das Überschreiben zu verhindern vergeben.

Die Buttons sind sehr groß gestaltet, damit das betätigen während dem Daten Sammeln möglichst einfach ist, jedoch wird trotzdem ein Partner benötigt, der die App bedient.

Aufbereitung von Trainingsdaten

Die von der App erhaltenen Daten sind durch den Sensor stark verrauscht und scheinen unregelmäßig.

Jedoch lässt sich, nach der Filterung mit einem Tiefpass ein Muster erkennen.

Man erkennt zu Beginn ein rasches ansteigen der Beschleunigung, dass nach einem Höhepunkt wieder zu einem lokalen Minimum abfällt, das betragsmäßig gleich groß, aber negativ ist, bevor die Werte sich um den Nullpunkt einpegeln.

Dies beschreibt die Aufwärtsbewegung. Die Integrale beider Peaks muss addiert null ergeben, da der positive Peak die Aufwärtsbeschleunigung beschreibt und der negative Peak das Bremsen jener Bewegung.

Die zweite Hälfte der Bewegung, also die Abwärtsbewegung ist genau gespiegelt: Zuerst ein beschleunigen nach unten, mit negativen Werten und ein abbremsen mit positiven Werten.

Diese Bereiche werden an den gemeinsamen Steigungen von c0 bis c4 mit Labeln versehen.

Training des Klassifizierers im MATLAB

Der Klassifizierer wird im MATLAB mit dem „Classification-Learner“ mit 80% der Trainingsdaten trainiert. Die restlichen 20% werden für die Verifikation aufbehalten.

Verifikation des Klassifizierers

Der erstellte Klassifizierer wird in mehreren Stufen getestet. Der erste Test erfolgt direkt in Matlab.

Hierbei werden segmentierte Daten dem Klassifizierer übergeben und die Ergebnisse mit den, von Hand erstellten Labeln verglichen und die Präzision und Genauigkeit bestimmt.

Für die Zweite Stufe werden über die App „HyperIMU“ Sensordaten vom Handy über UDP auf den PC gestreamt und über ein Python Script in Matlab importiert und dem Klassifizierer übergeben.

Beim letzten Test wird der Klassifizierer aus Matlab in C-Code exportiert und in einer „Test-App“ mittels JNI und Cmake integriert.

Die App liest nur den Sensor aus, übergibt die Werte an den Klassifizierer und gibt das erhaltene Label aus.

Export & App-Integration

Der im MATLAB trainierte Klassifizierer mit den Algorithmen für die Filterung sowie auch die Auswertungen werden mittels „MATLAB Coder“ in C-Code exportiert.
Die exportierten C-Codes werden mit einer C++-Wrapper-Klasse mittels Java Native Interface in die MyPersonalBodytrainer-App integriert.