ich war hier: TutoriumMobileEingebetteteIntelligenzSS18

Revision history for TutoriumMobileEingebetteteIntelligenzSS18


Revision [94086]

Last edited on 2019-04-10 15:34:50 by ClaudiaMichel
Additions:
CategoryTutorienFKITSS18;CategoryTutorienFKITSS19
Deletions:
CategoryTutorienFKITSS18;


Revision [94085]

Edited on 2019-04-10 15:34:23 by ClaudiaMichel
Additions:
----
CategoryTutorienFKITSS18;


Revision [92283]

Edited on 2018-11-08 10:58:41 by FabianEndres
Additions:
{{image class="center" url="1.png" width="300"}}
{{image class="center" url="2.png" width="300"}}
{{image class="center" url="3.png" width="300"}}
{{image class="center" url="4.png" width="300"}}
{{image class="center" url="5.png" width="300"}}
Deletions:
{{image url="1.png" width="200"}}
{{image url="2.png" width="200"}}
{{image url="3.png" width="200"}}
{{image url="4.png" width="200"}}
{{image url="5.png" width="200"}}


Revision [92282]

Edited on 2018-11-08 10:55:04 by FabianEndres
Additions:
{{image url="1.png" width="200"}}
Abb.: Achsen eines Smartphones:
(Quelle: developer.android.com)
**Funktionsweise der App**
{{image url="2.png" width="200"}}
Abb.: Grafische Oberfläche der Aufzeichnungsanwendung
Auf der linken Seite wird die Geste eingestellt die aufgezeichnet wird. Zum Aufzeichnen wird der Knopf in der Mitte gedrückt und gehalten, wenn die Aufzeichnung beendet ist, den Knopf bitte loslassen. Danach schreibt die App selbständig die Dateien mit den entsprechenden Sensorwerten in den Speicher des Telefons.
{{image url="3.png" width="200"}}
Abb.: Verzeichnis mit aufgezeichneten Datein auf Smartphone
In dem Bild lässt sich auch schon erkennen wie das Namesschema der Dateien ist:
1) rot - Typ der Geste (quadrat, circle, hline...)
1) grün - Zufallszahl
1) blau - Sensortyp (lin_acc, magf, grav..., bitte beachten es sind mehr Sensoren, als oben aufgeführt)
1) .csv
Die Dateien lassen sich entweder manuell per USB auf den PC übertragen (Ordner: Android/data/com.example.schieck.ga/files/*) oder per Email an eine zuvor eingestellte Adresse versenden. Sie enthalten die Bewegungsmuster die später genutzt werden um das neuronale Netz zu trainieren.
{{image url="4.png" width="200"}}
Abb.: Inhalt einer csv Datei
In dem Bild sieht man was der Sensor eigentlich macht, es wird zu einem bestimmten Zeitpunkt ein bestimmter Zustand gemessen. Die App schreibt dann diese Zustände in die Dateien.
Es liegen also timestamp-value-paare vor.
**Implementierung**
Namensschema:
[Geste].[Zufallszahl].[Sensortyp].csv
Das Namensschema hat die Funktion, das nicht erst die Datei geöffnet werden muss um zu wissen, was sie enthält.
Die Zufallszall verhindert (oder macht es zumindest sehr unwahrscheinlich) das man nacharbeiten muss, und Dateien von Hand umbenennen, falls man Dateien aus mehreren Quellen hat.
{{image url="5.png" width="200"}}
Damit die App Sensorwerte vom Betriebssystem empfangen kann, wird ein SensorManager genutzt und ein SensorEventListener (stellt Callback zur Verfügung, das die Sensorwerte vom Betriebssystem entgegenimmt) implementiert.
class MainActivity() : Activity(), SensorEventListener {
var sensor_manager: SensorManager? = null
...und im onCreate() Callback initialisiert.
sensor_manager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
Zusatzlich wird ein Variable deklariert die die Abtastrate der Sensoren festlegt. Sie bieten nur grobe Richtwerte, da sich die in den Smartphones verbauten Sensoren, von Gerät zu Gerät unterscheiden, und sich damit auch die Abtastraten unterscheiden.
- Abtastraten
val delay = SensorManager.SENSOR_DELAY_FASTEST
{{image url="6.png" width="400"}}
//
Die Quellcodes können von mir direkt erhalten werden, bitte schreiben sie mich an. __schieck@stud.fh-sm.de__//
**{{color text="2. Vorverarbeitung der Daten:" c="#00386a"}}**
**Anpassen der Zeitstempel**
Um die timestamps besser überschauen zu können, wird von allen timestamps der niedrigste abgezogen, das geschieht mit:
fun adjustTimestamps(sample: Sample): Sample {
var first = sample.timestamp.first()
var retVal = sample
sample.timestamp.forEachIndexed { index, fl ->
retVal.timestamp[index] -= first
}
return retVal
}
**
Betragsquadrat berechnen **
Mittels des Betragsquadrat werden aus den Werten für x, y und z, ein Wert gemacht. Dadurch wird erreicht das die Werte Orientierungsunabhängig sind.
TODO: hier gehört ne formel hin, aber ==formel== ... ==formel== funktioniert nicht...
fun AbsoluteSquare(sample: Sample): Sample {
val sampleSize = sample.x.size
val retVal = Sample(sample.sensor, sample.gesture)
for (i in 0 until sampleSize) {
val absSquare = Math.abs((sample.x[i] + sample.y[i] + sample.z[i]))
retVal.absoluteSquare.add(absSquare)
}
return retVal
}
**Fehlende Werte ermitteln**
Die Werte die von Android Sensoren zurückgeliefert werden, sind nicht äquidistant (gleicher zeitlicher Abstand zwischen den Messwerten). Das ist aber nötig um sie später einem maschinellem Lernalgorhythmus zuzuführen. Die Sensoren von Android Geräten haben i.d.R. eine Abtastrate von 20-80Hz. Daher ist, verbunden mit der Unsicherheit WANN bestimmte Sensoren, bestimmte Werte zurückliefern, eine starke Fluktuation zu erkennen.
{{image url="7.png" width="400"}}
Abb.: Nicht-Äquidistante Abstände bei den Timestamps
Um dieses Problem zu beheben kann man das Signal (linear) interpolieren. Dabei werden die fehlenden Punkte durch die Mittel der umliegenden Punkte aufgefüllt.
TODO: Formel für lineares interpolieren, die YAML für die wiki nervt echt, sie kommt nicht mal mit simplen formeln klar...
fun interpolate(sample: Sample): Sample {
//require(count < 2) { "interpolate: illegal count!" }
val retVal = sample
for (i in 0 until sample.size) {
retVal.timestamp[i] = sample.timestamp.first() + i * (sample.timestamp.last() - sample.timestamp.first()) / sample.size
retVal.x[i] = sample.x.first() + i * (sample.x.last() - sample.x.first()) / sample.size
retVal.y[i] = sample.y.first() + i * (sample.y.last() - sample.y.first()) / sample.size
retVal.z[i] = sample.z.first() + i * (sample.z.last() - sample.z.first()) / sample.size
}
return retVal
}
**Trainieren von OLVQ1**
Deletions:
{{files}}


Revision [92280]

Edited on 2018-11-08 10:09:38 by FabianEndres
Additions:
Es werden dazu drei Anwendungen geschrieben:
1. eine App zum aufzeichen und labeln der gewünschten Muster
2. ein Computerprogramm welches die aufgezeichneten Trainingsdaten so verarbeitet wie das Smartphone, und danach das neuronale Netz trainiert
3. eine App die das trainierte neuronale Netz ausführt und damit die Bewegungen erkennt
Wenn nicht anders angegeben, bin ich der Urheber der Bilder, in dieser Wiki.
**{{color text="1. Datengewinnung/-erhebung:" c="#00386a"}}**
Die meisten Android-Smartphones verfügen über mindestens drei Sensoren zur Bewegungserkennung:
- den (linearen) Beschleunigungssensor,
- das Gyroskop sowie
- den Schwerkraftsensor.
Es gibt weitere Sensoren, das sind aber die Grundlegenden.
Diese Sensoren werden genutzt um die Bewegungen in Signale umzuwandeln.
Genutztes Koordinatensystem
Das Koordinatensystem ist relativ zum Bildschirm des Telefons in seiner Standardausrichtung definiert.
Die Achsen werden nicht vertauscht, wenn sich die Bildschirmausrichtung des Geräts ändert.
Die X-Achse ist horizontal und zeigt nach rechts, die Y-Achse ist vertikal und zeigt nach oben und die
Z-Achse zeigt zur Außenseite der Vorderseite des Bildschirms. In diesem System haben Koordinaten hinter dem Bildschirm negative Z-Werte.
{{files}}


Revision [92279]

Edited on 2018-11-08 09:55:28 by ClaudiaMichel
Additions:
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten mit einer hohen Zuverlässigkeit zu erkennen. z.B. Kreise, Linien, Quadrate, etc.
Die App führt die Erkennung mittels eine trainierten neuronalen Netzes durch, was zuvor auf einem Computer trainiert wurde.
Das Training dieses Netzes benötigt Trainings-und Testdaten, die vorher aufgezeichnet werden.
Deletions:
//**In Bearbeitung**//
//**TODO: wo kommt dieser Kommentar her?**//
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten mit einer hohen Zuverl


Revision [92277]

Edited on 2018-11-07 15:40:09 by schieck [update]

No Differences

Revision [92276]

Edited on 2018-11-07 15:39:15 by schieck [update]
Additions:
//**In Bearbeitung**//
//**TODO: wo kommt dieser Kommentar her?**//
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten mit einer hohen Zuverl
Deletions:
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten mit einer hohen Zuverlässlichkeit


Revision [92256]

Edited on 2018-11-05 22:00:36 by SebastianPrang [update]
Additions:
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten mit einer hohen Zuverlässlichkeit
Deletions:
//**In Bearbeitung**//
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten mit einer hohen Zuverl


Revision [92255]

Edited on 2018-11-05 19:06:03 by schieck [update]
Additions:
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten mit einer hohen Zuverl
Deletions:
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten zu erkennen. z.B. Kreise, Linien, Quadrate, etc.
======**{{color text="A. Datengewinnung/-erhebung:" c="#00386a"}}**======
Die meisten Android-Smartphones verfügen über mindestens drei Sensoren zur Bewegungserkennung:
- den [[https://de.wikipedia.org/wiki/Beschleunigungssensor (linearen) Beschleunigungssensor]],
- das [[https://de.wikipedia.org/wiki/Kreiselinstrument Gyroskop]] sowie
- den [[https://de.wikipedia.org/wiki/Bewegungssensor Schwerkraftsensor]].
Diese werden hier genutzt, um die Datenbasis anzulegen und später die zu erkennenden Gesten aufzuzeichnen bzw. die Gestenerkennung selbst durchzuführen.
**Genutztes Koordinatensystem**
Das Koordinatensystem ist relativ zum Bildschirm des Telefons in seiner Standardausrichtung definiert.
Die Achsen werden nicht vertauscht, wenn sich die Bildschirmausrichtung des Geräts ändert.
Die X-Achse ist horizontal und zeigt nach rechts, die Y-Achse ist vertikal und zeigt nach oben und die
Z-Achse zeigt zur Außenseite der Vorderseite des Bildschirms. In diesem System haben Koordinaten hinter dem Bildschirm negative Z-Werte.
Achsen eines Smartphones: [[https://developer.android.com/images/axis_device.png]]
**Funktionsweise der App**
Auf der linken Seite wird die Geste eingestellt die aufgezeichnet wird.
Danach wird der Knopf in der Mitte unten gerückt gehalten und die Geste aufgezeichnet. Als letztes wird der Knopf wieder losgelassen.
Danach schreibt die App selbständig die Dateien mit den entsprechenden Sensorwerten in den Speicher des Telefons.
{{image url="https://i.imgur.com/Kh5jBZL.jpg" title="text" alt="text"}}
Abb.: MainActivity.xml
==Implementierung==
Als erstes schreiben wir die App, die aus den Sensorwerten Listen mit timestamp-value-Paaren erstellt und diese in seperate Dateien schreibt.
Es werden csv ("comma seperated value" -> "Komma getrennte Werte") Dateien generiert. Jeweils pro Sensor und Geste, eine Datei.
Der Dateiname wird nach folgendem Schema gebildet:
[Geste].[Zufallszahl].[Sensortyp].csv
Das hat die Funktion, das nicht erst die Datei geöffnet werden muss um zu wissen, welche Werte sie enthält.
Die Zufallszall verhindert (oder macht es zumindest sehr unwahrscheinlich) das man nacharbeiten muss, und Dateien
von Hand umbenennen, falls man Dateien aus mehreren Quellen hat.
- [[https://i.imgur.com/slhwby9.png]]
- [[https://i.imgur.com/UGIACfM.png]]
In diesen Dateien ist in der ersten Spalte der timestamp (in Nanosekunden) der vom System vergeben wird zu sehen,
in den letzten drei Spalten stehen die Werte (in m/s^2). Je nachdem was für eine Geste aufgezeichnet wurde, können die
Dateien in der Größe variierern.
Damit die App Sensorwerte vom Betriebssystem empfangen kann, wird ein [[https://developer.android.com/reference/android/hardware/SensorManager
SensorManager]] genutzt und ein
[[https://developer.android.com/reference/android/hardware/SensorEventListener
SensorEventListener]] (stellt Callback zur Verfügung, das die Sensorwerte vom Betriebssystem entgegenimmt) implementiert.
%%class MainActivity() : Activity(), SensorEventListener {%% %% var sensor_manager: SensorManager? = null%%
...und im onCreate() Callback initialisiert.
%% sensor_manager = getSystemService(Context.SENSOR_SERVICE) as SensorManager %%
Zusatzlich wird ein Variable deklariert die die Abtastrate der Sensoren festlegt. Sie bieten nur grobe Richtwerte, da sich die in den Smartphones verbauten Sensoren, von Gerät zu Gerät unterscheiden, und sich damit auch die Abtastraten unterscheiden.

- [[https://developer.android.com/reference/android/hardware/SensorManager.html#SENSOR_DELAY_FASTEST
Abtastraten]]
%%val delay = SensorManager.SENSOR_DELAY_FASTEST%%
{{image class="left" image url="https://i.imgur.com/5RGMxJh.png" width="1024"}}
Abb.: Funktionsweise der Aufzeichnungsroutine
Quellcodes/Gesten aufzeichnen:
{{image class="left" image url="anweisungen.png" width="200"}}
Abb.: Beschreibung der Gesten die mit dem Programm aufgezeichnet werden sollen.
{{image class="left" image url="iclauncherbackground.png" width="300"}}
**{{color text="Bitte ergänzen: Abb.: Titel der Abbildung, Quelle, Datum" c="red"}}**
{{image class="left" image url="activitymain.png" width="300"}}
**{{color text="Z. Literaturhinweise:" c="#00386a"}} **
https://developer.android.com/reference/android/hardware/SensorEvent
----
CategoryTutorienFKITSS18


Revision [92249]

Edited on 2018-11-01 18:39:55 by schieck [update]
Additions:
{{image class="left" image url="anweisungen.png" width="200"}}
Abb.: Beschreibung der Gesten die mit dem Programm aufgezeichnet werden sollen.
Deletions:
{{files download="Quellcodes-Gesten-Aufzeichnen.zip" text="Quellcodes der App"}}
{{image class="left" image url="anweisungen.png" width="100"}}


Revision [92248]

Edited on 2018-11-01 18:38:36 by schieck [update]
Additions:
Abb.: MainActivity.xml
{{image class="left" image url="https://i.imgur.com/5RGMxJh.png" width="1024"}}
Abb.: Funktionsweise der Aufzeichnungsroutine
Deletions:
{{image class="left" image url="https://i.imgur.com/5RGMxJh.png" width="800"}}
**{{color text="Abb. MainActivity.xml"}}**


Revision [92247]

Edited on 2018-11-01 18:26:07 by schieck [update]
Additions:
**{{color text="Abb. MainActivity.xml"}}**


Revision [91998]

Edited on 2018-10-18 14:16:47 by ClaudiaMichel [update]
Additions:
----
CategoryTutorienFKITSS18


Revision [91312]

Edited on 2018-09-19 16:00:52 by ClaudiaMichel [update]
Deletions:
Die meisten Android-Smartphones verf
{{files}}


Revision [91311]

Edited on 2018-09-19 16:00:13 by ClaudiaMichel [update]
Additions:
{{image class="left" image url="activitymain.png" width="300"}}


Revision [91310]

Edited on 2018-09-19 15:57:17 by ClaudiaMichel [update]

No Differences

Revision [91309]

Edited on 2018-09-19 15:56:51 by ClaudiaMichel [update]
Additions:
{{image class="left" image url="anweisungen.png" width="100"}}
Deletions:
{{image class="left" image url="anweisungen.png" width="200"}}


Revision [91308]

Edited on 2018-09-19 15:56:18 by ClaudiaMichel [update]
Additions:
{{image class="left" image url="anweisungen.png" width="200"}}
{{image class="left" image url="iclauncherbackground.png" width="300"}}
Deletions:
{{image class="left" image url="anweisungen.png" width="100"}}
{{image class="left" image url="iclauncherbackground.png" width="100"}}


Revision [91307]

Edited on 2018-09-19 15:55:46 by ClaudiaMichel [update]
Additions:
{{image class="left" image url="iclauncherbackground.png" width="100"}}
{{files}}


Revision [91306]

Edited on 2018-09-19 15:52:28 by ClaudiaMichel [update]

No Differences

Revision [91305]

Edited on 2018-09-19 15:52:06 by ClaudiaMichel [update]
Additions:
Quellcodes/Gesten aufzeichnen:
Deletions:
Gesten aufzeichnen:


Revision [91304]

Edited on 2018-09-19 15:51:34 by ClaudiaMichel [update]
Deletions:
{{files}}


Revision [91303]

Edited on 2018-09-19 15:49:58 by ClaudiaMichel [update]
Additions:
{{image class="left" image url="anweisungen.png" width="100"}}
Deletions:
{{image class="left" image url="anweisungen.png" width="400"}}


Revision [91302]

Edited on 2018-09-19 15:49:40 by ClaudiaMichel [update]
Additions:
{{image class="left" image url="anweisungen.png" width="400"}}
Deletions:
{{image class="left" anweisungen.png" width="300"}}


Revision [91301]

Edited on 2018-09-19 15:47:33 by ClaudiaMichel [update]

No Differences

Revision [91300]

Edited on 2018-09-19 15:47:04 by ClaudiaMichel [update]
Additions:
{{image class="left" anweisungen.png" width="300"}}
Deletions:
{{image class="left" aufzeichnungen.png" width="300"}}


Revision [91299]

Edited on 2018-09-19 15:46:49 by ClaudiaMichel [update]
Additions:
{{image class="left" aufzeichnungen.png" width="300"}}
Deletions:
{{image class="left" .png" width="300"}}


Revision [91298]

Edited on 2018-09-19 15:45:32 by ClaudiaMichel [update]
Additions:
{{image class="left" .png" width="300"}}
{{files}}


Revision [91297]

Edited on 2018-09-19 15:42:50 by ClaudiaMichel [update]
Additions:
Gesten aufzeichnen:


Revision [91296]

Edited on 2018-09-19 15:39:36 by ClaudiaMichel [update]
Additions:
- [[https://developer.android.com/reference/android/hardware/SensorManager.html#SENSOR_DELAY_FASTEST
Deletions:
[[https://developer.android.com/reference/android/hardware/SensorManager.html#SENSOR_DELAY_FASTEST


Revision [91295]

Edited on 2018-09-19 15:37:51 by ClaudiaMichel [update]
Additions:
Zusatzlich wird ein Variable deklariert die die Abtastrate der Sensoren festlegt. Sie bieten nur grobe Richtwerte, da sich die in den Smartphones verbauten Sensoren, von Gerät zu Gerät unterscheiden, und sich damit auch die Abtastraten unterscheiden.
Deletions:
Zusatzlich wird ein Variable deklariert die die Abtastrate der Sensoren festlegt. Sie bieten nur grobe Richtwerte da sich die in den Smartphones verbauten Sensoren, von Gerät zu Gerät unterscheiden, und sich damit auch die Abtastraten unterscheiden.


Revision [91294]

Edited on 2018-09-19 15:36:39 by ClaudiaMichel [update]
Additions:
%%class MainActivity() : Activity(), SensorEventListener {%% %% var sensor_manager: SensorManager? = null%%
...und im onCreate() Callback initialisiert.
Deletions:
%%class MainActivity() : Activity(), SensorEventListener {%% %% var sensor_manager: SensorManager? = null%% ...und im onCreate() Callback initialisiert.


Revision [91293]

Edited on 2018-09-19 15:34:00 by ClaudiaMichel [update]
Additions:
**{{color text="Bitte ergänzen: Abb.: Titel der Abbildung, Quelle, Datum" c="red"}}**
**{{color text="Bitte ergänzen: Abb.: Titel der Abbildung, Quelle, Datum" c="red"}}**
Deletions:
**{{color text="Bitte ergänzen: Abb.: Titel, Quelle, Datum" c="red"}}**
**{{color text="Bitte ergänzen: Abb.: Titel, Quelle, Datum" c="red"}}**


Revision [91292]

Edited on 2018-09-19 15:33:11 by ClaudiaMichel [update]

No Differences

Revision [91291]

Edited on 2018-09-19 15:32:56 by ClaudiaMichel [update]
Additions:
{{image class="left" image url="https://i.imgur.com/5RGMxJh.png" width="800"}}
Deletions:
{{image url="https://i.imgur.com/5RGMxJh.png" title="text" alt="text"}}


Revision [91290]

Edited on 2018-09-19 15:28:07 by ClaudiaMichel [update]

No Differences

Revision [91289]

Edited on 2018-09-19 15:26:07 by ClaudiaMichel [update]

No Differences

Revision [91288]

Edited on 2018-09-19 15:25:47 by ClaudiaMichel [update]
Additions:
- [[https://i.imgur.com/slhwby9.png]]
- [[https://i.imgur.com/UGIACfM.png]]
In diesen Dateien ist in der ersten Spalte der timestamp (in Nanosekunden) der vom System vergeben wird zu sehen,
in den letzten drei Spalten stehen die Werte (in m/s^2). Je nachdem was für eine Geste aufgezeichnet wurde, können die
Dateien in der Größe variierern.
Deletions:
[[https://i.imgur.com/slhwby9.png]]
[[https://i.imgur.com/UGIACfM.png]]
In diesen Dateien ist in der ersten Spalte der timestamp (in
Nanosekunden) der vom System vergeben wird zu sehen, in den letzten drei Spalten stehen die Werte (in m/s^2). Je nachdem was für eine Geste aufgezeichnet wurde, können die Dateien in der Größe variierern.


Revision [91287]

Edited on 2018-09-19 15:24:58 by ClaudiaMichel [update]
Additions:
[[https://i.imgur.com/slhwby9.png]]
[[https://i.imgur.com/UGIACfM.png]]
Deletions:
{{image url="https://i.imgur.com/slhwby9.png" title="text"
alt="text"}}{{image url="https://i.imgur.com/UGIACfM.png" title="text"
alt="text"}}


Revision [91286]

Edited on 2018-09-19 15:23:44 by ClaudiaMichel [update]
Additions:
Das hat die Funktion, das nicht erst die Datei geöffnet werden muss um zu wissen, welche Werte sie enthält.
Die Zufallszall verhindert (oder macht es zumindest sehr unwahrscheinlich) das man nacharbeiten muss, und Dateien
von Hand umbenennen, falls man Dateien aus mehreren Quellen hat.
Deletions:
Das hat die Funktion, das nicht erst die Datei geöffnet werden muss um zu wissen, welche Werte sie enthält. Die Zufallszall verhindert (oder macht es zumindest sehr unwahrscheinlich) das man nacharbeiten muss, und Dateien von Hand umbenennen, falls man Dateien aus mehreren Quellen hat.


Revision [91285]

Edited on 2018-09-19 15:23:10 by ClaudiaMichel [update]
Additions:
Es werden csv ("comma seperated value" -> "Komma getrennte Werte") Dateien generiert. Jeweils pro Sensor und Geste, eine Datei.
Der Dateiname wird nach folgendem Schema gebildet:
Deletions:
Es werden csv ("comma seperated value" -> "Komma getrennte Werte") Dateien generiert. Jeweils pro Sensor und Geste, eine Datei. Der Dateiname wird nach folgendem Schema gebildet:


Revision [91284]

Edited on 2018-09-19 15:22:49 by ClaudiaMichel [update]
Additions:
Danach wird der Knopf in der Mitte unten gerückt gehalten und die Geste aufgezeichnet. Als letztes wird der Knopf wieder losgelassen.
Danach schreibt die App selbständig die Dateien mit den entsprechenden Sensorwerten in den Speicher des Telefons.
Deletions:
Danach wird der Knopf in der Mitte unten gerückt gehalten und die Geste aufgezeichnet. Als letztes wird der Knopf wieder losgelassen. Danach schreibt die App selbständig die Dateien mit den entsprechenden Sensorwerten in den Speicher des Telefons.


Revision [91283]

Edited on 2018-09-19 15:22:00 by ClaudiaMichel [update]
Additions:
Als erstes schreiben wir die App, die aus den Sensorwerten Listen mit timestamp-value-Paaren erstellt und diese in seperate Dateien schreibt.
Deletions:
Als erstes schreiben wir die App die aus den Sensorwerten Listen mit timestamp-value-Paaren erstellt und diese in seperate Dateien schreibt.


Revision [91282]

Edited on 2018-09-19 15:21:26 by ClaudiaMichel [update]
Additions:
**{{color text="Bitte ergänzen: Abb.: Titel, Quelle, Datum" c="red"}}**


Revision [91281]

Edited on 2018-09-19 15:19:36 by ClaudiaMichel [update]

No Differences

Revision [91280]

Edited on 2018-09-19 15:18:47 by ClaudiaMichel [update]
Additions:
Achsen eines Smartphones: [[https://developer.android.com/images/axis_device.png]]
Deletions:
[[https://developer.android.com/images/axis_device.png]]
title="Achsen eines Smartphones" alt="Achsen eines Smartphones"}}


Revision [91279]

Edited on 2018-09-19 15:17:29 by ClaudiaMichel [update]
Additions:
[[https://developer.android.com/images/axis_device.png]]
Deletions:
{{image url="https://developer.android.com/images/axis_device.png"


Revision [91278]

Edited on 2018-09-19 15:15:57 by ClaudiaMichel [update]
Additions:
Die X-Achse ist horizontal und zeigt nach rechts, die Y-Achse ist vertikal und zeigt nach oben und die
Z-Achse zeigt zur Außenseite der Vorderseite des Bildschirms. In diesem System haben Koordinaten hinter dem Bildschirm negative Z-Werte.
Deletions:
Die X-Achse ist horizontal und zeigt nach rechts, die Y-Achse ist vertikal und zeigt nach oben und die Z-Achse zeigt zur Außenseite der Vorderseite des Bildschirms. In diesem System haben Koordinaten hinter dem Bildschirm negative Z-Werte.


Revision [91277]

Edited on 2018-09-19 15:15:23 by ClaudiaMichel [update]
Additions:
Das Koordinatensystem ist relativ zum Bildschirm des Telefons in seiner Standardausrichtung definiert.
Die Achsen werden nicht vertauscht, wenn sich die Bildschirmausrichtung des Geräts ändert.
Deletions:
Das Koordinatensystem ist relativ zum Bildschirm des Telefons in seiner Standardausrichtung definiert. Die Achsen werden nicht vertauscht, wenn sich die Bildschirmausrichtung des Geräts ändert.


Revision [91276]

Edited on 2018-09-19 15:14:59 by ClaudiaMichel [update]
Additions:
Diese werden hier genutzt, um die Datenbasis anzulegen und später die zu erkennenden Gesten aufzuzeichnen bzw. die Gestenerkennung selbst durchzuführen.
Deletions:
Diese werden hier genutzt um die Datenbasis anzulegen und später die zu erkennenden Gesten aufzuzeichnen bzw. die Gestenerkennung selbst durchzuführen.


Revision [91275]

Edited on 2018-09-19 15:14:23 by ClaudiaMichel [update]
Additions:
Die meisten Android-Smartphones verfügen über mindestens drei Sensoren zur Bewegungserkennung:
- den [[https://de.wikipedia.org/wiki/Beschleunigungssensor (linearen) Beschleunigungssensor]],
- das [[https://de.wikipedia.org/wiki/Kreiselinstrument Gyroskop]] sowie
- den [[https://de.wikipedia.org/wiki/Bewegungssensor Schwerkraftsensor]].
Deletions:
Die meisten Android-Smartphones verfügen über mindestens drei Sensoren zu Bewegungserkennung, den [[https://de.wikipedia.org/wiki/Beschleunigungssensor (linearen) Beschleunigungssensor]], das [[https://de.wikipedia.org/wiki/Kreiselinstrument Gyroskop]] und den [[https://de.wikipedia.org/wiki/Bewegungssensor Schwerkraftsensor]].


Revision [91274]

Edited on 2018-09-19 15:13:41 by ClaudiaMichel [update]
Additions:
Die meisten Android-Smartphones verfügen über mindestens drei Sensoren zu Bewegungserkennung, den [[https://de.wikipedia.org/wiki/Beschleunigungssensor (linearen) Beschleunigungssensor]], das [[https://de.wikipedia.org/wiki/Kreiselinstrument Gyroskop]] und den [[https://de.wikipedia.org/wiki/Bewegungssensor Schwerkraftsensor]].
Deletions:
Die meisten Android-Smartphones verfuegen über mindestens drei Sensoren zu Bewegungserkennung, den [[https://de.wikipedia.org/wiki/Beschleunigungssensor (linearen) Beschleunigungssensor]], das [[https://de.wikipedia.org/wiki/Kreiselinstrument Gyroskop]] und den [[https://de.wikipedia.org/wiki/Bewegungssensor Schwerkraftsensor]].


Revision [91273]

Edited on 2018-09-19 15:00:31 by ClaudiaMichel [update]
Additions:
//**In Bearbeitung**//


Revision [91272]

Edited on 2018-09-19 14:59:59 by ClaudiaMichel [update]

No Differences

Revision [91271]

Edited on 2018-09-19 14:58:44 by ClaudiaMichel [update]
Additions:
Diese werden hier genutzt um die Datenbasis anzulegen und später die zu erkennenden Gesten aufzuzeichnen bzw. die Gestenerkennung selbst durchzuführen.
**Genutztes Koordinatensystem**
Das Koordinatensystem ist relativ zum Bildschirm des Telefons in seiner Standardausrichtung definiert. Die Achsen werden nicht vertauscht, wenn sich die Bildschirmausrichtung des Geräts ändert.
Die X-Achse ist horizontal und zeigt nach rechts, die Y-Achse ist vertikal und zeigt nach oben und die Z-Achse zeigt zur Außenseite der Vorderseite des Bildschirms. In diesem System haben Koordinaten hinter dem Bildschirm negative Z-Werte.
{{image url="https://developer.android.com/images/axis_device.png"
title="Achsen eines Smartphones" alt="Achsen eines Smartphones"}}
**Funktionsweise der App**
Auf der linken Seite wird die Geste eingestellt die aufgezeichnet wird.
Danach wird der Knopf in der Mitte unten gerückt gehalten und die Geste aufgezeichnet. Als letztes wird der Knopf wieder losgelassen. Danach schreibt die App selbständig die Dateien mit den entsprechenden Sensorwerten in den Speicher des Telefons.
{{image url="https://i.imgur.com/Kh5jBZL.jpg" title="text" alt="text"}}
==Implementierung==
Als erstes schreiben wir die App die aus den Sensorwerten Listen mit timestamp-value-Paaren erstellt und diese in seperate Dateien schreibt.
Es werden csv ("comma seperated value" -> "Komma getrennte Werte") Dateien generiert. Jeweils pro Sensor und Geste, eine Datei. Der Dateiname wird nach folgendem Schema gebildet:
[Geste].[Zufallszahl].[Sensortyp].csv
Das hat die Funktion, das nicht erst die Datei geöffnet werden muss um zu wissen, welche Werte sie enthält. Die Zufallszall verhindert (oder macht es zumindest sehr unwahrscheinlich) das man nacharbeiten muss, und Dateien von Hand umbenennen, falls man Dateien aus mehreren Quellen hat.
{{image url="https://i.imgur.com/slhwby9.png" title="text"
alt="text"}}{{image url="https://i.imgur.com/UGIACfM.png" title="text"
alt="text"}}
In diesen Dateien ist in der ersten Spalte der timestamp (in
Nanosekunden) der vom System vergeben wird zu sehen, in den letzten drei Spalten stehen die Werte (in m/s^2). Je nachdem was für eine Geste aufgezeichnet wurde, können die Dateien in der Größe variierern.
Damit die App Sensorwerte vom Betriebssystem empfangen kann, wird ein [[https://developer.android.com/reference/android/hardware/SensorManager
SensorManager]] genutzt und ein
[[https://developer.android.com/reference/android/hardware/SensorEventListener
SensorEventListener]] (stellt Callback zur Verfügung, das die Sensorwerte vom Betriebssystem entgegenimmt) implementiert.
%%class MainActivity() : Activity(), SensorEventListener {%% %% var sensor_manager: SensorManager? = null%% ...und im onCreate() Callback initialisiert.
%% sensor_manager = getSystemService(Context.SENSOR_SERVICE) as SensorManager %%
Zusatzlich wird ein Variable deklariert die die Abtastrate der Sensoren festlegt. Sie bieten nur grobe Richtwerte da sich die in den Smartphones verbauten Sensoren, von Gerät zu Gerät unterscheiden, und sich damit auch die Abtastraten unterscheiden.
[[https://developer.android.com/reference/android/hardware/SensorManager.html#SENSOR_DELAY_FASTEST
Abtastraten]]
%%val delay = SensorManager.SENSOR_DELAY_FASTEST%%
{{image url="https://i.imgur.com/5RGMxJh.png" title="text" alt="text"}}
{{files download="Quellcodes-Gesten-Aufzeichnen.zip" text="Quellcodes der App"}}
**{{color text="Z. Literaturhinweise:" c="#00386a"}} **
https://developer.android.com/reference/android/hardware/SensorEvent


Revision [91270]

Edited on 2018-09-19 14:54:37 by ClaudiaMichel [update]
Additions:
Die meisten Android-Smartphones verfuegen über mindestens drei Sensoren zu Bewegungserkennung, den [[https://de.wikipedia.org/wiki/Beschleunigungssensor (linearen) Beschleunigungssensor]], das [[https://de.wikipedia.org/wiki/Kreiselinstrument Gyroskop]] und den [[https://de.wikipedia.org/wiki/Bewegungssensor Schwerkraftsensor]].


Revision [91204]

Edited on 2018-09-18 20:37:28 by schieck [update]
Additions:
**{{color text="Tutor:" c="#00386a"}}** Timmy Schieck
======**{{color text="A. Datengewinnung/-erhebung:" c="#00386a"}}**======
Die meisten Android-Smartphones verf
Deletions:
**{{color text="Tutor/in:" c="#00386a"}}** Timmy Schieck
**{{color text="A. Datengewinnung:" c="#00386a"}}**
1. Erstellung einer Android Anwendung zum Aufzeichnen von Sensordaten.
2. Vorverarbeitung der gewonnenen Sensordaten, um die Mustererkennung darauf auszuführen.
3. Trainieren eines Models mit den vorhandenen Daten.
4. Implementation des Models auf Android.
**{{color text="Z. Literaturhinweise:" c="#00386a"}} **
https://developer.android.com/reference/android/hardware/SensorEvent


Revision [91203]

Edited on 2018-09-18 19:24:59 by schieck [update]
Additions:
**{{color text="Adressaten des Lehrangebotes:" c="#00386a"}}**
Deletions:
**{{color text="C. Adressaten des Lehrangebotes:" c="#00386a"}}**


Revision [91202]

Edited on 2018-09-18 19:24:37 by schieck [update]
Additions:
**{{color text="Tutor/in:" c="#00386a"}}** Timmy Schieck
**{{color text="Ziel des Tutoriums:" c="#00386a"}}**
Es wird eine App fuer Android erstellt, die in der Lage ist, in die Luft "gemalte" Gesten zu erkennen. z.B. Kreise, Linien, Quadrate, etc.
**{{color text="C. Adressaten des Lehrangebotes:" c="#00386a"}}**
Studenten des Studienganges "Mobile Computing"
**{{color text="A. Datengewinnung:" c="#00386a"}}**
1. Erstellung einer Android Anwendung zum Aufzeichnen von Sensordaten.
2. Vorverarbeitung der gewonnenen Sensordaten, um die Mustererkennung darauf auszuführen.
3. Trainieren eines Models mit den vorhandenen Daten.
4. Implementation des Models auf Android.
**{{color text="Z. Literaturhinweise:" c="#00386a"}} **
https://developer.android.com/reference/android/hardware/SensorEvent
Deletions:
**{{color text="A. Tutor/in:" c="#00386a"}}** Timmy Schieck
**{{color text="B. Ziel des Tutoriums:" c="#00386a"}}**
Es wird eine App f


Revision [91201]

Edited on 2018-09-18 19:21:43 by schieck [update]
Additions:
Es wird eine App f
Deletions:
Vermittlung grundlegender praktischer Kenntnisse auf dem Gebiet der Sensorprogrammierung auf Android, sowie der Mustererkennung mit Python.
**{{color text="C. Adressaten des Lehrangebotes:" c="#00386a"}}**
Studenten des Studienganges "Mobile Computing"
**{{color text="D. Veranstaltungsinhalte:" c="#00386a"}}**
1. Erstellung einer Android Anwendung zum Aufzeichnen von Sensordaten.
2. Vorverarbeitung der gewonnenen Sensordaten, um die Mustererkennung darauf auszuführen.
3. Trainieren eines Models mit den vorhandenen Daten.
4. Implementation des Models auf Android.
**{{color text="E. Literaturhinweise:" c="#00386a"}} **
https://developer.android.com/reference/android/hardware/SensorEvent


Revision [90584]

Edited on 2018-08-20 16:50:17 by ClaudiaMichel [update]
Deletions:
----
CategoryInfoTutorien


Revision [87879]

Edited on 2018-05-07 16:29:57 by ClaudiaMichel [update]

No Differences

Revision [87878]

Edited on 2018-05-07 16:29:28 by ClaudiaMichel [update]
Deletions:
**{{color text="F. Kursunterlagen:" c="#00386a"}} **


Revision [87875]

Edited on 2018-05-07 16:23:53 by ClaudiaMichel [update]
Additions:
===**{{color text="Tutorium Mobile und Eingebettete Intelligenz" c="#00386a"}}** ===
Deletions:
===**{{color text="Tutorium Mobile und Eingebettete Systeme" c="#00386a"}}** ===


Revision [87874]

The oldest known version of this page was created on 2018-05-07 16:23:42 by ClaudiaMichel [update]
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki