Wenn man an Ganzkörper-Motion-Tracking denkt, denkt man zumeist erst an Systeme aus der Film- oder Videospiel-Produktion, die mit farbigen Referenzpunkten auf dem zu analysierenden Körper oder sogar Ganzkörper-AnzĂŒgen die Bewegungen sehr genau entnehmen. In diesem Forschungsprojekt musste jedoch ein bestimmter Rahmen an Kosten und Aufwand fĂŒr das Orchester eingehalten werden, der es nicht erlaubt hat, derartige Systeme zu benutzen. Daher war es eine umso grĂ¶ĂŸere Herausforderung, eine Àhnliches Tracking nur mit Kameras und Machine-Learning Frameworks zu erreichen. Um die gewonnenen Daten aus der 2D-Pose-Estimation in der gewollten Virtual Reality Umgebung darstellen zu können, musste der Schritt in die dritte Dimension noch getan werden. Da das Ergebnis des Openpose Trackings 2D-Pixeldaten sind, die abhĂ€ngig vom analysierten Video entstehen, musste eine weitere Pose-Estimation Komponente angewandt werden, um auch die 3-dimensionale Position der einzelnen getrackten Gelenkpunkte zu ermitteln.

Hierzu ließen sich im Internet viele kleine Experimente und AnsĂ€tze finden, die allesamt sehr spezifisch in ihrer eigenen Funktion waren:

https://github.com/chanyn/3Dpose_ssl
Hier wird versucht, die menschliche Bewegung volumetrisch anhand des sichtbaren Körpers herauszufinden.

https://github.com/ildoonet/tf-pose-estimation
Dieses Framework spezialisiert sich auf die live-Erfassung von Bewegungen

http://gvv.mpi-inf.mpg.de/projects/VNect/content/VNect_SIGGRAPH2017.pdf
Hier wird eine weitere Option zur Echtzeiterfassung geboten.

3D-pose-baseline, das Framework fĂŒr das wir uns entschieden haben, versucht anhand eines Datensatzes eine rĂ€umlich realistische 3D-Bewegung aus einem Video zu entnehmen, auf Basis des Open-Source Machine Learning Frameworks tensorflow und der Skriptsprache Python. Arash Hosseini, ein Mitarbeiter am Openpose-Projekt hat diese Methodik auf den Datensatz angepasst, der aus einer Video-Analyse von Openpose entsteht. So können wir direkt an unseren bisherigen Datensatz anknĂŒpfen:

https://github.com/ArashHosseini/3d-pose-baseline

Man gibt hier die Ordnerstruktur an, die von Openpose ausgegeben wurde und das Ergebnis ist eine .TXT-Datei, die die Information fĂŒr die gesamte Bewegung enthĂ€lt. Das Ergebnis-Datenformat wurde allerdings auf .CSV umgestellt, der Inhalt bleibt der gleiche (siehe unten).

Um 3d-pose-baseline zu verwenden, muss eine funktionierende Tesorflow Environment eingerichtet werden. WĂ€hrend dem Forschungsprojekt wurde fĂŒr Machine-Learning Ubuntu 18.04 verwendet, fĂŒr das alle folgenden Installationen gedacht sind:

https://docs.anaconda.com/anaconda/install/linux/
https://github.com/markjay4k/Install-Tensorflow-on-Ubuntu-17.10-/blob/master/Tensorflow%20Install%20instructions.ipynb

Sobald die Tensorflow-Environment installiert und initialisiert ist, können die Python-Befehle ausgefĂŒhrt werden, die wie folgend aussehen:

python src/openpose_3dpose_sandbox_out.py --camera_frame --residual --batch_norm --dropout
0.5 --max_norm --evaluateActionWise --use_sh --epochs 200 --load 4874200 --openpose
trackingdata/mid_coco_op/ --people 0 --out test

Dabei sind folgende Komponenten wichtig zu kennen:

src/openpose_3dpose_sandbox_out.py
Beschreibt das Skript, das mit dem Befehl ausgefĂŒhrt wird. Hier muss man den Pfad angeben, wo sich die .py-Datei befindet

--openpose trackingdata/mid_coco_op/
Hier wird der Ordner angegeben, der den Openpose-Datensatz enthÀlt.

--people 0 --out test
Das sind Flags, die zugeschrieben wurden; „people“ beschreibt per ID die Person, von der das Ergebnis erstellt werden soll und das Wort nach „out“ gibt an wie die auszugebene .CSV-Datei heißen wird. Hier ist die verĂ€nderte Datei:

Link mit erneuertem Python Modul folgt.

Die .CSV-Datei die durch diese Rechnungen erstellt wird, bezieht ihre GrĂ¶ĂŸe aus der Anzahl Videoframes, die berechnet wurden. Wenn man die Datei in Excel/Calc öffnet ergibt sich folgende
Datenstruktur: Zeilen in der Tabelle stehen fĂŒr die einzelnen Frames der Bewegung. Spalten bezeichnen die einzelnen Koordinaten, die die Bewegung zusammenstellen in der X-, Y-, und Z-Position. So sind zum Beispiel die Spalten 1, 2, 3 fĂŒr die x, y, z Position des Joints HĂŒfte-Mitte zustĂ€ndig, 4, 5, 6 fĂŒr HĂŒfte-Rechts, 7, 8, 9 fĂŒr Knie-Rechts und so weiter.

Die aus 3d-baseline exportierte .CSV hat immer 96 Spalten, von denen allerdings viele ĂŒberflĂŒssig sind und daher aus dem benutzbaren Datenset herausfallen. Übrig bleiben 51 Spalten, die fĂŒr 17 mal 3 Koordinaten, also 17 Gelenke stehen. Das folgende Array zeigt die Gelenke aus der .CSV, die benutzt werden und lĂ€sst unbenutzte Werte einfach weg:

int[] relevant = {

0, // HĂŒfte Mitte 0
1, // HĂŒfte Links 1
2, // Knie Links 2
3, // Fuß Links 3
/*4,5,*/
6, // HĂŒfte Rechts 4
7, // Knie Rechts 5
8, // Fuß Rechts 6
/*9,10,11,*/
12, // Torso 7
13, // Nacken 8
14, // Hals 9
15, // Kopf 10
/*,16*/
17, // Schulter Rechts 11
18, // Ellbogen Rechts 12
19, // Hand Rechts 13
/*20,21, 22, 23, 24,*/
25, // Schulter Links 14
26, // Ellbogen links 15
27 // Hand Links 16
/*,28*/
};

FĂŒr den spĂ€teren Gebrauch haben wir das Array lĂŒckenlos gelassen, da wir aus den Tabellen die ĂŒberflĂŒssigen Werte streichen und die CSV wirklich nur aus 51 Spalten besteht. Die Gelenke sind folgendermaßen zuzuordnen.